From 1a3e95ad13d803b018436c35aa1493f106fbbe18 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Sun, 18 Feb 2024 21:37:53 +0800 Subject: [PATCH] drm/rockchip: vop2: update output mode for rk3576/rk3588 yuv422 RK3588: 4'b0011: eDP YUV422 4'b1100: DP YUV422 4'b1101: DP YUV420 4'b1110: HDMI YUV420 RK3576: 4'b1100: eDP/DP YUV422 4'b1101: HDMI YUV422 4'b1110: DP/HDMI YUV420 Signed-off-by: Sandy Huang Change-Id: I8f51ccda820ecba15c1f594794a24138e9348c54 --- drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 5 +++++ drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 15 +++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 14 -------------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 02c18d5fa2cc..e97f7912f5dc 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -1548,12 +1548,17 @@ struct vop2_data { #define ROCKCHIP_OUT_MODE_BT1120 0 #define ROCKCHIP_OUT_MODE_P666 1 #define ROCKCHIP_OUT_MODE_P565 2 +#define RK3588_EDP_OUTPUT_MODE_YUV422 3 #define ROCKCHIP_OUT_MODE_BT656 5 #define ROCKCHIP_OUT_MODE_S888 8 #define ROCKCHIP_OUT_MODE_S666 9 #define ROCKCHIP_OUT_MODE_YUV422 9 #define ROCKCHIP_OUT_MODE_S565 10 #define ROCKCHIP_OUT_MODE_S888_DUMMY 12 +#define RK3588_DP_OUT_MODE_YUV422 12 +#define RK3576_EDP_OUT_MODE_YUV422 12 +#define RK3588_DP_OUT_MODE_YUV420 13 +#define RK3576_HDMI_OUT_MODE_YUV422 13 #define ROCKCHIP_OUT_MODE_YUV420 14 /* for use special outface */ #define ROCKCHIP_OUT_MODE_AAAA 15 diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 2fb249931195..ca905fd142a8 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -10702,6 +10702,21 @@ static void vop2_cfg_update(struct drm_crtc *crtc, out_mode = ROCKCHIP_OUT_MODE_P888; else out_mode = vcstate->output_mode; + + if (out_mode == ROCKCHIP_OUT_MODE_YUV420) { + if (vop2->version == VOP_VERSION_RK3588 && output_if_is_dp(vcstate->output_if)) + out_mode = RK3588_DP_OUT_MODE_YUV420; + } else if (out_mode == ROCKCHIP_OUT_MODE_YUV422) { + if (vop2->version == VOP_VERSION_RK3576 && output_if_is_edp(vcstate->output_if)) + out_mode = RK3576_EDP_OUT_MODE_YUV422; + else if (vop2->version == VOP_VERSION_RK3588 && output_if_is_edp(vcstate->output_if)) + out_mode = RK3588_EDP_OUTPUT_MODE_YUV422; + else if (vop2->version == VOP_VERSION_RK3576 && output_if_is_hdmi(vcstate->output_if)) + out_mode = RK3576_HDMI_OUT_MODE_YUV422; + else if (output_if_is_dp(vcstate->output_if)) + out_mode = RK3588_DP_OUT_MODE_YUV422; + } + VOP_MODULE_SET(vop2, vp, out_mode, out_mode); vop2_post_color_swap(crtc); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h index c727093a06d6..de10509d204e 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h @@ -174,20 +174,6 @@ struct vop2_data { #define WB_YRGB_FIFO_FULL_INTR BIT(18) #define WB_COMPLETE_INTR BIT(19) -/* - * display output interface supported by rockchip lcdc - */ -#define ROCKCHIP_OUT_MODE_P888 0 -#define ROCKCHIP_OUT_MODE_BT1120 0 -#define ROCKCHIP_OUT_MODE_P666 1 -#define ROCKCHIP_OUT_MODE_P565 2 -#define ROCKCHIP_OUT_MODE_BT656 5 -#define ROCKCHIP_OUT_MODE_S888 8 -#define ROCKCHIP_OUT_MODE_S888_DUMMY 12 -#define ROCKCHIP_OUT_MODE_YUV420 14 -/* for use special outface */ -#define ROCKCHIP_OUT_MODE_AAAA 15 - enum vop_csc_format { CSC_BT601L, CSC_BT709L,