drm/omap: dss: Extend omapdss_of_find_source_for_first_ep() to sinks
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Fri, 2 Mar 2018 19:11:06 +0000 (21:11 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 3 Sep 2018 13:13:27 +0000 (16:13 +0300)
The omapdss_of_find_source_for_first_ep() function locates the source
corresponding to the first endpoint of the first port of a device node.
We can easily extend it to locate sinks as well by passing the port
number as a parameter. This will be useful to find sinks in encoders
drivers.

Extend the function and rename it to omapdss_of_find_connected_device()
to reflect its new extended purpose.

Additionally, it is useful to differentiate between failures to return
the connected device because no link exists in the device tree for the
requested port, or because the connected device as described in the
device tree is invalid or not probed yet. Return NULL in the first case
and an error code in the second case, and update the callers
accordingly.

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>
16 files changed:
drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
drivers/gpu/drm/omapdrm/displays/connector-dvi.c
drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
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/displays/panel-dpi.c
drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
drivers/gpu/drm/omapdrm/dss/dss-of.c
drivers/gpu/drm/omapdrm/dss/omapdss.h

index 5b151b8..15921b3 100644 (file)
@@ -47,10 +47,10 @@ static int tvc_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(ddata->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(ddata->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(ddata->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 14f7941..f8510cd 100644 (file)
@@ -61,10 +61,10 @@ static int dvic_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 005b1b0..3452925 100644 (file)
@@ -57,10 +57,10 @@ static int hdmic_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(ddata->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(ddata->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(ddata->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index d74b909..939e259 100644 (file)
@@ -37,7 +37,7 @@ static int opa362_connect(struct omap_dss_device *dssdev,
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
        if (IS_ERR(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
                return PTR_ERR(src);
index 2bb1af8..55549c5 100644 (file)
@@ -33,7 +33,7 @@ static int tfp410_connect(struct omap_dss_device *dssdev,
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
        if (IS_ERR(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
                return PTR_ERR(src);
index e33f73f..58a831c 100644 (file)
@@ -42,7 +42,7 @@ static int tpd_connect(struct omap_dss_device *dssdev,
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
        if (IS_ERR(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
                return PTR_ERR(src);
index c8cd2f6..8c17ad4 100644 (file)
@@ -39,10 +39,10 @@ static int panel_dpi_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index febb209..501c47f 100644 (file)
@@ -763,10 +763,10 @@ static int dsicm_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 52e30bd..73416b1 100644 (file)
@@ -121,10 +121,10 @@ static int lb035q02_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 3f88407..cf5d9e1 100644 (file)
@@ -116,10 +116,10 @@ static int nec_8048_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 08576ae..1c31804 100644 (file)
@@ -62,10 +62,10 @@ static int sharp_ls_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 181c3c2..d91ab8d 100644 (file)
@@ -511,10 +511,10 @@ static int acx565akm_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 39234f5..a57daf4 100644 (file)
@@ -170,10 +170,10 @@ static int td028ttec1_panel_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 61fcf22..719c298 100644 (file)
@@ -341,10 +341,10 @@ static int tpo_td043_connect(struct omap_dss_device *dssdev)
        struct omap_dss_device *src;
        int r;
 
-       src = omapdss_of_find_source_for_first_ep(dssdev->dev->of_node);
-       if (IS_ERR(src)) {
+       src = omapdss_of_find_connected_device(dssdev->dev->of_node, 0);
+       if (IS_ERR_OR_NULL(src)) {
                dev_err(dssdev->dev, "failed to find video source\n");
-               return PTR_ERR(src);
+               return src ? PTR_ERR(src) : -EINVAL;
        }
 
        r = omapdss_device_connect(dssdev->dss, src, dssdev);
index 771b20d..0422597 100644 (file)
@@ -47,7 +47,7 @@ dss_of_port_get_parent_device(struct device_node *port)
 }
 
 struct omap_dss_device *
-omapdss_of_find_source_for_first_ep(struct device_node *node)
+omapdss_of_find_connected_device(struct device_node *node, unsigned int port)
 {
        struct device_node *src_node;
        struct device_node *src_port;
@@ -56,27 +56,27 @@ omapdss_of_find_source_for_first_ep(struct device_node *node)
        u32 port_number = 0;
 
        /* Get the endpoint... */
-       ep = of_graph_get_endpoint_by_regs(node, 0, 0);
+       ep = of_graph_get_endpoint_by_regs(node, port, 0);
        if (!ep)
-               return ERR_PTR(-EINVAL);
+               return NULL;
 
        /* ... and its remote port... */
        src_port = of_graph_get_remote_port(ep);
        of_node_put(ep);
        if (!src_port)
-               return ERR_PTR(-EINVAL);
+               return NULL;
 
        /* ... and the remote port's number and parent... */
        of_property_read_u32(src_port, "reg", &port_number);
        src_node = dss_of_port_get_parent_device(src_port);
        of_node_put(src_port);
        if (!src_node)
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
-       /* ... and finally the source. */
+       /* ... and finally the connected device. */
        src = omapdss_find_device_by_port(src_node, port_number);
        of_node_put(src_node);
 
        return src ? src : ERR_PTR(-EPROBE_DEFER);
 }
-EXPORT_SYMBOL_GPL(omapdss_of_find_source_for_first_ep);
+EXPORT_SYMBOL_GPL(omapdss_of_find_connected_device);
index c2d9ebd..dc2f816 100644 (file)
@@ -532,7 +532,7 @@ static inline bool omapdss_device_is_enabled(struct omap_dss_device *dssdev)
 }
 
 struct omap_dss_device *
-omapdss_of_find_source_for_first_ep(struct device_node *node);
+omapdss_of_find_connected_device(struct device_node *node, unsigned int port);
 
 enum dss_writeback_channel {
        DSS_WB_LCD1_MGR =       0,