Hi Tommaso, Thanks for the patch.
> -----Original Message----- > From: Tommaso Merciai <tommaso.merciai...@bp.renesas.com> > Sent: 26 May 2025 09:55 > Subject: [PATCH] drm/bridge: adv7511: Do not merge adv7511_mode_set() with > atomic_enable() > > 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...@bp.renesas.com> > Closes: https://lore.kernel.org/all/aDB8bD6cF7qiSpKd@tom-desktop/ > Signed-off-by: Tommaso Merciai <tommaso.merciai...@bp.renesas.com> Reviewed-by: Biju Das <biju.das...@bp.renesas.com> The modetest started working again on RZ/V2L SMARC EVK connected to ADV7535. So, Tested-by: Biju Das <biju.das...@bp.renesas.com> Cheers, Biju > --- > 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