Since commit c9b1150a68d9 ("drm/atomic-helper: Re-order bridge chain
pre-enable and post-disable"), pre-enable sequence is called before the
CRTC is enabled.

This causes unintended side-effects (abberation among potentially other
things) in the display when samsung_dsim_init() is called in the
pre-enable part of the sequence. Call it in samsung_dsim_atomic_enable()
instead.

Cc: [email protected] # v6.17 and later
Signed-off-by: Kaustabh Chakraborty <[email protected]>
---
 drivers/gpu/drm/bridge/samsung-dsim.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c 
b/drivers/gpu/drm/bridge/samsung-dsim.c
index 1d85e706c74b9..975f8b50ae660 100644
--- a/drivers/gpu/drm/bridge/samsung-dsim.c
+++ b/drivers/gpu/drm/bridge/samsung-dsim.c
@@ -1655,6 +1655,13 @@ static void samsung_dsim_atomic_pre_enable(struct 
drm_bridge *bridge,
        }
 
        dsi->state |= DSIM_STATE_ENABLED;
+}
+
+static void samsung_dsim_atomic_enable(struct drm_bridge *bridge,
+                                      struct drm_atomic_state *state)
+{
+       struct samsung_dsim *dsi = bridge_to_dsi(bridge);
+       int ret;
 
        /*
         * For Exynos-DSIM the downstream bridge, or panel are expecting
@@ -1665,12 +1672,6 @@ static void samsung_dsim_atomic_pre_enable(struct 
drm_bridge *bridge,
                if (ret)
                        return;
        }
-}
-
-static void samsung_dsim_atomic_enable(struct drm_bridge *bridge,
-                                      struct drm_atomic_state *state)
-{
-       struct samsung_dsim *dsi = bridge_to_dsi(bridge);
 
        samsung_dsim_set_display_mode(dsi);
        samsung_dsim_set_display_enable(dsi, true);

-- 
2.52.0

Reply via email to