* [PATCH RFC v2] drm/bridge: connector: Support the colorspace property for HDMI
@ 2026-10-11 14:27 Jan Claußen
2026-10-13 8:40 ` Maxime Ripard
0 siblings, 1 reply; 3+ messages in thread
From: Jan Claußen @ 2026-10-11 14:27 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Jan Claußen, Javier Martinez Canillas, dri-devel,
linux-kernel
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 <javierm@redhat.com>
Signed-off-by: Jan Claußen <jan.claussen10@web.de>
---
.../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);
+ if (ret)
+ return ERR_PTR(ret);
+
+ drm_connector_attach_colorspace_property(connector);
} else {
ret = drmm_connector_init(drm, connector,
&drm_bridge_connector_funcs,
--
Changes in v2:
* Only look up the CRTC state when the connector has a CRTC
* Only apply the check to HDMI bridge connectors
* Move declarations to the top of the function
v1: https://lore.kernel.org/all/20261011132024.2833-1-jan.claussen10@web.de
2.56.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH RFC v2] drm/bridge: connector: Support the colorspace property for HDMI
2026-10-11 14:27 [PATCH RFC v2] drm/bridge: connector: Support the colorspace property for HDMI Jan Claußen
@ 2026-10-13 8:40 ` Maxime Ripard
2026-10-13 15:37 ` Jan Claußen
0 siblings, 1 reply; 3+ messages in thread
From: Maxime Ripard @ 2026-10-13 8:40 UTC (permalink / raw)
To: Jan Claußen
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter,
Javier Martinez Canillas, dri-devel, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2976 bytes --]
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 <javierm@redhat.com>
> Signed-off-by: Jan Claußen <jan.claussen10@web.de>
> ---
> .../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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH RFC v2] drm/bridge: connector: Support the colorspace property for HDMI
2026-10-13 8:40 ` Maxime Ripard
@ 2026-10-13 15:37 ` Jan Claußen
0 siblings, 0 replies; 3+ messages in thread
From: Jan Claußen @ 2026-10-13 15:37 UTC (permalink / raw)
To: Maxime Ripard
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter,
Javier Martinez Canillas, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org
[-- Attachment #1: Type: text/plain, Size: 3370 bytes --]
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 <mripard@kernel.org> 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 <javierm@redhat.com>
> > Signed-off-by: Jan Claußen <jan.claussen10@web.de>
> > ---
> > .../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
[-- Attachment #2: Type: text/html, Size: 4249 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-13 15:38 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-11 14:27 [PATCH RFC v2] drm/bridge: connector: Support the colorspace property for HDMI Jan Claußen
2026-10-13 8:40 ` Maxime Ripard
2026-10-13 15:37 ` Jan Claußen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.