Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'exynos-drm-next-for-v6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos into drm-next

One fixup series
- Make sure to restore bridge chain order by enabling the drm panel
prepare_prev_first flag of the bridge and panel drivers - tc358764 display
bridge device and Samsung s6e3ha2/s6e63j0x03/s6e8aa0 panel devices.
In case of any boards using Exynos5433 SoC, below Display pipeline could be
configured.
Decon -> MIC -> MIPI-DSI -> Panel
So, this patch series makes sure to enable previous bridge device before
enabling MIPI-DSI device.

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Inki Dae <inki.dae@samsung.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230130051055.15340-1-inki.dae@samsung.com

+11 -2
+1
drivers/gpu/drm/bridge/tc358764.c
··· 369 369 370 370 ctx->bridge.funcs = &tc358764_bridge_funcs; 371 371 ctx->bridge.of_node = dev->of_node; 372 + ctx->bridge.pre_enable_prev_first = true; 372 373 373 374 drm_bridge_add(&ctx->bridge); 374 375
+7 -2
drivers/gpu/drm/exynos/exynos_drm_dsi.c
··· 1445 1445 { 1446 1446 struct exynos_dsi *dsi = bridge_to_dsi(bridge); 1447 1447 1448 - return drm_bridge_attach(bridge->encoder, dsi->out_bridge, NULL, flags); 1448 + return drm_bridge_attach(bridge->encoder, dsi->out_bridge, bridge, 1449 + flags); 1449 1450 } 1450 1451 1451 1452 static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = { ··· 1492 1491 1493 1492 drm_bridge_add(&dsi->bridge); 1494 1493 1495 - drm_bridge_attach(encoder, &dsi->bridge, NULL, 0); 1494 + drm_bridge_attach(encoder, &dsi->bridge, 1495 + list_first_entry_or_null(&encoder->bridge_chain, 1496 + struct drm_bridge, 1497 + chain_node), 0); 1496 1498 1497 1499 /* 1498 1500 * This is a temporary solution and should be made by more generic way. ··· 1730 1726 dsi->bridge.funcs = &exynos_dsi_bridge_funcs; 1731 1727 dsi->bridge.of_node = dev->of_node; 1732 1728 dsi->bridge.type = DRM_MODE_CONNECTOR_DSI; 1729 + dsi->bridge.pre_enable_prev_first = true; 1733 1730 1734 1731 ret = component_add(dev, &exynos_dsi_component_ops); 1735 1732 if (ret)
+1
drivers/gpu/drm/panel/panel-samsung-s6e3ha2.c
··· 733 733 734 734 drm_panel_init(&ctx->panel, dev, &s6e3ha2_drm_funcs, 735 735 DRM_MODE_CONNECTOR_DSI); 736 + ctx->panel.prepare_prev_first = true; 736 737 737 738 drm_panel_add(&ctx->panel); 738 739
+1
drivers/gpu/drm/panel/panel-samsung-s6e63j0x03.c
··· 463 463 464 464 drm_panel_init(&ctx->panel, dev, &s6e63j0x03_funcs, 465 465 DRM_MODE_CONNECTOR_DSI); 466 + ctx->panel.prepare_prev_first = true; 466 467 467 468 ctx->bl_dev = backlight_device_register("s6e63j0x03", dev, ctx, 468 469 &s6e63j0x03_bl_ops, NULL);
+1
drivers/gpu/drm/panel/panel-samsung-s6e8aa0.c
··· 1016 1016 1017 1017 drm_panel_init(&ctx->panel, dev, &s6e8aa0_drm_funcs, 1018 1018 DRM_MODE_CONNECTOR_DSI); 1019 + ctx->panel.prepare_prev_first = true; 1019 1020 1020 1021 drm_panel_add(&ctx->panel); 1021 1022