Hi Maxime,

this is where I put it before. The colorspace check could definitely land in 
the HDMI helper. Attaching the colorspace property should only happen once 
though. Should I move this back in the dw_hdmi_qp-rockchip.c?
Jan
On Okt. 13 2026, at 10:40 am, Maxime Ripard <[email protected]> wrote:
> On Sun, Oct 11, 2026 at 02:27:32PM +0000, Jan Claußen wrote:
> > Bridge connectors for HDMI do not expose the colorspace property,
> > so userspace cannot signal the colorimetry (e.g. BT.2020 for HDR).
> > KWin requires the property before it offers the HDR toggle.
> >
> > Attach the property for HDMI bridge connectors, next to the other HDMI
> > properties set up by drmm_connector_hdmi_init().
> >
> > Force a modeset when the property changes so the new colorimetry
> > reaches the sink, as vc4 does in its connector atomic_check.
> >
> > After toggling HDR on, modetest shows that the correct BT.2020 color
> > space is loaded. After toggling it off, it loads the default color space
> > again.
> >
> > Tested in KDE Plasma 6.7.5 on a Radxa Rock 5B (RK3588) with an LG
> > OLED55B87LC.
> >
> > Suggested-by: Javier Martinez Canillas <[email protected]>
> > Signed-off-by: Jan Claußen <[email protected]>
> > ---
> > .../gpu/drm/display/drm_bridge_connector.c | 25 ++++++++++++++++---
> > 1 file changed, 22 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c 
> > b/drivers/gpu/drm/display/drm_bridge_connector.c
> > index 81f3e26f6fdf..885094cc6ddf 100644
> > --- a/drivers/gpu/drm/display/drm_bridge_connector.c
> > +++ b/drivers/gpu/drm/display/drm_bridge_connector.c
> > @@ -414,11 +414,24 @@ static int drm_bridge_connector_atomic_check(struct 
> > drm_connector *connector,
> > {
> > struct drm_bridge_connector *bridge_connector =
> > to_drm_bridge_connector(connector);
> > + struct drm_connector_state *old_state =
> > + drm_atomic_get_old_connector_state(state, connector);
> > + struct drm_connector_state *new_state =
> > + drm_atomic_get_new_connector_state(state, connector);
> > + struct drm_crtc_state *crtc_state;
> >
> > - if (bridge_connector->bridge_hdmi)
> > - return drm_atomic_helper_connector_hdmi_check(connector, state);
> > + if (!bridge_connector->bridge_hdmi)
> > + return 0;
> >
> > - return 0;
> > + if (new_state->crtc && old_state->colorspace != new_state->colorspace) {
> > + crtc_state = drm_atomic_get_crtc_state(state, new_state->crtc);
> > + if (IS_ERR(crtc_state))
> > + return PTR_ERR(crtc_state);
> > +
> > + crtc_state->mode_changed = true;
> > + }
> > +
> > + return drm_atomic_helper_connector_hdmi_check(connector, state);
> > }
> >
> > static const struct drm_connector_helper_funcs 
> > drm_bridge_connector_helper_funcs = {
> > @@ -1079,6 +1092,12 @@ struct drm_connector 
> > *drm_bridge_connector_init(struct drm_device *drm,
> > connector_type, ddc);
> > if (ret)
> > return ERR_PTR(ret);
> > +
> > + ret = drm_mode_create_hdmi_colorspace_property(connector, 0);
>
> This should come from drivers, you can't expect every driver to support
> every HDMI colorspace.
>
> > + if (ret)
> > + return ERR_PTR(ret);
> > +
> > + drm_connector_attach_colorspace_property(connector);
>
> Most importantly, all that work should be in the HDMI helpers, it's an
> HDMI feature just like, say, max bpc
>
> Maxime

Reply via email to