[PATCH v7 13/22] drm/rockchip: vop2: Set correct output format for RK3576 YUV422

Nicolas Frattaroli posted 22 patches 2 weeks, 4 days ago
[PATCH v7 13/22] drm/rockchip: vop2: Set correct output format for RK3576 YUV422
Posted by Nicolas Frattaroli 2 weeks, 4 days ago
For RK3576 to be able to output YUV422 signals, it first needs to be
able to pick the right output mode in the display controller to do so.

The RK3576 hardware specifies different output formats depending on the
used display protocol.

Adjust the written register value based on the SoC and connector, so
other users of vcstate->output_mode don't have to care about this.

Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index 3dd7b7571487..d93c6779286e 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -1706,6 +1706,22 @@ static void vop2_crtc_atomic_enable(struct drm_crtc *crtc,
 	if (vcstate->output_mode == ROCKCHIP_OUT_MODE_AAAA &&
 	    !(vp_data->feature & VOP2_VP_FEATURE_OUTPUT_10BIT))
 		out_mode = ROCKCHIP_OUT_MODE_P888;
+	else if (vcstate->output_mode == ROCKCHIP_OUT_MODE_YUV422 &&
+		 vop2->version == VOP_VERSION_RK3576)
+		switch (vcstate->output_type) {
+		case DRM_MODE_CONNECTOR_DisplayPort:
+		case DRM_MODE_CONNECTOR_eDP:
+			out_mode = ROCKCHIP_OUT_MODE_YUV422_RK3576_DP;
+			break;
+		case DRM_MODE_CONNECTOR_HDMIA:
+			out_mode = ROCKCHIP_OUT_MODE_YUV422_RK3576_HDMI;
+			break;
+		default:
+			drm_err(vop2->drm, "Unknown DRM_MODE_CONNECTOR %d\n",
+				vcstate->output_type);
+			vop2_unlock(vop2);
+			return;
+		}
 	else
 		out_mode = vcstate->output_mode;
 

-- 
2.52.0
Re:[PATCH v7 13/22] drm/rockchip: vop2: Set correct output format for RK3576 YUV422
Posted by Andy Yan 2 weeks, 3 days ago

Hello Nicolas,

At 2026-01-21 22:45:20, "Nicolas Frattaroli" <nicolas.frattaroli@collabora.com> wrote:
>For RK3576 to be able to output YUV422 signals, it first needs to be
>able to pick the right output mode in the display controller to do so.
>
>The RK3576 hardware specifies different output formats depending on the
>used display protocol.
>
>Adjust the written register value based on the SoC and connector, so
>other users of vcstate->output_mode don't have to care about this.
>
>Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>


    Reviewed-by: Andy Yan <andyshrk@163.com>
>---
> drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
>diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
>index 3dd7b7571487..d93c6779286e 100644
>--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
>+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
>@@ -1706,6 +1706,22 @@ static void vop2_crtc_atomic_enable(struct drm_crtc *crtc,
> 	if (vcstate->output_mode == ROCKCHIP_OUT_MODE_AAAA &&
> 	    !(vp_data->feature & VOP2_VP_FEATURE_OUTPUT_10BIT))
> 		out_mode = ROCKCHIP_OUT_MODE_P888;
>+	else if (vcstate->output_mode == ROCKCHIP_OUT_MODE_YUV422 &&
>+		 vop2->version == VOP_VERSION_RK3576)
>+		switch (vcstate->output_type) {
>+		case DRM_MODE_CONNECTOR_DisplayPort:
>+		case DRM_MODE_CONNECTOR_eDP:
>+			out_mode = ROCKCHIP_OUT_MODE_YUV422_RK3576_DP;
>+			break;
>+		case DRM_MODE_CONNECTOR_HDMIA:
>+			out_mode = ROCKCHIP_OUT_MODE_YUV422_RK3576_HDMI;
>+			break;
>+		default:
>+			drm_err(vop2->drm, "Unknown DRM_MODE_CONNECTOR %d\n",
>+				vcstate->output_type);
>+			vop2_unlock(vop2);
>+			return;
>+		}
> 	else
> 		out_mode = vcstate->output_mode;
> 
>
>-- 
>2.52.0
>