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/base.c | |
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/base.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/base.c | 24 |
1 files changed, 22 insertions, 2 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 |