Re: [PATCH v4 6/7] drm/rockchip: dw_hdmi_qp: Set the VOP2 color space from the connector
From: Jan Claußen
Date: Wed Nov 11 2026 - 14:20:42 EST
Hi Cristian and Chaoyi,
thank you and noted. Going to look into this soon!
Any other concerns about my approach? Main concern sounds like it’s not the only one.
Cheers,
Jan
> Am 11.11.2026 um 10:41 schrieb Cristian Ciocaltea <cristian.ciocaltea@xxxxxxxxxxxxx>:
>
> Hi Chaoyi,
>
>> On 11/11/26 8:19 AM, Chaoyi Chen wrote:
>> Hi Cristian and Jan,
>>
>>> On 11/11/2026 3:05 AM, Cristian Ciocaltea wrote:
>>> Hi Jan,
>>>
>>> On 10/18/26 5:31 PM, Jan Claußen wrote:
>>>> VOP2 converts RGB to YCbCr using the matrix selected by the CRTC
>>>> state's color_space, but the HDMI encoder never sets it, so VOP2
>>>> always converts with BT.709. Once the colorspace property can
>>>> signal BT.2020 colorimetry to the sink, a YCbCr output would be
>>>> encoded with BT.709 and decoded with BT.2020.
>>>>
>>>> Derive color_space from the connector colorspace before the early
>>>> return, so that a colorspace change alone is applied.
>>>>
>>>> Signed-off-by: Jan Claußen <jan.claussen10@xxxxxx>
>>>> ---
>>>> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++++++++++
>>>> 1 file changed, 16 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>> index 9c4cf68d79d5..10c5b6d6406e 100644
>>>> --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>> +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>> @@ -17,6 +17,7 @@
>>>> #include <linux/phy/phy.h>
>>>> #include <linux/phy/phy-hdmi.h>
>>>> #include <linux/regmap.h>
>>>> +#include <linux/videodev2.h>
>>>> #include <linux/workqueue.h>
>>>>
>>>> #include <drm/bridge/dw_hdmi_qp.h>
>>>> @@ -187,6 +188,19 @@ static int dw_hdmi_qp_rockchip_get_vop_format(struct drm_encoder *encoder,
>>>> return bstate->output_bus_cfg.format;
>>>> }
>>>>
>>>> +static u32
>>>> +dw_hdmi_qp_rockchip_color_space(const struct drm_connector_state *conn_state)
>>>> +{
>>>> + switch (conn_state->colorspace) {
>>>> + case DRM_MODE_COLORIMETRY_BT2020_RGB:
>>>> + case DRM_MODE_COLORIMETRY_BT2020_YCC:
>>>> + case DRM_MODE_COLORIMETRY_BT2020_CYCC:
>>>> + return V4L2_COLORSPACE_BT2020;
>>>> + default:
>>>> + return V4L2_COLORSPACE_DEFAULT;
>>>> + }
>>>> +}
>>>
>>> My main concern is introducing V4L2_COLORSPACE_* logic into a DRM bridge driver,
>>> which should rather rely on enum drm_colorspace / DRM_MODE_COLORIMETRY_*.
>>> Translating the DRM colorimetry into V4L2 values only for VOP2 to map them back
>>> to a CSC matrix doesn't seem fully justified.
>>>
>>> The root problem is rather on the VOP2 side: the color_space field in struct
>>> rockchip_crtc_state and its V4L2-based handling in the CSC selection look like
>>> leftovers inherited from the vendor kernel, and I think this is a good time to
>>> clean that up instead of building on it.
>>>
>>
>> Yep. And if you look at the latest vendor kernel code, we have also
>> removed the V4L2_COLORSPACE_* related content and switched to DRM.
>
> Thanks for the heads-up; I haven't checked the recent vendor kernel changes.
>
> Regards,
> Cristian
>