]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
drm/omap: dss: Move src and dst check and set to connection handlers
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Wed, 28 Feb 2018 15:30:30 +0000 (17:30 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 3 Sep 2018 13:13:26 +0000 (16:13 +0300)
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>
12 files changed:
drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
drivers/gpu/drm/omapdrm/dss/base.c
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/omapdss.h
drivers/gpu/drm/omapdrm/dss/output.c
drivers/gpu/drm/omapdrm/dss/sdi.c
drivers/gpu/drm/omapdrm/dss/venc.c

index 5724bdf53a4280380d04bde9d78e9fab439dd888..c058f889700d756a5d842d2fbbc2ce4871946847 100644 (file)
@@ -51,9 +51,6 @@ static int opa362_connect(struct omap_dss_device *dssdev,
                return r;
        }
 
-       dst->src = dssdev;
-       dssdev->dst = dst;
-
        ddata->in = in;
        return 0;
 }
@@ -64,13 +61,6 @@ static void opa362_disconnect(struct omap_dss_device *dssdev,
        struct panel_drv_data *ddata = to_panel_data(dssdev);
        struct omap_dss_device *in = ddata->in;
 
-       WARN_ON(dst != dssdev->dst);
-       if (dst != dssdev->dst)
-               return;
-
-       dst->src = NULL;
-       dssdev->dst = NULL;
-
        omapdss_device_disconnect(in, &ddata->dssdev);
 
        omap_dss_put_device(in);
index d65fed251b133407cbf10a20c8835509ace11ad0..b0e75af564850b8e8e67792aeeeed8bdbe6dca05 100644 (file)
@@ -47,9 +47,6 @@ static int tfp410_connect(struct omap_dss_device *dssdev,
                return r;
        }
 
-       dst->src = dssdev;
-       dssdev->dst = dst;
-
        ddata->in = in;
        return 0;
 }
@@ -60,13 +57,6 @@ static void tfp410_disconnect(struct omap_dss_device *dssdev,
        struct panel_drv_data *ddata = to_panel_data(dssdev);
        struct omap_dss_device *in = ddata->in;
 
-       WARN_ON(dst != dssdev->dst);
-       if (dst != dssdev->dst)
-               return;
-
-       dst->src = NULL;
-       dssdev->dst = NULL;
-
        omapdss_device_disconnect(in, &ddata->dssdev);
 
        omap_dss_put_device(in);
index bdd9d39215a441bd76aed9d4a4ff328452cd2bea..218cf73d1455e9c3efbb8c69c6a52ff424d2a980 100644 (file)
@@ -55,9 +55,6 @@ static int tpd_connect(struct omap_dss_device *dssdev,
                return r;
        }
 
-       dst->src = dssdev;
-       dssdev->dst = dst;
-
        gpiod_set_value_cansleep(ddata->ct_cp_hpd_gpio, 1);
        gpiod_set_value_cansleep(ddata->ls_oe_gpio, 1);
 
@@ -74,17 +71,9 @@ static void tpd_disconnect(struct omap_dss_device *dssdev,
        struct panel_drv_data *ddata = to_panel_data(dssdev);
        struct omap_dss_device *in = ddata->in;
 
-       WARN_ON(dst != dssdev->dst);
-
-       if (dst != dssdev->dst)
-               return;
-
        gpiod_set_value_cansleep(ddata->ct_cp_hpd_gpio, 0);
        gpiod_set_value_cansleep(ddata->ls_oe_gpio, 0);
 
-       dst->src = NULL;
-       dssdev->dst = NULL;
-
        omapdss_device_disconnect(in, &ddata->dssdev);
 
        omap_dss_put_device(in);
index 599ef628736b5afef2bcdb945046d0e30130941d..22d3818208d7b3fb440d07c364d110ceb3d1996e 100644 (file)
@@ -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
index 11d94b310d1a2208a8ececf09a14654d2df08e53..bb7dcd88026f33613e7cf660c2dc3f7b5b04e994 100644 (file)
@@ -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);
index 3cc91e973f010f8af84de9aad3aa600a1c5d21c1..8e3dce1ddfb0cc03bf502a67dfe25457d17603fa 100644 (file)
@@ -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);
index e0406f2a90e73f989e20cc069e2d56f53dcb9630..7e5474e87c11213bc394e91df90131dd8200a6cf 100644 (file)
@@ -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);
index 45d2eacedb2a4bcfb72cfa71bfe5c7a766300fc2..86b18ccb8d24888246e6a9cc3819ba8af201d963 100644 (file)
@@ -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);
index 58bd6948bcde9d6bb430f83c0fa044ad7421fa05..0033adf534d3acbecfe968a3488042b921fba76d 100644 (file)
@@ -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 {
index e659c8e5c419d6d1aad51c8ecc1505ff1f1c86c6..6abdb615a4c0130f8e2d33788a8983a9d912b199 100644 (file)
@@ -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;
index b21499e124c10614955fea6cae352f0646337d0c..e782be2c36bc1ea68179d3d559acde12dce19ad7 100644 (file)
@@ -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);
index 4cae03f24e1b8e65fedbce261f3fb45df6de8075..17668da8ac5ae912628edc1f10577da1fa1c0810 100644 (file)
@@ -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);