[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