From 0f37938c7c432c7737d85940475bcbd3c362447e Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Wed, 7 Mar 2018 00:28:18 +0200 Subject: [PATCH] drm/omap: Set dispc_channel_connect from DSS output connect handlers 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 Reviewed-by: Sebastian Reichel Signed-off-by: Tomi Valkeinen --- drivers/gpu/drm/omapdrm/dss/dpi.c | 3 +++ drivers/gpu/drm/omapdrm/dss/dsi.c | 3 +++ drivers/gpu/drm/omapdrm/dss/hdmi4.c | 3 +++ drivers/gpu/drm/omapdrm/dss/hdmi5.c | 3 +++ drivers/gpu/drm/omapdrm/dss/sdi.c | 3 +++ drivers/gpu/drm/omapdrm/dss/venc.c | 3 +++ drivers/gpu/drm/omapdrm/omap_crtc.c | 3 --- 7 files changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c index 178b463c2d60d..5b04cc514c58d 100644 --- a/drivers/gpu/drm/omapdrm/dss/dpi.c +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c @@ -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); diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c index 948e3b8735234..921e794aec0d8 100644 --- a/drivers/gpu/drm/omapdrm/dss/dsi.c +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c @@ -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); diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c index 6616530d5fe68..1e025a8b99c99 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c @@ -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); diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c index f7e15edc05fc8..d5860438ddd95 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c @@ -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); diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c index 764299cafbe2d..b74188458e91f 100644 --- a/drivers/gpu/drm/omapdrm/dss/sdi.c +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c @@ -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); diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c index c2811c4251953..00421e2a8eb6b 100644 --- a/drivers/gpu/drm/omapdrm/dss/venc.c +++ b/drivers/gpu/drm/omapdrm/dss/venc.c @@ -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); diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c index 90917d040ddb9..7f837697e76c3 100644 --- a/drivers/gpu/drm/omapdrm/omap_crtc.c +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c @@ -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, -- 2.39.5