From 3965fbfb461d8a37738d3f66c7966f7474ad6f6d Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Tue, 20 Feb 2024 16:52:29 +0800 Subject: [PATCH] drm/rockchip: vop: enable rb_swap and rg_swap in YUV444 bus_format for rk3576 vopl The RGB888 bus_format can be converted to VYU444 if r2y enabled, so it is needed to enable rb_swap and rg_swap for YUV444. Change-Id: Ib35398137dcd3c849590ba5243d879c5ef11ccee Signed-off-by: Damon Ding --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 8 ++++++++ drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 37eb7e374cea..81b178ca3879 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -3408,6 +3408,14 @@ static void vop_update_csc(struct drm_crtc *crtc) else VOP_CTRL_SET(vop, dsp_data_swap, 0); + /* + * For RK3576 vopl, rg_swap and rb_swap need to be enabled in + * YUV444 bus_format. + */ + if ((VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 0xd) && + s->bus_format == MEDIA_BUS_FMT_YUV8_1X24) + VOP_CTRL_SET(vop, dsp_data_swap, DSP_RG_SWAP | DSP_RB_SWAP); + VOP_CTRL_SET(vop, out_mode, s->output_mode); vop_dither_setup(crtc); diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index 13c62d1e01f2..ea0bf808af97 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -2016,7 +2016,7 @@ static const struct vop_ctrl rk3576_lit_ctrl_data = { .dither_down_en = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 5), .dither_down_mode = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 6), .dither_down_sel = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 7), - .dsp_data_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1f, 9), + .dsp_data_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1f, 8), .dsp_bg_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 8), .dsp_rb_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 9), .dsp_rg_swap = VOP_REG(EBC_VOP_DSP_CTRL1, 0x1, 10),