From eaaedaf6a1de3be2f62feefc40fa6a711382f1ca Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Fri, 2 Mar 2018 21:11:06 +0200 Subject: [PATCH] drm/omap: dss: Extend omapdss_of_find_source_for_first_ep() to sinks 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 Reviewed-by: Sebastian Reichel Signed-off-by: Tomi Valkeinen --- .../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 +- .../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 +++--- .../omapdrm/displays/panel-lgphilips-lb035q02.c | 6 +++--- .../drm/omapdrm/displays/panel-nec-nl8048hl11.c | 6 +++--- .../drm/omapdrm/displays/panel-sharp-ls037v7dw01.c | 6 +++--- .../drm/omapdrm/displays/panel-sony-acx565akm.c | 6 +++--- .../drm/omapdrm/displays/panel-tpo-td028ttec1.c | 6 +++--- .../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 5b151b88e1c1b..15921b361672d 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 14f7941eb83a8..f8510cd7b1666 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 005b1b0cbc466..3452925ed54db 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 d74b90961c68a..939e259d601d3 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 2bb1af8f815f5..55549c5a5af2f 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 e33f73f06e004..58a831c3f74ca 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 c8cd2f663ddf8..8c17ad4ddf848 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 febb20961dc5c..501c47f951307 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 52e30bd1ed4ae..73416b1c73865 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 3f88407fe3c08..cf5d9e1522a8c 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 08576ae94d554..1c3180495dfda 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 181c3c2719180..d91ab8dab4d94 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 39234f5db144c..a57daf44d4213 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 61fcf22863873..719c298d39964 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 771b20db2d98a..0422597ac6b0c 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 c2d9ebdec3d14..dc2f8167f61b5 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, -- 2.39.5