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

Robert Foss robert.foss at linaro.org
Thu Mar 31 15:55:41 UTC 2022


On Thu, 31 Mar 2022 at 17:45, Jagan Teki <jagan at 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 at 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 at linaro.org>


More information about the dri-devel mailing list