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; }
