[PATCH/RFC 20/60] drm/omap: dss: Add functions to connect and disconnect devices
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Mar 7 00:24:23 UTC 2018
The omap_dss_device objects model display components and are connected
at runtime to create display pipelines. The connect and disconnect
operations implemented by each component contain lots of duplicate code.
As a first step towards fixing this, create new functions to wrap the
direct calls to those operations and use them.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
.../gpu/drm/omapdrm/displays/connector-analog-tv.c | 4 ++--
drivers/gpu/drm/omapdrm/displays/connector-dvi.c | 4 ++--
drivers/gpu/drm/omapdrm/displays/connector-hdmi.c | 4 ++--
drivers/gpu/drm/omapdrm/displays/encoder-opa362.c | 4 ++--
drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c | 4 ++--
drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c | 4 ++--
drivers/gpu/drm/omapdrm/displays/panel-dpi.c | 4 ++--
drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c | 6 +++---
.../drm/omapdrm/displays/panel-lgphilips-lb035q02.c | 4 ++--
.../gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c | 4 ++--
.../drm/omapdrm/displays/panel-sharp-ls037v7dw01.c | 4 ++--
.../gpu/drm/omapdrm/displays/panel-sony-acx565akm.c | 4 ++--
.../gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c | 4 ++--
.../gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c | 4 ++--
drivers/gpu/drm/omapdrm/dss/base.c | 20 ++++++++++++++++++++
drivers/gpu/drm/omapdrm/dss/omapdss.h | 4 ++++
drivers/gpu/drm/omapdrm/omap_drv.c | 4 ++--
17 files changed, 55 insertions(+), 31 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
index a94868d9398b..41ba3c5dbe7d 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-analog-tv.c
@@ -59,7 +59,7 @@ static int tvc_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -79,7 +79,7 @@ static void tvc_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
index 021e3b651c89..f193bbda550c 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-dvi.c
@@ -72,7 +72,7 @@ static int dvic_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -90,7 +90,7 @@ static void dvic_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
index bcfb64bad8f4..480fbd6fac1e 100644
--- a/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
+++ b/drivers/gpu/drm/omapdrm/displays/connector-hdmi.c
@@ -69,7 +69,7 @@ static int hdmic_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -89,7 +89,7 @@ static void hdmic_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
index 37982ffe0ad4..752b565987c1 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-opa362.c
@@ -50,7 +50,7 @@ static int opa362_connect(struct omap_dss_device *dssdev,
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -82,7 +82,7 @@ static void opa362_disconnect(struct omap_dss_device *dssdev,
dst->src = NULL;
dssdev->dst = NULL;
- in->ops->disconnect(in, &ddata->dssdev);
+ omapdss_device_disconnect(in, &ddata->dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
index 1fbc5559e54f..a8660e5e5ffc 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
@@ -44,7 +44,7 @@ static int tfp410_connect(struct omap_dss_device *dssdev,
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -74,7 +74,7 @@ static void tfp410_disconnect(struct omap_dss_device *dssdev,
dst->src = NULL;
dssdev->dst = NULL;
- in->ops->disconnect(in, &ddata->dssdev);
+ omapdss_device_disconnect(in, &ddata->dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
index e1afca0b1013..00fa360163a3 100644
--- a/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
+++ b/drivers/gpu/drm/omapdrm/displays/encoder-tpd12s015.c
@@ -49,7 +49,7 @@ static int tpd_connect(struct omap_dss_device *dssdev,
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -85,7 +85,7 @@ static void tpd_disconnect(struct omap_dss_device *dssdev,
dst->src = NULL;
dssdev->dst = NULL;
- in->ops->disconnect(in, &ddata->dssdev);
+ omapdss_device_disconnect(in, &ddata->dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
index 15042351ace3..987519501336 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
@@ -50,7 +50,7 @@ static int panel_dpi_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -68,7 +68,7 @@ static void panel_dpi_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 4296f4ca39fe..b7cd2ef17fbb 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -772,7 +772,7 @@ static int dsicm_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
dev_err(dev, "Failed to connect to video source\n");
goto err_connect;
@@ -796,7 +796,7 @@ static int dsicm_connect(struct omap_dss_device *dssdev)
err_vc_id:
in->ops->dsi.release_vc(in, ddata->channel);
err_req_vc:
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
err_connect:
omap_dss_put_device(in);
return r;
@@ -811,7 +811,7 @@ static void dsicm_disconnect(struct omap_dss_device *dssdev)
return;
in->ops->dsi.release_vc(in, ddata->channel);
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
index 8e293708261c..e4a3b5828bf9 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
@@ -131,7 +131,7 @@ static int lb035q02_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -151,7 +151,7 @@ static void lb035q02_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
index 7296c794326c..e89dd32a2a60 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
@@ -127,7 +127,7 @@ static int nec_8048_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -145,7 +145,7 @@ static void nec_8048_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
index 00291b9ecfde..d0451cfab7f8 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
@@ -73,7 +73,7 @@ static int sharp_ls_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -91,7 +91,7 @@ static void sharp_ls_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
index 03fb297581fd..77721acf664d 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
@@ -522,7 +522,7 @@ static int acx565akm_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -540,7 +540,7 @@ static void acx565akm_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
index abdbbaf02674..0baf5a5a5895 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
@@ -181,7 +181,7 @@ static int td028ttec1_panel_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -199,7 +199,7 @@ static void td028ttec1_panel_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
index de1140314a7a..1daba7a60a9c 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
@@ -352,7 +352,7 @@ static int tpo_td043_connect(struct omap_dss_device *dssdev)
return PTR_ERR(in);
}
- r = in->ops->connect(in, dssdev);
+ r = omapdss_device_connect(in, dssdev);
if (r) {
omap_dss_put_device(in);
return r;
@@ -370,7 +370,7 @@ static void tpo_td043_disconnect(struct omap_dss_device *dssdev)
if (!omapdss_device_is_connected(dssdev))
return;
- in->ops->disconnect(in, dssdev);
+ omapdss_device_disconnect(in, dssdev);
omap_dss_put_device(in);
ddata->in = NULL;
diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
index df6cb1ac43c8..576fd3d13259 100644
--- a/drivers/gpu/drm/omapdrm/dss/base.c
+++ b/drivers/gpu/drm/omapdrm/dss/base.c
@@ -102,6 +102,26 @@ struct omap_dss_device *omapdss_find_device_by_port(struct device_node *src,
return NULL;
}
+int omapdss_device_connect(struct omap_dss_device *src,
+ struct omap_dss_device *dst)
+{
+ if (src->driver)
+ return src->driver->connect(src);
+ else
+ return src->ops->connect(src, dst);
+}
+EXPORT_SYMBOL_GPL(omapdss_device_connect);
+
+void omapdss_device_disconnect(struct omap_dss_device *src,
+ struct omap_dss_device *dst)
+{
+ if (src->driver)
+ src->driver->disconnect(src);
+ else
+ src->ops->disconnect(src, dst);
+}
+EXPORT_SYMBOL_GPL(omapdss_device_disconnect);
+
/* -----------------------------------------------------------------------------
* Components Handling
*/
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 600d7c139bcb..b3709df7bbfe 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -496,6 +496,10 @@ void omapdss_device_register(struct omap_dss_device *dssdev);
void omapdss_device_unregister(struct omap_dss_device *dssdev);
struct omap_dss_device *omapdss_find_device_by_port(struct device_node *src,
unsigned int port);
+int omapdss_device_connect(struct omap_dss_device *src,
+ struct omap_dss_device *dst);
+void omapdss_device_disconnect(struct omap_dss_device *src,
+ struct omap_dss_device *dst);
struct omap_dss_device *omap_dss_get_device(struct omap_dss_device *dssdev);
void omap_dss_put_device(struct omap_dss_device *dssdev);
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index a9e02a58f76c..3e7d3fc79f49 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -159,7 +159,7 @@ static void omap_disconnect_dssdevs(struct drm_device *ddev)
for (i = 0; i < priv->num_dssdevs; i++) {
struct omap_dss_device *dssdev = priv->dssdevs[i];
- dssdev->driver->disconnect(dssdev);
+ omapdss_device_disconnect(dssdev, NULL);
priv->dssdevs[i] = NULL;
omap_dss_put_device(dssdev);
}
@@ -189,7 +189,7 @@ static int omap_connect_dssdevs(struct drm_device *ddev)
return -EPROBE_DEFER;
for_each_dss_dev(dssdev) {
- r = dssdev->driver->connect(dssdev);
+ r = omapdss_device_connect(dssdev, NULL);
if (r == -EPROBE_DEFER) {
omap_dss_put_device(dssdev);
goto cleanup;
--
Regards,
Laurent Pinchart
More information about the dri-devel
mailing list