The HDMI connector framework already consumes conn_state->colorspace
when generating the AVI infoframe (drm_hdmi_avi_infoframe_colorimetry()
in drm_hdmi_state_helper.c), and drmm_connector_hdmi_init() attaches
HDR_OUTPUT_METADATA and max bpc for this connector. The Colorspace
property itself, however, is never created, so userspace has no way to
request BT.2020 colorimetry and wide-gamut/HDR output stays effectively
unavailable on RK3588 even though the rest of the plumbing is in place.

Compositors gate HDR on this: KWin (Plasma 6.x) requires the Colorspace
property alongside HDR_OUTPUT_METADATA and max bpc before it reports an
output as HDR/wide-gamut capable, so the HDR toggle never appears.

Create and attach the standard HDMI colorspace property right after the
bridge connector is initialised. Passing 0 selects the full HDMI
colorspace set defined by the DRM core.

Tested on an Orange Pi 5 Plus (RK3588) with Plasma 6.6 on the Collabora
rockchip-v7.0 tree, which carries the same gap: with the property
attached, kscreen-doctor reports both HDMI outputs as HDR and
wide-color-gamut capable, KWin exposes the HDR toggle, the property
switches to BT2020_RGB at 10 bpc when enabled (verified with modetest),
and browsers report an HDR display so streaming services serve native
smpte2084/bt2020 content.

Signed-off-by: Igor Paunovic <[email protected]>
---
--- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
@@ -603,6 +603,20 @@
                return dev_err_probe(hdmi->dev, PTR_ERR(connector),
                                     "Failed to init bridge connector\n");
 
+       /*
+        * Attach the HDMI Colorspace property. The HDMI connector framework
+        * already consumes conn_state->colorspace for the AVI infoframe
+        * (drm_hdmi_avi_infoframe_colorimetry()), and HDR_OUTPUT_METADATA and
+        * max bpc are attached by drmm_connector_hdmi_init(), but without the
+        * Colorspace property userspace cannot request BT.2020 signalling,
+        * which keeps wide-gamut/HDR output unavailable. Passing 0 selects
+        * the full HDMI colorspace set defined by the core.
+        */
+       ret = drm_mode_create_hdmi_colorspace_property(connector, 0);
+       if (ret)
+               return ret;
+       drm_connector_attach_colorspace_property(connector);
+
        return 0;
 }
 

Reply via email to