[v4,1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices"

Message ID 20220331154503.66054-1-jagan@amarulasolutions.com
State New
Headers show
Series
  • [v4,1/5] Revert "drm/bridge: dw-mipi-dsi: Find the possible DSI devices"
Related show

Commit Message

Jagan Teki March 31, 2022, 3:44 p.m. UTC
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(-)

Comments

Robert Foss March 31, 2022, 3:55 p.m. UTC | #1
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>
Robert Foss March 31, 2022, 3:56 p.m. UTC | #2
Applied to drm-misc-next.

Patch

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;
 }