Message ID | 20221209152343.180139-4-jagan@amarulasolutions.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: bridge: Add Samsung MIPI DSIM bridge | expand |
On 12/9/22 16:23, Jagan Teki wrote: > From: Marek Szyprowski <m.szyprowski@samsung.com> > > Restore the proper bridge chain by finding the previous bridge > in the chain instead of passing NULL. > > This establishes a proper bridge chain while attaching downstream > bridges. > > v9, v4: > * none > > v3: > * new patch > > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> Reviewed-by: Marek Vasut <marex@denx.de>
On 09.12.2022 16:23, Jagan Teki wrote: > From: Marek Szyprowski <m.szyprowski@samsung.com> > > Restore the proper bridge chain by finding the previous bridge > in the chain instead of passing NULL. > > This establishes a proper bridge chain while attaching downstream > bridges. > > v9, v4: > * none > > v3: > * new patch > > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > --- As we are resurrecting this patch, one more change is needed here: diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c index e5b1540c4ae4..9d10a89d28f1 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c @@ -1713,6 +1713,7 @@ static int exynos_dsi_probe(struct platform_device *pdev) dsi->bridge.funcs = &exynos_dsi_bridge_funcs; dsi->bridge.of_node = dev->of_node; dsi->bridge.type = DRM_MODE_CONNECTOR_DSI; + dsi->bridge.pre_enable_prev_first = true; ret = component_add(dev, &exynos_dsi_component_ops); if (ret) On Exynos5433 Exynos DSI is together with Exynos MIC in the bridge chain: Decon -> MIC -> DSI -> Panel. To ensure proper order of initialization we need to mark our bridge driver also with the pre_enable_prev_first flag. This would also need to be added to patch "[PATCH v9 06/18] drm: bridge: Generalize Exynos-DSI driver into a Samsung DSIM bridge". > drivers/gpu/drm/exynos/exynos_drm_dsi.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c > index ec673223d6b7..e5b1540c4ae4 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c > @@ -1428,7 +1428,8 @@ static int exynos_dsi_attach(struct drm_bridge *bridge, > { > struct exynos_dsi *dsi = bridge_to_dsi(bridge); > > - return drm_bridge_attach(bridge->encoder, dsi->out_bridge, NULL, flags); > + return drm_bridge_attach(bridge->encoder, dsi->out_bridge, bridge, > + flags); > } > > static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = { > @@ -1474,7 +1475,10 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host, > > drm_bridge_add(&dsi->bridge); > > - drm_bridge_attach(encoder, &dsi->bridge, NULL, 0); > + drm_bridge_attach(encoder, &dsi->bridge, > + list_first_entry_or_null(&encoder->bridge_chain, > + struct drm_bridge, > + chain_node), 0); > > /* > * This is a temporary solution and should be made by more generic way. Best regards
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c index ec673223d6b7..e5b1540c4ae4 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c @@ -1428,7 +1428,8 @@ static int exynos_dsi_attach(struct drm_bridge *bridge, { struct exynos_dsi *dsi = bridge_to_dsi(bridge); - return drm_bridge_attach(bridge->encoder, dsi->out_bridge, NULL, flags); + return drm_bridge_attach(bridge->encoder, dsi->out_bridge, bridge, + flags); } static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = { @@ -1474,7 +1475,10 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host, drm_bridge_add(&dsi->bridge); - drm_bridge_attach(encoder, &dsi->bridge, NULL, 0); + drm_bridge_attach(encoder, &dsi->bridge, + list_first_entry_or_null(&encoder->bridge_chain, + struct drm_bridge, + chain_node), 0); /* * This is a temporary solution and should be made by more generic way.