diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2018-02-28 18:30:30 +0300 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2018-09-03 16:13:26 +0300 |
commit | fb5571717c24c264518aaaf1ab4ec4df73e4cebd (patch) | |
tree | bc524604e9c431eebee1ba5919f872744083ff7a /drivers/gpu/drm/omapdrm/dss | |
parent | 73fc0ac4a69506ead7cf0c0ad0ef79f283766f25 (diff) | |
download | linux-fb5571717c24c264518aaaf1ab4ec4df73e4cebd.tar.xz |
drm/omap: dss: Move src and dst check and set to connection handlers
The encoders duplicate the same omap_dss_device src and dst fields set
and checks in their connect and disconnect handlers. Move the code to
the connect and disconnect wrappers.
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>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/base.c | 24 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dpi.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dsi.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/hdmi4.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/hdmi5.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/omapdss.h | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/output.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/sdi.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/venc.c | 5 |
9 files changed, 25 insertions, 43 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c index 599ef628736b..22d3818208d7 100644 --- a/drivers/gpu/drm/omapdrm/dss/base.c +++ b/drivers/gpu/drm/omapdrm/dss/base.c @@ -105,15 +105,27 @@ struct omap_dss_device *omapdss_find_device_by_port(struct device_node *src, int omapdss_device_connect(struct omap_dss_device *src, struct omap_dss_device *dst) { + int ret; + dev_dbg(src->dev, "connect\n"); if (omapdss_device_is_connected(src)) return -EBUSY; if (src->driver) - return src->driver->connect(src); + ret = src->driver->connect(src); else - return src->ops->connect(src, dst); + ret = src->ops->connect(src, dst); + + if (ret < 0) + return ret; + + if (dst) { + dst->src = src; + src->dst = dst; + } + + return 0; } EXPORT_SYMBOL_GPL(omapdss_device_connect); @@ -127,6 +139,14 @@ void omapdss_device_disconnect(struct omap_dss_device *src, return; } + if (dst) { + if (WARN_ON(dst != src->dst)) + return; + + dst->src = NULL; + src->dst = NULL; + } + if (src->driver) src->driver->disconnect(src); else diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c index 11d94b310d1a..bb7dcd88026f 100644 --- a/drivers/gpu/drm/omapdrm/dss/dpi.c +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c @@ -671,11 +671,6 @@ static void dpi_disconnect(struct omap_dss_device *dssdev, { struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); - WARN_ON(dst != dssdev->dst); - - if (dst != dssdev->dst) - return; - omapdss_output_unset_device(dssdev); dss_mgr_disconnect(&dpi->output, dssdev); diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c index 3cc91e973f01..8e3dce1ddfb0 100644 --- a/drivers/gpu/drm/omapdrm/dss/dsi.c +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c @@ -4990,11 +4990,6 @@ static void dsi_disconnect(struct omap_dss_device *dssdev, { struct dsi_data *dsi = to_dsi_data(dssdev); - WARN_ON(dst != dssdev->dst); - - if (dst != dssdev->dst) - return; - omapdss_output_unset_device(dssdev); dss_mgr_disconnect(&dsi->output, dssdev); diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c index e0406f2a90e7..7e5474e87c11 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c @@ -478,11 +478,6 @@ static void hdmi_disconnect(struct omap_dss_device *dssdev, { struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev); - WARN_ON(dst != dssdev->dst); - - if (dst != dssdev->dst) - return; - omapdss_output_unset_device(dssdev); dss_mgr_disconnect(&hdmi->output, dssdev); diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c index 45d2eacedb2a..86b18ccb8d24 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c @@ -481,11 +481,6 @@ static void hdmi_disconnect(struct omap_dss_device *dssdev, { struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev); - WARN_ON(dst != dssdev->dst); - - if (dst != dssdev->dst) - return; - omapdss_output_unset_device(dssdev); dss_mgr_disconnect(&hdmi->output, dssdev); diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h index 58bd6948bcde..0033adf534d3 100644 --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h @@ -391,6 +391,9 @@ struct omap_dss_device { struct module *owner; + struct omap_dss_device *src; + struct omap_dss_device *dst; + struct list_head list; struct list_head panel_list; @@ -409,8 +412,6 @@ struct omap_dss_device { enum omap_display_caps caps; - struct omap_dss_device *src; - enum omap_dss_display_state state; /* OMAP DSS output specific fields */ @@ -426,9 +427,6 @@ struct omap_dss_device { /* the port number in the DT node */ int port_num; - - /* dynamic fields */ - struct omap_dss_device *dst; }; struct omap_dss_driver { diff --git a/drivers/gpu/drm/omapdrm/dss/output.c b/drivers/gpu/drm/omapdrm/dss/output.c index e659c8e5c419..6abdb615a4c0 100644 --- a/drivers/gpu/drm/omapdrm/dss/output.c +++ b/drivers/gpu/drm/omapdrm/dss/output.c @@ -47,9 +47,6 @@ int omapdss_output_set_device(struct omap_dss_device *out, goto err; } - out->dst = dssdev; - dssdev->src = out; - mutex_unlock(&output_lock); return 0; @@ -81,9 +78,6 @@ int omapdss_output_unset_device(struct omap_dss_device *out) goto err; } - out->dst->src = NULL; - out->dst = NULL; - mutex_unlock(&output_lock); return 0; diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c index b21499e124c1..e782be2c36bc 100644 --- a/drivers/gpu/drm/omapdrm/dss/sdi.c +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c @@ -301,11 +301,6 @@ static void sdi_disconnect(struct omap_dss_device *dssdev, { struct sdi_device *sdi = dssdev_to_sdi(dssdev); - WARN_ON(dst != dssdev->dst); - - if (dst != dssdev->dst) - return; - omapdss_output_unset_device(dssdev); dss_mgr_disconnect(&sdi->output, dssdev); diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c index 4cae03f24e1b..17668da8ac5a 100644 --- a/drivers/gpu/drm/omapdrm/dss/venc.c +++ b/drivers/gpu/drm/omapdrm/dss/venc.c @@ -740,11 +740,6 @@ static void venc_disconnect(struct omap_dss_device *dssdev, { struct venc_device *venc = dssdev_to_venc(dssdev); - WARN_ON(dst != dssdev->dst); - - if (dst != dssdev->dst) - return; - omapdss_output_unset_device(dssdev); dss_mgr_disconnect(&venc->output, dssdev); |