drm/omap: Set dispc_channel_connect from DSS output connect handlers
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 6 Mar 2018 22:28:18 +0000 (00:28 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 3 Sep 2018 13:13:28 +0000 (16:13 +0300)
The omap_dss_device.dispc_channel_connect field is used by DSS outputs
to fail the .enable() operation if they're not connected. Set the field
directly from the (dis)connect handlers of the DSS outputs instead of
going through the CRTC dss_mgr operations.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/dss/dpi.c
drivers/gpu/drm/omapdrm/dss/dsi.c
drivers/gpu/drm/omapdrm/dss/hdmi4.c
drivers/gpu/drm/omapdrm/dss/hdmi5.c
drivers/gpu/drm/omapdrm/dss/sdi.c
drivers/gpu/drm/omapdrm/dss/venc.c
drivers/gpu/drm/omapdrm/omap_crtc.c

index 178b463..5b04cc5 100644 (file)
@@ -626,12 +626,15 @@ static int dpi_connect(struct omap_dss_device *src,
                return r;
        }
 
+       dst->dispc_channel_connected = true;
        return 0;
 }
 
 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);
 
        dss_mgr_disconnect(dst);
index 948e3b8..921e794 100644 (file)
@@ -4896,12 +4896,15 @@ static int dsi_connect(struct omap_dss_device *src,
                return r;
        }
 
+       dst->dispc_channel_connected = true;
        return 0;
 }
 
 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);
 
        dss_mgr_disconnect(dst);
index 6616530..1e025a8 100644 (file)
@@ -443,12 +443,15 @@ static int hdmi_connect(struct omap_dss_device *src,
                return r;
        }
 
+       dst->dispc_channel_connected = true;
        return 0;
 }
 
 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);
 
        dss_mgr_disconnect(dst);
index f7e15ed..d586043 100644 (file)
@@ -448,12 +448,15 @@ static int hdmi_connect(struct omap_dss_device *src,
                return r;
        }
 
+       dst->dispc_channel_connected = true;
        return 0;
 }
 
 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);
 
        dss_mgr_disconnect(dst);
index 764299c..b741884 100644 (file)
@@ -267,12 +267,15 @@ static int sdi_connect(struct omap_dss_device *src,
                return r;
        }
 
+       dst->dispc_channel_connected = true;
        return 0;
 }
 
 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);
 
        dss_mgr_disconnect(dst);
index c2811c4..00421e2 100644 (file)
@@ -706,12 +706,15 @@ static int venc_connect(struct omap_dss_device *src,
                return r;
        }
 
+       dst->dispc_channel_connected = true;
        return 0;
 }
 
 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);
 
        dss_mgr_disconnect(dst);
index 90917d0..7f83769 100644 (file)
@@ -114,8 +114,6 @@ static int omap_crtc_dss_connect(struct omap_drm_private *priv,
                enum omap_channel channel,
                struct omap_dss_device *dst)
 {
-       dst->dispc_channel_connected = true;
-
        return 0;
 }
 
@@ -123,7 +121,6 @@ static void omap_crtc_dss_disconnect(struct omap_drm_private *priv,
                enum omap_channel channel,
                struct omap_dss_device *dst)
 {
-       dst->dispc_channel_connected = false;
 }
 
 static void omap_crtc_dss_start_update(struct omap_drm_private *priv,