[PATCH v3 37/61] drm/omap: dss: Extend omapdss_of_find_source_for_first_ep() to sinks

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Aug 6 00:27:17 UTC 2018


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 at ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.co.uk>
---
 drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c     |  6 +++---
 drivers/gpu/drm/omapdrm/displays/connector-dvi.c           |  6 +++---
 drivers/gpu/drm/omapdrm/displays/connector-hdmi.c          |  6 +++---
 drivers/gpu/drm/omapdrm/displays/encoder-opa362.c          |  2 +-
 drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c          |  2 +-
 drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c       |  2 +-
 drivers/gpu/drm/omapdrm/displays/panel-dpi.c               |  6 +++---
 drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c            |  6 +++---
 .../gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c    |  6 +++---
 drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c    |  6 +++---
 drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c |  6 +++---
 drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c    |  6 +++---
 drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c    |  6 +++---
 drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c    |  6 +++---
 drivers/gpu/drm/omapdrm/dss/dss-of.c                       | 14 +++++++-------
 drivers/gpu/drm/omapdrm/dss/omapdss.h                      |  2 +-
 16 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
index 5b151b88e1c1..15921b361672 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
index 14f7941eb83a..f8510cd7b166 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
index 005b1b0cbc46..3452925ed54d 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
index d74b90961c68..939e259d601d 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
index 2bb1af8f815f..55549c5a5af2 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
index e33f73f06e00..58a831c3f74c 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
index c8cd2f663ddf..8c17ad4ddf84 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index febb20961dc5..501c47f95130 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
index 52e30bd1ed4a..73416b1c7386 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
index 3f88407fe3c0..cf5d9e1522a8 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
index 08576ae94d55..1c3180495dfd 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
index 181c3c271918..d91ab8dab4d9 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
index 39234f5db144..a57daf44d421 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
index 61fcf2286387..719c298d3996 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/dss/dss-of.c b/drivers/gpu/drm/omapdrm/dss/dss-of.c
index 771b20db2d98..0422597ac6b0 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss-of.c
+++ b/drivers/gpu/drm/omapdrm/dss/dss-of.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index c2d9ebdec3d1..dc2f8167f61b 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -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,
-- 
Regards,

Laurent Pinchart



More information about the dri-devel mailing list