[PATCH 06/29] drm/omap: Remove connection checks from internal encoders .enable()
Sebastian Reichel
sebastian.reichel at collabora.com
Sun Dec 9 21:54:25 UTC 2018
Hi,
On Wed, Dec 05, 2018 at 04:59:59PM +0200, Laurent Pinchart wrote:
> The internal encoders return an error from their .enable() handler when
> their are not connected to a dss manager. As the flag used is set and
> cleared in the connect and disconnect handlers, this effectively checks
> whether the omap_dss_device is connected.
>
> The .enable() handler is called from code paths that access the dss
> devices chain from the display device, which is set to NULL when the
> device isn't connected, making it impossible to access the device in
> that case.
>
> The safety check is thus not needed, remove it.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.com>
-- Sebastian
> drivers/gpu/drm/omapdrm/dss/dpi.c | 17 +----------------
> drivers/gpu/drm/omapdrm/dss/dsi.c | 20 ++------------------
> drivers/gpu/drm/omapdrm/dss/hdmi4.c | 17 +----------------
> drivers/gpu/drm/omapdrm/dss/hdmi5.c | 17 +----------------
> drivers/gpu/drm/omapdrm/dss/omapdss.h | 1 -
> drivers/gpu/drm/omapdrm/dss/sdi.c | 16 +---------------
> drivers/gpu/drm/omapdrm/dss/venc.c | 17 +----------------
> 7 files changed, 7 insertions(+), 98 deletions(-)
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c
> index ca4f3c4c6318..0cf3b220e35f 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dpi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
> @@ -386,12 +386,6 @@ static int dpi_display_enable(struct omap_dss_device *dssdev)
>
> mutex_lock(&dpi->lock);
>
> - if (!out->dispc_channel_connected) {
> - DSSERR("failed to enable display: no output/manager\n");
> - r = -ENODEV;
> - goto err_no_out_mgr;
> - }
> -
> if (dpi->vdds_dsi_reg) {
> r = regulator_enable(dpi->vdds_dsi_reg);
> if (r)
> @@ -439,7 +433,6 @@ static int dpi_display_enable(struct omap_dss_device *dssdev)
> if (dpi->vdds_dsi_reg)
> regulator_disable(dpi->vdds_dsi_reg);
> err_reg_enable:
> -err_no_out_mgr:
> mutex_unlock(&dpi->lock);
> return r;
> }
> @@ -596,23 +589,15 @@ static int dpi_connect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> struct dpi_data *dpi = dpi_get_data_from_dssdev(dst);
> - int r;
>
> dpi_init_pll(dpi);
>
> - r = omapdss_device_connect(dst->dss, dst, dst->next);
> - if (r)
> - return r;
> -
> - dst->dispc_channel_connected = true;
> - return 0;
> + return omapdss_device_connect(dst->dss, dst, dst->next);
> }
>
> static void dpi_disconnect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - dst->dispc_channel_connected = false;
> -
> omapdss_device_disconnect(dst, dst->next);
> }
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
> index 0a485c5b982e..180951eb161c 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dsi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
> @@ -3753,19 +3753,13 @@ static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
> {
> struct dsi_data *dsi = to_dsi_data(dssdev);
> int bpp = dsi_get_pixel_size(dsi->pix_fmt);
> - struct omap_dss_device *out = &dsi->output;
> u8 data_type;
> u16 word_count;
> int r;
>
> - if (!out->dispc_channel_connected) {
> - DSSERR("failed to enable display: no output/manager\n");
> - return -ENODEV;
> - }
> -
> r = dsi_display_init_dispc(dsi);
> if (r)
> - goto err_init_dispc;
> + return r;
>
> if (dsi->mode == OMAP_DSS_DSI_VIDEO_MODE) {
> switch (dsi->pix_fmt) {
> @@ -3814,7 +3808,6 @@ static int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
> }
> err_pix_fmt:
> dsi_display_uninit_dispc(dsi);
> -err_init_dispc:
> return r;
> }
>
> @@ -4877,21 +4870,12 @@ static int dsi_get_clocks(struct dsi_data *dsi)
> static int dsi_connect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - int r;
> -
> - r = omapdss_device_connect(dst->dss, dst, dst->next);
> - if (r)
> - return r;
> -
> - dst->dispc_channel_connected = true;
> - return 0;
> + return omapdss_device_connect(dst->dss, dst, dst->next);
> }
>
> static void dsi_disconnect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - dst->dispc_channel_connected = false;
> -
> omapdss_device_disconnect(dst, dst->next);
> }
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> index aabdda394c9c..b6b44f07c74e 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
> @@ -322,12 +322,6 @@ static int hdmi_display_enable(struct omap_dss_device *dssdev)
>
> mutex_lock(&hdmi->lock);
>
> - if (!dssdev->dispc_channel_connected) {
> - DSSERR("failed to enable display: no output/manager\n");
> - r = -ENODEV;
> - goto err0;
> - }
> -
> r = hdmi_power_on_full(hdmi);
> if (r) {
> DSSERR("failed to power on device\n");
> @@ -417,21 +411,12 @@ void hdmi4_core_disable(struct hdmi_core_data *core)
> static int hdmi_connect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - int r;
> -
> - r = omapdss_device_connect(dst->dss, dst, dst->next);
> - if (r)
> - return r;
> -
> - dst->dispc_channel_connected = true;
> - return 0;
> + return omapdss_device_connect(dst->dss, dst, dst->next);
> }
>
> static void hdmi_disconnect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - dst->dispc_channel_connected = false;
> -
> omapdss_device_disconnect(dst, dst->next);
> }
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> index 9e8556f67a29..beef25703eab 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
> @@ -330,12 +330,6 @@ static int hdmi_display_enable(struct omap_dss_device *dssdev)
>
> mutex_lock(&hdmi->lock);
>
> - if (!dssdev->dispc_channel_connected) {
> - DSSERR("failed to enable display: no output/manager\n");
> - r = -ENODEV;
> - goto err0;
> - }
> -
> r = hdmi_power_on_full(hdmi);
> if (r) {
> DSSERR("failed to power on device\n");
> @@ -422,21 +416,12 @@ static void hdmi_core_disable(struct omap_hdmi *hdmi)
> static int hdmi_connect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - int r;
> -
> - r = omapdss_device_connect(dst->dss, dst, dst->next);
> - if (r)
> - return r;
> -
> - dst->dispc_channel_connected = true;
> - return 0;
> + return omapdss_device_connect(dst->dss, dst, dst->next);
> }
>
> static void hdmi_disconnect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - dst->dispc_channel_connected = false;
> -
> omapdss_device_disconnect(dst, dst->next);
> }
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> index 149a0f09adbc..4e1e58e85429 100644
> --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
> +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> @@ -440,7 +440,6 @@ struct omap_dss_device {
>
> /* DISPC channel for this output */
> enum omap_channel dispc_channel;
> - bool dispc_channel_connected;
>
> /* output instance */
> enum omap_dss_output_id id;
> diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c
> index b2fe2387037a..7de817c69913 100644
> --- a/drivers/gpu/drm/omapdrm/dss/sdi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
> @@ -136,11 +136,6 @@ static int sdi_display_enable(struct omap_dss_device *dssdev)
> unsigned long fck;
> int r;
>
> - if (!sdi->output.dispc_channel_connected) {
> - DSSERR("failed to enable display: no output/manager\n");
> - return -ENODEV;
> - }
> -
> r = regulator_enable(sdi->vdds_sdi_reg);
> if (r)
> goto err_reg_enable;
> @@ -251,21 +246,12 @@ static int sdi_check_timings(struct omap_dss_device *dssdev,
> static int sdi_connect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - int r;
> -
> - r = omapdss_device_connect(dst->dss, dst, dst->next);
> - if (r)
> - return r;
> -
> - dst->dispc_channel_connected = true;
> - return 0;
> + return omapdss_device_connect(dst->dss, dst, dst->next);
> }
>
> static void sdi_disconnect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - dst->dispc_channel_connected = false;
> -
> omapdss_device_disconnect(dst, dst->next);
> }
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c
> index fbe9d42dbdb6..bc9a3d52f34d 100644
> --- a/drivers/gpu/drm/omapdrm/dss/venc.c
> +++ b/drivers/gpu/drm/omapdrm/dss/venc.c
> @@ -531,12 +531,6 @@ static int venc_display_enable(struct omap_dss_device *dssdev)
>
> mutex_lock(&venc->venc_lock);
>
> - if (!dssdev->dispc_channel_connected) {
> - DSSERR("Failed to enable display: no output/manager\n");
> - r = -ENODEV;
> - goto err0;
> - }
> -
> r = venc_power_on(venc);
> if (r)
> goto err0;
> @@ -687,21 +681,12 @@ static int venc_get_clocks(struct venc_device *venc)
> static int venc_connect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - int r;
> -
> - r = omapdss_device_connect(dst->dss, dst, dst->next);
> - if (r)
> - return r;
> -
> - dst->dispc_channel_connected = true;
> - return 0;
> + return omapdss_device_connect(dst->dss, dst, dst->next);
> }
>
> static void venc_disconnect(struct omap_dss_device *src,
> struct omap_dss_device *dst)
> {
> - dst->dispc_channel_connected = false;
> -
> omapdss_device_disconnect(dst, dst->next);
> }
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20181209/10384d63/attachment-0001.sig>
More information about the dri-devel
mailing list