[RFC PATCH v4 8/8] drm/tilcdc: decomponentize now that tda998x is a bridge
From: Peter Rosin
Date: Mon Apr 23 2018 - 03:24:14 EST
The driver only registered as a component master when connected
to a tda998x device, but that driver is now not only a component
but also a drm_bridge. Since drm_bridges are also handled, it
serves no purpose to register as a component master for the
special case of tda998x (which is no longer special).
Signed-off-by: Peter Rosin <peda@xxxxxxxxxx>
---
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 11 ------
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 67 +++-----------------------------
drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 -
drivers/gpu/drm/tilcdc/tilcdc_external.c | 51 ------------------------
drivers/gpu/drm/tilcdc/tilcdc_external.h | 4 +-
5 files changed, 6 insertions(+), 128 deletions(-)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 8bf6bb93dc79..b410939a3458 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -1030,17 +1030,6 @@ int tilcdc_crtc_create(struct drm_device *dev)
goto fail;
drm_crtc_helper_add(crtc, &tilcdc_crtc_helper_funcs);
-
- if (priv->is_componentized) {
- crtc->port = of_graph_get_port_by_id(dev->dev->of_node, 0);
- if (!crtc->port) { /* This should never happen */
- dev_err(dev->dev, "Port node not found in %pOF\n",
- dev->dev->of_node);
- ret = -EINVAL;
- goto fail;
- }
- }
-
priv->crtc = crtc;
return 0;
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 1afde61f1247..d9d2e86c9430 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -17,7 +17,6 @@
/* LCDC DRM driver, based on da8xx-fb */
-#include <linux/component.h>
#include <linux/pinctrl/consumer.h>
#include <linux/suspend.h>
#include <drm/drm_atomic.h>
@@ -246,9 +245,6 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
platform_set_drvdata(pdev, ddev);
drm_mode_config_init(ddev);
- priv->is_componentized =
- tilcdc_get_external_components(dev, NULL) > 0;
-
priv->wq = alloc_ordered_workqueue("tilcdc", 0);
if (!priv->wq) {
ret = -ENOMEM;
@@ -363,19 +359,9 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
}
modeset_init(ddev);
- if (priv->is_componentized) {
- ret = component_bind_all(dev, ddev);
- if (ret < 0)
- goto init_failed;
-
- ret = tilcdc_add_component_encoder(ddev);
- if (ret < 0)
- goto init_failed;
- } else {
- ret = tilcdc_attach_external_device(ddev);
- if (ret)
- goto init_failed;
- }
+ ret = tilcdc_attach_external_device(ddev);
+ if (ret)
+ goto init_failed;
if (!priv->external_connector &&
((priv->num_encoders == 0) || (priv->num_connectors == 0))) {
@@ -586,63 +572,20 @@ static const struct dev_pm_ops tilcdc_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(tilcdc_pm_suspend, tilcdc_pm_resume)
};
-/*
- * Platform driver:
- */
-static int tilcdc_bind(struct device *dev)
-{
- return tilcdc_init(&tilcdc_driver, dev);
-}
-
-static void tilcdc_unbind(struct device *dev)
-{
- struct drm_device *ddev = dev_get_drvdata(dev);
-
- /* Check if a subcomponent has already triggered the unloading. */
- if (!ddev->dev_private)
- return;
-
- tilcdc_fini(dev_get_drvdata(dev));
-}
-
-static const struct component_master_ops tilcdc_comp_ops = {
- .bind = tilcdc_bind,
- .unbind = tilcdc_unbind,
-};
-
static int tilcdc_pdev_probe(struct platform_device *pdev)
{
- struct component_match *match = NULL;
- int ret;
-
/* bail out early if no DT data: */
if (!pdev->dev.of_node) {
dev_err(&pdev->dev, "device-tree data is missing\n");
return -ENXIO;
}
- ret = tilcdc_get_external_components(&pdev->dev, &match);
- if (ret < 0)
- return ret;
- else if (ret == 0)
- return tilcdc_init(&tilcdc_driver, &pdev->dev);
- else
- return component_master_add_with_match(&pdev->dev,
- &tilcdc_comp_ops,
- match);
+ return tilcdc_init(&tilcdc_driver, &pdev->dev);
}
static int tilcdc_pdev_remove(struct platform_device *pdev)
{
- int ret;
-
- ret = tilcdc_get_external_components(&pdev->dev, NULL);
- if (ret < 0)
- return ret;
- else if (ret == 0)
- tilcdc_fini(platform_get_drvdata(pdev));
- else
- component_master_del(&pdev->dev, &tilcdc_comp_ops);
+ tilcdc_fini(platform_get_drvdata(pdev));
return 0;
}
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index ead512216669..c47a2b6e2a3a 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -92,7 +92,6 @@ struct tilcdc_drm_private {
const struct drm_connector_helper_funcs *connector_funcs;
bool is_registered;
- bool is_componentized;
};
/* Sub-module for display. Since we don't know at compile time what panels
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c
index 711c7b3289d3..1471f5f8cb5c 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c
@@ -8,7 +8,6 @@
*
*/
-#include <linux/component.h>
#include <linux/of_graph.h>
#include <drm/drm_of.h>
@@ -116,33 +115,6 @@ struct drm_connector *tilcdc_encoder_find_connector(struct drm_device *ddev,
return NULL;
}
-int tilcdc_add_component_encoder(struct drm_device *ddev)
-{
- struct tilcdc_drm_private *priv = ddev->dev_private;
- struct drm_connector *connector;
- struct drm_encoder *encoder;
-
- list_for_each_entry(encoder, &ddev->mode_config.encoder_list, head)
- if (encoder->possible_crtcs & (1 << priv->crtc->index))
- break;
-
- if (!encoder) {
- dev_err(ddev->dev, "%s: No suitable encoder found\n", __func__);
- return -ENODEV;
- }
-
- connector = tilcdc_encoder_find_connector(ddev, encoder);
-
- if (!connector)
- return -ENODEV;
-
- /* Only tda998x is supported at the moment. */
- tilcdc_crtc_set_simulate_vesa_sync(priv->crtc, true);
- tilcdc_crtc_set_panel_info(priv->crtc, &panel_info_tda998x);
-
- return tilcdc_add_external_connector(ddev, connector);
-}
-
void tilcdc_remove_external_device(struct drm_device *dev)
{
struct tilcdc_drm_private *priv = dev->dev_private;
@@ -221,26 +193,3 @@ int tilcdc_attach_external_device(struct drm_device *ddev)
return ret;
}
-
-static int dev_match_of(struct device *dev, void *data)
-{
- return dev->of_node == data;
-}
-
-int tilcdc_get_external_components(struct device *dev,
- struct component_match **match)
-{
- struct device_node *node;
-
- node = of_graph_get_remote_node(dev->of_node, 0, 0);
-
- if (!of_device_is_compatible(node, "nxp,tda998x")) {
- of_node_put(node);
- return 0;
- }
-
- if (match)
- drm_of_component_match_add(dev, match, dev_match_of, node);
- of_node_put(node);
- return 1;
-}
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.h b/drivers/gpu/drm/tilcdc/tilcdc_external.h
index 763d18f006c7..1df237e227c9 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.h
@@ -18,9 +18,7 @@
#ifndef __TILCDC_EXTERNAL_H__
#define __TILCDC_EXTERNAL_H__
-int tilcdc_add_component_encoder(struct drm_device *dev);
void tilcdc_remove_external_device(struct drm_device *dev);
-int tilcdc_get_external_components(struct device *dev,
- struct component_match **match);
int tilcdc_attach_external_device(struct drm_device *ddev);
+
#endif /* __TILCDC_SLAVE_H__ */
--
2.11.0