mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] drm/bridge: adv7511: Do not merge adv7511_mode_set() with atomic_enable()
@ 2025-05-26  8:54 Tommaso Merciai
  2025-05-26  9:13 ` Geert Uytterhoeven
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Tommaso Merciai @ 2025-05-26  8:54 UTC (permalink / raw)
  To: tomm.merciai
  Cc: linux-renesas-soc, biju.das.jz, Tommaso Merciai, Andrzej Hajda,
	Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
	Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Dmitry Baryshkov,
	Douglas Anderson, Adam Ford, Jesse Van Gavere, dri-devel,
	linux-kernel

After adv7511_mode_set() was merged into .atomic_enable(), only the
native resolution is working when using modetest.

This is caused by incorrect timings: adv7511_mode_set() must not be
merged into .atomic_enable().

Move adv7511_mode_set() back to the .mode_set() callback in
drm_bridge_funcs to restore correct behavior.

Fixes: 0a9e2f0a6466 ("drm/bridge: adv7511: switch to the HDMI connector helpers")
Reported-by: Biju Das <biju.das.jz@bp.renesas.com>
Closes: https://lore.kernel.org/all/aDB8bD6cF7qiSpKd@tom-desktop/
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
---
 drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 22 ++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 8b7548448615..7a874bf645af 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -647,6 +647,7 @@ adv7511_detect(struct adv7511 *adv7511)
 }
 
 static void adv7511_mode_set(struct adv7511 *adv7511,
+			     const struct drm_display_mode *mode,
 			     const struct drm_display_mode *adj_mode)
 {
 	unsigned int low_refresh_rate;
@@ -717,11 +718,11 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
 			vsync_polarity = 1;
 	}
 
-	if (drm_mode_vrefresh(adj_mode) <= 24)
+	if (drm_mode_vrefresh(mode) <= 24)
 		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_24HZ;
-	else if (drm_mode_vrefresh(adj_mode) <= 25)
+	else if (drm_mode_vrefresh(mode) <= 25)
 		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_25HZ;
-	else if (drm_mode_vrefresh(adj_mode) <= 30)
+	else if (drm_mode_vrefresh(mode) <= 30)
 		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_30HZ;
 	else
 		low_refresh_rate = ADV7511_LOW_REFRESH_RATE_NONE;
@@ -743,7 +744,7 @@ static void adv7511_mode_set(struct adv7511 *adv7511,
 	 * supposed to give better results.
 	 */
 
-	adv7511->f_tmds = adj_mode->clock;
+	adv7511->f_tmds = mode->clock;
 }
 
 static int adv7511_connector_init(struct adv7511 *adv)
@@ -795,8 +796,6 @@ static void adv7511_bridge_atomic_enable(struct drm_bridge *bridge,
 
 	adv7511_set_config_csc(adv, connector, adv->rgb);
 
-	adv7511_mode_set(adv, &crtc_state->adjusted_mode);
-
 	drm_atomic_helper_connector_hdmi_update_infoframes(connector, state);
 }
 
@@ -821,6 +820,16 @@ adv7511_bridge_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge,
 	return MODE_OK;
 }
 
+static void adv7511_bridge_mode_set(struct drm_bridge *bridge,
+				    const struct drm_display_mode *mode,
+				    const struct drm_display_mode *adj_mode)
+{
+	struct adv7511 *adv = bridge_to_adv7511(bridge);
+
+	/* should not be merged into atomic_enable() */
+	adv7511_mode_set(adv, mode, adj_mode);
+}
+
 static enum drm_mode_status adv7511_bridge_mode_valid(struct drm_bridge *bridge,
 						      const struct drm_display_info *info,
 		const struct drm_display_mode *mode)
@@ -917,6 +926,7 @@ static int adv7511_bridge_hdmi_write_infoframe(struct drm_bridge *bridge,
 }
 
 static const struct drm_bridge_funcs adv7511_bridge_funcs = {
+	.mode_set = adv7511_bridge_mode_set,
 	.mode_valid = adv7511_bridge_mode_valid,
 	.attach = adv7511_bridge_attach,
 	.detect = adv7511_bridge_detect,
-- 
2.43.0


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2025-05-27 10:12 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-26  8:54 [PATCH] drm/bridge: adv7511: Do not merge adv7511_mode_set() with atomic_enable() Tommaso Merciai
2025-05-26  9:13 ` Geert Uytterhoeven
2025-05-26  9:21   ` Tommaso Merciai
2025-05-26  9:24 ` Biju Das
2025-05-26  9:26 ` Maxime Ripard
2025-05-26  9:58   ` Tommaso Merciai
2025-05-26 10:49     ` Laurent Pinchart
2025-05-26 11:19       ` Tommaso Merciai
2025-05-26 11:40         ` Maxime Ripard
2025-05-26 13:18           ` Dmitry Baryshkov
2025-05-26 14:02             ` Tommaso Merciai
2025-05-26 14:13               ` Tommaso Merciai
2025-05-26 14:28                 ` Laurent Pinchart
2025-05-26 16:43                   ` Tommaso Merciai
2025-05-27 10:11                     ` Tommaso Merciai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®