All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices"
@ 2022-03-31 15:44 Jagan Teki
  2022-03-31 15:45 ` [PATCH v4 2/5] drm: bridge: nwl-dsi: Switch to devm_drm_of_get_bridge Jagan Teki
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Jagan Teki @ 2022-03-31 15:44 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart
  Cc: linux-amarula, Sam Ravnborg, Jagan Teki, dri-devel

This reverts commit c206c7faeb3263a7cc7b4de443a3877cd7a5e74b.

In order to avoid any probe ordering issues, the I2C based downstream
bridge drivers now register and attach the DSI devices at the probe
instead of doing it on drm_bridge_function.attach().

Examples of those commits are:

commit <6ef7ee48765f> ("drm/bridge: sn65dsi83: Register and attach our
DSI device at probe")
commit <d89078c37b10> ("drm/bridge: lt8912b: Register and attach our DSI
device at probe")
commit <864c49a31d6b> ("drm/bridge: adv7511: Register and attach our DSI
device at probe")

dw-mipi-dsi has panel or bridge finding code based on previous downstream
bridges, so revert the same and make the panel or bridge funding in host
attach as before.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v4, v3, v2:
- none

 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 58 +++++--------------
 1 file changed, 15 insertions(+), 43 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
index 11d20b8638cd..1cc912b6e1f8 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
@@ -246,7 +246,6 @@ struct dw_mipi_dsi {
 
 	struct clk *pclk;
 
-	bool device_found;
 	unsigned int lane_mbps; /* per lane */
 	u32 channel;
 	u32 lanes;
@@ -310,37 +309,13 @@ static inline u32 dsi_read(struct dw_mipi_dsi *dsi, u32 reg)
 	return readl(dsi->base + reg);
 }
 
-static int dw_mipi_dsi_panel_or_bridge(struct dw_mipi_dsi *dsi,
-				       struct device_node *node)
-{
-	struct drm_bridge *bridge;
-	struct drm_panel *panel;
-	int ret;
-
-	ret = drm_of_find_panel_or_bridge(node, 1, 0, &panel, &bridge);
-	if (ret)
-		return ret;
-
-	if (panel) {
-		bridge = drm_panel_bridge_add_typed(panel,
-						    DRM_MODE_CONNECTOR_DSI);
-		if (IS_ERR(bridge))
-			return PTR_ERR(bridge);
-	}
-
-	dsi->panel_bridge = bridge;
-
-	if (!dsi->panel_bridge)
-		return -EPROBE_DEFER;
-
-	return 0;
-}
-
 static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
 				   struct mipi_dsi_device *device)
 {
 	struct dw_mipi_dsi *dsi = host_to_dsi(host);
 	const struct dw_mipi_dsi_plat_data *pdata = dsi->plat_data;
+	struct drm_bridge *bridge;
+	struct drm_panel *panel;
 	int ret;
 
 	if (device->lanes > dsi->plat_data->max_data_lanes) {
@@ -354,14 +329,22 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
 	dsi->format = device->format;
 	dsi->mode_flags = device->mode_flags;
 
-	if (!dsi->device_found) {
-		ret = dw_mipi_dsi_panel_or_bridge(dsi, host->dev->of_node);
-		if (ret)
-			return ret;
+	ret = drm_of_find_panel_or_bridge(host->dev->of_node, 1, 0,
+					  &panel, &bridge);
+	if (ret)
+		return ret;
 
-		dsi->device_found = true;
+	if (panel) {
+		bridge = drm_panel_bridge_add_typed(panel,
+						    DRM_MODE_CONNECTOR_DSI);
+		if (IS_ERR(bridge))
+			return PTR_ERR(bridge);
 	}
 
+	dsi->panel_bridge = bridge;
+
+	drm_bridge_add(&dsi->bridge);
+
 	if (pdata->host_ops && pdata->host_ops->attach) {
 		ret = pdata->host_ops->attach(pdata->priv_data, device);
 		if (ret < 0)
@@ -1021,16 +1004,6 @@ static int dw_mipi_dsi_bridge_attach(struct drm_bridge *bridge,
 	/* Set the encoder type as caller does not know it */
 	bridge->encoder->encoder_type = DRM_MODE_ENCODER_DSI;
 
-	if (!dsi->device_found) {
-		int ret;
-
-		ret = dw_mipi_dsi_panel_or_bridge(dsi, dsi->dev->of_node);
-		if (ret)
-			return ret;
-
-		dsi->device_found = true;
-	}
-
 	/* Attach the panel-bridge to the dsi bridge */
 	return drm_bridge_attach(bridge->encoder, dsi->panel_bridge, bridge,
 				 flags);
@@ -1217,7 +1190,6 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
 #ifdef CONFIG_OF
 	dsi->bridge.of_node = pdev->dev.of_node;
 #endif
-	drm_bridge_add(&dsi->bridge);
 
 	return dsi;
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v4 2/5] drm: bridge: nwl-dsi: Switch to devm_drm_of_get_bridge
  2022-03-31 15:44 [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Jagan Teki
@ 2022-03-31 15:45 ` Jagan Teki
  2022-03-31 15:45 ` [PATCH v4 3/5] drm: bridge: mtk_dsi: " Jagan Teki
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Jagan Teki @ 2022-03-31 15:45 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart
  Cc: linux-amarula, Guido Günther, Sam Ravnborg, Jagan Teki, dri-devel

devm_drm_of_get_bridge is capable of looking up the downstream
bridge and panel and trying to add a panel bridge if the panel
is found.

Replace explicit finding calls with devm_drm_of_get_bridge.

Reviewed-by: Guido Günther <agx@sigxcpu.org>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v4:
- none
Changes for v3:
- drop panel.h
- collect Guido r-b
Changes for v2:
- split the patch

 drivers/gpu/drm/bridge/nwl-dsi.c | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/bridge/nwl-dsi.c b/drivers/gpu/drm/bridge/nwl-dsi.c
index e34fb09b90b9..a549da5b3f93 100644
--- a/drivers/gpu/drm/bridge/nwl-dsi.c
+++ b/drivers/gpu/drm/bridge/nwl-dsi.c
@@ -25,7 +25,6 @@
 #include <drm/drm_bridge.h>
 #include <drm/drm_mipi_dsi.h>
 #include <drm/drm_of.h>
-#include <drm/drm_panel.h>
 #include <drm/drm_print.h>
 
 #include <video/mipi_display.h>
@@ -912,22 +911,10 @@ static int nwl_dsi_bridge_attach(struct drm_bridge *bridge,
 {
 	struct nwl_dsi *dsi = bridge_to_dsi(bridge);
 	struct drm_bridge *panel_bridge;
-	struct drm_panel *panel;
-	int ret;
-
-	ret = drm_of_find_panel_or_bridge(dsi->dev->of_node, 1, 0, &panel,
-					  &panel_bridge);
-	if (ret)
-		return ret;
-
-	if (panel) {
-		panel_bridge = drm_panel_bridge_add(panel);
-		if (IS_ERR(panel_bridge))
-			return PTR_ERR(panel_bridge);
-	}
 
-	if (!panel_bridge)
-		return -EPROBE_DEFER;
+	panel_bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, 1, 0);
+	if (IS_ERR(panel_bridge))
+		return PTR_ERR(panel_bridge);
 
 	return drm_bridge_attach(bridge->encoder, panel_bridge, bridge, flags);
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v4 3/5] drm: bridge: mtk_dsi: Switch to devm_drm_of_get_bridge
  2022-03-31 15:44 [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Jagan Teki
  2022-03-31 15:45 ` [PATCH v4 2/5] drm: bridge: nwl-dsi: Switch to devm_drm_of_get_bridge Jagan Teki
@ 2022-03-31 15:45 ` Jagan Teki
  2022-03-31 15:50   ` Robert Foss
  2022-03-31 15:45 ` [PATCH v4 4/5] drm: bridge: dw-mipi-dsi: " Jagan Teki
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Jagan Teki @ 2022-03-31 15:45 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart
  Cc: Chun-Kuang Hu, Sam Ravnborg, dri-devel, Jagan Teki, linux-amarula

devm_drm_of_get_bridge is capable of looking up the downstream
bridge and panel and trying to add a panel bridge if the panel
is found.

Replace explicit finding calls with devm_drm_of_get_bridge.

Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v4, v3:
- none 
Changes for v2:
- split the patch

 drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
index e91b3fff4342..1487cc308c5d 100644
--- a/drivers/gpu/drm/mediatek/mtk_dsi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
@@ -1016,7 +1016,6 @@ static int mtk_dsi_probe(struct platform_device *pdev)
 {
 	struct mtk_dsi *dsi;
 	struct device *dev = &pdev->dev;
-	struct drm_panel *panel;
 	struct resource *regs;
 	int irq_num;
 	int ret;
@@ -1033,17 +1032,10 @@ static int mtk_dsi_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0,
-					  &panel, &dsi->next_bridge);
-	if (ret)
+	dsi->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
+	if (IS_ERR(dsi->next_bridge)) {
+		ret = PTR_ERR(dsi->next_bridge);
 		goto err_unregister_host;
-
-	if (panel) {
-		dsi->next_bridge = devm_drm_panel_bridge_add(dev, panel);
-		if (IS_ERR(dsi->next_bridge)) {
-			ret = PTR_ERR(dsi->next_bridge);
-			goto err_unregister_host;
-		}
 	}
 
 	dsi->driver_data = of_device_get_match_data(dev);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v4 4/5] drm: bridge: dw-mipi-dsi: Switch to devm_drm_of_get_bridge
  2022-03-31 15:44 [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Jagan Teki
  2022-03-31 15:45 ` [PATCH v4 2/5] drm: bridge: nwl-dsi: Switch to devm_drm_of_get_bridge Jagan Teki
  2022-03-31 15:45 ` [PATCH v4 3/5] drm: bridge: mtk_dsi: " Jagan Teki
@ 2022-03-31 15:45 ` Jagan Teki
  2022-03-31 15:52   ` Robert Foss
  2022-03-31 15:45 ` [PATCH v4 5/5] drm: bridge: mcde_dsi: " Jagan Teki
  2022-03-31 15:55 ` [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Robert Foss
  4 siblings, 1 reply; 11+ messages in thread
From: Jagan Teki @ 2022-03-31 15:45 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart
  Cc: linux-amarula, Sam Ravnborg, Jagan Teki, dri-devel

devm_drm_of_get_bridge is capable of looking up the downstream
bridge and panel and trying to add a panel bridge if the panel
is found.

Replace explicit finding calls with devm_drm_of_get_bridge.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v4, v3:
- none 
Changes for v2:
- split the patch

 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
index 1cc912b6e1f8..b2efecf7d160 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
@@ -315,7 +315,6 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
 	struct dw_mipi_dsi *dsi = host_to_dsi(host);
 	const struct dw_mipi_dsi_plat_data *pdata = dsi->plat_data;
 	struct drm_bridge *bridge;
-	struct drm_panel *panel;
 	int ret;
 
 	if (device->lanes > dsi->plat_data->max_data_lanes) {
@@ -329,17 +328,9 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
 	dsi->format = device->format;
 	dsi->mode_flags = device->mode_flags;
 
-	ret = drm_of_find_panel_or_bridge(host->dev->of_node, 1, 0,
-					  &panel, &bridge);
-	if (ret)
-		return ret;
-
-	if (panel) {
-		bridge = drm_panel_bridge_add_typed(panel,
-						    DRM_MODE_CONNECTOR_DSI);
-		if (IS_ERR(bridge))
-			return PTR_ERR(bridge);
-	}
+	bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, 1, 0);
+	if (IS_ERR(bridge))
+		return PTR_ERR(bridge);
 
 	dsi->panel_bridge = bridge;
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v4 5/5] drm: bridge: mcde_dsi: Switch to devm_drm_of_get_bridge
  2022-03-31 15:44 [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Jagan Teki
                   ` (2 preceding siblings ...)
  2022-03-31 15:45 ` [PATCH v4 4/5] drm: bridge: dw-mipi-dsi: " Jagan Teki
@ 2022-03-31 15:45 ` Jagan Teki
  2022-03-31 16:01   ` Maxime Ripard
  2022-03-31 15:55 ` [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Robert Foss
  4 siblings, 1 reply; 11+ messages in thread
From: Jagan Teki @ 2022-03-31 15:45 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart
  Cc: linux-amarula, Sam Ravnborg, Jagan Teki, dri-devel

devm_drm_of_get_bridge is capable of looking up the downstream
bridge and panel and trying to add a panel bridge if the panel
is found.

Replace explicit finding calls with devm_drm_of_get_bridge.

Cc: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
Changes for v4:
- collect r-b
Changes for v3:
- fix commit head
- drop panel.h
- use drm_bridge_remove
Changes for v2:
- split the patch

 drivers/gpu/drm/mcde/mcde_dsi.c | 44 +++++----------------------------
 1 file changed, 6 insertions(+), 38 deletions(-)

diff --git a/drivers/gpu/drm/mcde/mcde_dsi.c b/drivers/gpu/drm/mcde/mcde_dsi.c
index 5651734ce977..083a4728654d 100644
--- a/drivers/gpu/drm/mcde/mcde_dsi.c
+++ b/drivers/gpu/drm/mcde/mcde_dsi.c
@@ -19,7 +19,6 @@
 #include <drm/drm_mipi_dsi.h>
 #include <drm/drm_modeset_helper_vtables.h>
 #include <drm/drm_of.h>
-#include <drm/drm_panel.h>
 #include <drm/drm_print.h>
 #include <drm/drm_probe_helper.h>
 
@@ -39,7 +38,6 @@ struct mcde_dsi {
 	struct device *dev;
 	struct mcde *mcde;
 	struct drm_bridge bridge;
-	struct drm_panel *panel;
 	struct drm_bridge *bridge_out;
 	struct mipi_dsi_host dsi_host;
 	struct mipi_dsi_device *mdsi;
@@ -1073,9 +1071,7 @@ static int mcde_dsi_bind(struct device *dev, struct device *master,
 	struct drm_device *drm = data;
 	struct mcde *mcde = to_mcde(drm);
 	struct mcde_dsi *d = dev_get_drvdata(dev);
-	struct device_node *child;
-	struct drm_panel *panel = NULL;
-	struct drm_bridge *bridge = NULL;
+	struct drm_bridge *bridge;
 
 	if (!of_get_available_child_count(dev->of_node)) {
 		dev_info(dev, "unused DSI interface\n");
@@ -1100,37 +1096,10 @@ static int mcde_dsi_bind(struct device *dev, struct device *master,
 		return PTR_ERR(d->lp_clk);
 	}
 
-	/* Look for a panel as a child to this node */
-	for_each_available_child_of_node(dev->of_node, child) {
-		panel = of_drm_find_panel(child);
-		if (IS_ERR(panel)) {
-			dev_err(dev, "failed to find panel try bridge (%ld)\n",
-				PTR_ERR(panel));
-			panel = NULL;
-
-			bridge = of_drm_find_bridge(child);
-			if (!bridge) {
-				dev_err(dev, "failed to find bridge\n");
-				return -EINVAL;
-			}
-		}
-	}
-	if (panel) {
-		bridge = drm_panel_bridge_add_typed(panel,
-						    DRM_MODE_CONNECTOR_DSI);
-		if (IS_ERR(bridge)) {
-			dev_err(dev, "error adding panel bridge\n");
-			return PTR_ERR(bridge);
-		}
-		dev_info(dev, "connected to panel\n");
-		d->panel = panel;
-	} else if (bridge) {
-		/* TODO: AV8100 HDMI encoder goes here for example */
-		dev_info(dev, "connected to non-panel bridge (unsupported)\n");
-		return -ENODEV;
-	} else {
-		dev_err(dev, "no panel or bridge\n");
-		return -ENODEV;
+	bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
+	if (IS_ERR(bridge)) {
+		dev_err(dev, "error to get bridge\n");
+		return PTR_ERR(bridge);
 	}
 
 	d->bridge_out = bridge;
@@ -1153,8 +1122,7 @@ static void mcde_dsi_unbind(struct device *dev, struct device *master,
 {
 	struct mcde_dsi *d = dev_get_drvdata(dev);
 
-	if (d->panel)
-		drm_panel_bridge_remove(d->bridge_out);
+	drm_bridge_remove(d->bridge_out);
 	regmap_update_bits(d->prcmu, PRCM_DSI_SW_RESET,
 			   PRCM_DSI_SW_RESET_DSI0_SW_RESETN, 0);
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 3/5] drm: bridge: mtk_dsi: Switch to devm_drm_of_get_bridge
  2022-03-31 15:45 ` [PATCH v4 3/5] drm: bridge: mtk_dsi: " Jagan Teki
@ 2022-03-31 15:50   ` Robert Foss
  2022-03-31 17:54     ` Robert Foss
  0 siblings, 1 reply; 11+ messages in thread
From: Robert Foss @ 2022-03-31 15:50 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Chun-Kuang Hu, Neil Armstrong, Sam Ravnborg, dri-devel,
	Laurent Pinchart, Andrzej Hajda, linux-amarula

On Thu, 31 Mar 2022 at 17:45, Jagan Teki <jagan@amarulasolutions.com> wrote:
>
> devm_drm_of_get_bridge is capable of looking up the downstream
> bridge and panel and trying to add a panel bridge if the panel
> is found.
>
> Replace explicit finding calls with devm_drm_of_get_bridge.
>
> Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
> Changes for v4, v3:
> - none
> Changes for v2:
> - split the patch
>
>  drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++-----------
>  1 file changed, 3 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
> index e91b3fff4342..1487cc308c5d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_dsi.c
> +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
> @@ -1016,7 +1016,6 @@ static int mtk_dsi_probe(struct platform_device *pdev)
>  {
>         struct mtk_dsi *dsi;
>         struct device *dev = &pdev->dev;
> -       struct drm_panel *panel;
>         struct resource *regs;
>         int irq_num;
>         int ret;
> @@ -1033,17 +1032,10 @@ static int mtk_dsi_probe(struct platform_device *pdev)
>                 return ret;
>         }
>
> -       ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0,
> -                                         &panel, &dsi->next_bridge);
> -       if (ret)
> +       dsi->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
> +       if (IS_ERR(dsi->next_bridge)) {
> +               ret = PTR_ERR(dsi->next_bridge);
>                 goto err_unregister_host;
> -
> -       if (panel) {
> -               dsi->next_bridge = devm_drm_panel_bridge_add(dev, panel);
> -               if (IS_ERR(dsi->next_bridge)) {
> -                       ret = PTR_ERR(dsi->next_bridge);
> -                       goto err_unregister_host;
> -               }
>         }
>
>         dsi->driver_data = of_device_get_match_data(dev);
> --
> 2.25.1
>

Reviewed-by: Robert Foss <robert.foss@linaro.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 4/5] drm: bridge: dw-mipi-dsi: Switch to devm_drm_of_get_bridge
  2022-03-31 15:45 ` [PATCH v4 4/5] drm: bridge: dw-mipi-dsi: " Jagan Teki
@ 2022-03-31 15:52   ` Robert Foss
  0 siblings, 0 replies; 11+ messages in thread
From: Robert Foss @ 2022-03-31 15:52 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Neil Armstrong, Sam Ravnborg, dri-devel, Laurent Pinchart,
	Andrzej Hajda, linux-amarula

On Thu, 31 Mar 2022 at 17:45, Jagan Teki <jagan@amarulasolutions.com> wrote:
>
> devm_drm_of_get_bridge is capable of looking up the downstream
> bridge and panel and trying to add a panel bridge if the panel
> is found.
>
> Replace explicit finding calls with devm_drm_of_get_bridge.
>
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
> Changes for v4, v3:
> - none
> Changes for v2:
> - split the patch
>
>  drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 15 +++------------
>  1 file changed, 3 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> index 1cc912b6e1f8..b2efecf7d160 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> @@ -315,7 +315,6 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
>         struct dw_mipi_dsi *dsi = host_to_dsi(host);
>         const struct dw_mipi_dsi_plat_data *pdata = dsi->plat_data;
>         struct drm_bridge *bridge;
> -       struct drm_panel *panel;
>         int ret;
>
>         if (device->lanes > dsi->plat_data->max_data_lanes) {
> @@ -329,17 +328,9 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
>         dsi->format = device->format;
>         dsi->mode_flags = device->mode_flags;
>
> -       ret = drm_of_find_panel_or_bridge(host->dev->of_node, 1, 0,
> -                                         &panel, &bridge);
> -       if (ret)
> -               return ret;
> -
> -       if (panel) {
> -               bridge = drm_panel_bridge_add_typed(panel,
> -                                                   DRM_MODE_CONNECTOR_DSI);
> -               if (IS_ERR(bridge))
> -                       return PTR_ERR(bridge);
> -       }
> +       bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, 1, 0);
> +       if (IS_ERR(bridge))
> +               return PTR_ERR(bridge);
>
>         dsi->panel_bridge = bridge;
>
> --
> 2.25.1
>

Reviewed-by: Robert Foss <robert.foss@linaro.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices"
  2022-03-31 15:44 [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Jagan Teki
                   ` (3 preceding siblings ...)
  2022-03-31 15:45 ` [PATCH v4 5/5] drm: bridge: mcde_dsi: " Jagan Teki
@ 2022-03-31 15:55 ` Robert Foss
  2022-03-31 15:56   ` Robert Foss
  4 siblings, 1 reply; 11+ messages in thread
From: Robert Foss @ 2022-03-31 15:55 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Neil Armstrong, Sam Ravnborg, dri-devel, Laurent Pinchart,
	Andrzej Hajda, linux-amarula

On Thu, 31 Mar 2022 at 17:45, Jagan Teki <jagan@amarulasolutions.com> wrote:
>
> This reverts commit c206c7faeb3263a7cc7b4de443a3877cd7a5e74b.
>
> In order to avoid any probe ordering issues, the I2C based downstream
> bridge drivers now register and attach the DSI devices at the probe
> instead of doing it on drm_bridge_function.attach().
>
> Examples of those commits are:
>
> commit <6ef7ee48765f> ("drm/bridge: sn65dsi83: Register and attach our
> DSI device at probe")
> commit <d89078c37b10> ("drm/bridge: lt8912b: Register and attach our DSI
> device at probe")
> commit <864c49a31d6b> ("drm/bridge: adv7511: Register and attach our DSI
> device at probe")
>
> dw-mipi-dsi has panel or bridge finding code based on previous downstream
> bridges, so revert the same and make the panel or bridge funding in host
> attach as before.
>
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
> Changes for v4, v3, v2:
> - none
>
>  drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 58 +++++--------------
>  1 file changed, 15 insertions(+), 43 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> index 11d20b8638cd..1cc912b6e1f8 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> @@ -246,7 +246,6 @@ struct dw_mipi_dsi {
>
>         struct clk *pclk;
>
> -       bool device_found;
>         unsigned int lane_mbps; /* per lane */
>         u32 channel;
>         u32 lanes;
> @@ -310,37 +309,13 @@ static inline u32 dsi_read(struct dw_mipi_dsi *dsi, u32 reg)
>         return readl(dsi->base + reg);
>  }
>
> -static int dw_mipi_dsi_panel_or_bridge(struct dw_mipi_dsi *dsi,
> -                                      struct device_node *node)
> -{
> -       struct drm_bridge *bridge;
> -       struct drm_panel *panel;
> -       int ret;
> -
> -       ret = drm_of_find_panel_or_bridge(node, 1, 0, &panel, &bridge);
> -       if (ret)
> -               return ret;
> -
> -       if (panel) {
> -               bridge = drm_panel_bridge_add_typed(panel,
> -                                                   DRM_MODE_CONNECTOR_DSI);
> -               if (IS_ERR(bridge))
> -                       return PTR_ERR(bridge);
> -       }
> -
> -       dsi->panel_bridge = bridge;
> -
> -       if (!dsi->panel_bridge)
> -               return -EPROBE_DEFER;
> -
> -       return 0;
> -}
> -
>  static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
>                                    struct mipi_dsi_device *device)
>  {
>         struct dw_mipi_dsi *dsi = host_to_dsi(host);
>         const struct dw_mipi_dsi_plat_data *pdata = dsi->plat_data;
> +       struct drm_bridge *bridge;
> +       struct drm_panel *panel;
>         int ret;
>
>         if (device->lanes > dsi->plat_data->max_data_lanes) {
> @@ -354,14 +329,22 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
>         dsi->format = device->format;
>         dsi->mode_flags = device->mode_flags;
>
> -       if (!dsi->device_found) {
> -               ret = dw_mipi_dsi_panel_or_bridge(dsi, host->dev->of_node);
> -               if (ret)
> -                       return ret;
> +       ret = drm_of_find_panel_or_bridge(host->dev->of_node, 1, 0,
> +                                         &panel, &bridge);
> +       if (ret)
> +               return ret;
>
> -               dsi->device_found = true;
> +       if (panel) {
> +               bridge = drm_panel_bridge_add_typed(panel,
> +                                                   DRM_MODE_CONNECTOR_DSI);
> +               if (IS_ERR(bridge))
> +                       return PTR_ERR(bridge);
>         }
>
> +       dsi->panel_bridge = bridge;
> +
> +       drm_bridge_add(&dsi->bridge);
> +
>         if (pdata->host_ops && pdata->host_ops->attach) {
>                 ret = pdata->host_ops->attach(pdata->priv_data, device);
>                 if (ret < 0)
> @@ -1021,16 +1004,6 @@ static int dw_mipi_dsi_bridge_attach(struct drm_bridge *bridge,
>         /* Set the encoder type as caller does not know it */
>         bridge->encoder->encoder_type = DRM_MODE_ENCODER_DSI;
>
> -       if (!dsi->device_found) {
> -               int ret;
> -
> -               ret = dw_mipi_dsi_panel_or_bridge(dsi, dsi->dev->of_node);
> -               if (ret)
> -                       return ret;
> -
> -               dsi->device_found = true;
> -       }
> -
>         /* Attach the panel-bridge to the dsi bridge */
>         return drm_bridge_attach(bridge->encoder, dsi->panel_bridge, bridge,
>                                  flags);
> @@ -1217,7 +1190,6 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
>  #ifdef CONFIG_OF
>         dsi->bridge.of_node = pdev->dev.of_node;
>  #endif
> -       drm_bridge_add(&dsi->bridge);
>
>         return dsi;
>  }
> --
> 2.25.1
>


Reviewed-by: Robert Foss <robert.foss@linaro.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices"
  2022-03-31 15:55 ` [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Robert Foss
@ 2022-03-31 15:56   ` Robert Foss
  0 siblings, 0 replies; 11+ messages in thread
From: Robert Foss @ 2022-03-31 15:56 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Neil Armstrong, Sam Ravnborg, dri-devel, Laurent Pinchart,
	Andrzej Hajda, linux-amarula

Applied to drm-misc-next.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 5/5] drm: bridge: mcde_dsi: Switch to devm_drm_of_get_bridge
  2022-03-31 15:45 ` [PATCH v4 5/5] drm: bridge: mcde_dsi: " Jagan Teki
@ 2022-03-31 16:01   ` Maxime Ripard
  0 siblings, 0 replies; 11+ messages in thread
From: Maxime Ripard @ 2022-03-31 16:01 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Sam Ravnborg

[-- Attachment #1: Type: text/plain, Size: 3601 bytes --]

On Thu, Mar 31, 2022 at 09:15:03PM +0530, Jagan Teki wrote:
> devm_drm_of_get_bridge is capable of looking up the downstream
> bridge and panel and trying to add a panel bridge if the panel
> is found.
> 
> Replace explicit finding calls with devm_drm_of_get_bridge.
> 
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> ---
> Changes for v4:
> - collect r-b
> Changes for v3:
> - fix commit head
> - drop panel.h
> - use drm_bridge_remove
> Changes for v2:
> - split the patch
> 
>  drivers/gpu/drm/mcde/mcde_dsi.c | 44 +++++----------------------------
>  1 file changed, 6 insertions(+), 38 deletions(-)
> 
> diff --git a/drivers/gpu/drm/mcde/mcde_dsi.c b/drivers/gpu/drm/mcde/mcde_dsi.c
> index 5651734ce977..083a4728654d 100644
> --- a/drivers/gpu/drm/mcde/mcde_dsi.c
> +++ b/drivers/gpu/drm/mcde/mcde_dsi.c
> @@ -19,7 +19,6 @@
>  #include <drm/drm_mipi_dsi.h>
>  #include <drm/drm_modeset_helper_vtables.h>
>  #include <drm/drm_of.h>
> -#include <drm/drm_panel.h>
>  #include <drm/drm_print.h>
>  #include <drm/drm_probe_helper.h>
>  
> @@ -39,7 +38,6 @@ struct mcde_dsi {
>  	struct device *dev;
>  	struct mcde *mcde;
>  	struct drm_bridge bridge;
> -	struct drm_panel *panel;
>  	struct drm_bridge *bridge_out;
>  	struct mipi_dsi_host dsi_host;
>  	struct mipi_dsi_device *mdsi;
> @@ -1073,9 +1071,7 @@ static int mcde_dsi_bind(struct device *dev, struct device *master,
>  	struct drm_device *drm = data;
>  	struct mcde *mcde = to_mcde(drm);
>  	struct mcde_dsi *d = dev_get_drvdata(dev);
> -	struct device_node *child;
> -	struct drm_panel *panel = NULL;
> -	struct drm_bridge *bridge = NULL;
> +	struct drm_bridge *bridge;
>  
>  	if (!of_get_available_child_count(dev->of_node)) {
>  		dev_info(dev, "unused DSI interface\n");
> @@ -1100,37 +1096,10 @@ static int mcde_dsi_bind(struct device *dev, struct device *master,
>  		return PTR_ERR(d->lp_clk);
>  	}
>  
> -	/* Look for a panel as a child to this node */
> -	for_each_available_child_of_node(dev->of_node, child) {
> -		panel = of_drm_find_panel(child);
> -		if (IS_ERR(panel)) {
> -			dev_err(dev, "failed to find panel try bridge (%ld)\n",
> -				PTR_ERR(panel));
> -			panel = NULL;
> -
> -			bridge = of_drm_find_bridge(child);
> -			if (!bridge) {
> -				dev_err(dev, "failed to find bridge\n");
> -				return -EINVAL;
> -			}
> -		}
> -	}
> -	if (panel) {
> -		bridge = drm_panel_bridge_add_typed(panel,
> -						    DRM_MODE_CONNECTOR_DSI);
> -		if (IS_ERR(bridge)) {
> -			dev_err(dev, "error adding panel bridge\n");
> -			return PTR_ERR(bridge);
> -		}
> -		dev_info(dev, "connected to panel\n");
> -		d->panel = panel;
> -	} else if (bridge) {
> -		/* TODO: AV8100 HDMI encoder goes here for example */
> -		dev_info(dev, "connected to non-panel bridge (unsupported)\n");
> -		return -ENODEV;
> -	} else {
> -		dev_err(dev, "no panel or bridge\n");
> -		return -ENODEV;
> +	bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
> +	if (IS_ERR(bridge)) {
> +		dev_err(dev, "error to get bridge\n");
> +		return PTR_ERR(bridge);
>  	}
>  
>  	d->bridge_out = bridge;
> @@ -1153,8 +1122,7 @@ static void mcde_dsi_unbind(struct device *dev, struct device *master,
>  {
>  	struct mcde_dsi *d = dev_get_drvdata(dev);
>  
> -	if (d->panel)
> -		drm_panel_bridge_remove(d->bridge_out);
> +	drm_bridge_remove(d->bridge_out);

You don't need drm_bridge_remove if you used devm_drm_of_get_bridge

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v4 3/5] drm: bridge: mtk_dsi: Switch to devm_drm_of_get_bridge
  2022-03-31 15:50   ` Robert Foss
@ 2022-03-31 17:54     ` Robert Foss
  0 siblings, 0 replies; 11+ messages in thread
From: Robert Foss @ 2022-03-31 17:54 UTC (permalink / raw)
  To: Jagan Teki, Chun-Kuang Hu, Philipp Zabel
  Cc: Neil Armstrong, Sam Ravnborg, dri-devel, Laurent Pinchart,
	Andrzej Hajda, linux-amarula

Philippe, Chun-Kuang,

I applied this patch without realizing it is outside of my maintainer
domain, and caused conflict in dim-tip, which I've resolved.
Even with the conflict resolved, I think getting an AB after the fact
would be good.

Sorry about the inconvenience.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2022-03-31 17:54 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-31 15:44 [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Jagan Teki
2022-03-31 15:45 ` [PATCH v4 2/5] drm: bridge: nwl-dsi: Switch to devm_drm_of_get_bridge Jagan Teki
2022-03-31 15:45 ` [PATCH v4 3/5] drm: bridge: mtk_dsi: " Jagan Teki
2022-03-31 15:50   ` Robert Foss
2022-03-31 17:54     ` Robert Foss
2022-03-31 15:45 ` [PATCH v4 4/5] drm: bridge: dw-mipi-dsi: " Jagan Teki
2022-03-31 15:52   ` Robert Foss
2022-03-31 15:45 ` [PATCH v4 5/5] drm: bridge: mcde_dsi: " Jagan Teki
2022-03-31 16:01   ` Maxime Ripard
2022-03-31 15:55 ` [PATCH v4 1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices" Robert Foss
2022-03-31 15:56   ` Robert Foss

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.