diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 3d9aca634ced..5cf5313c4ea1 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -3145,7 +3145,7 @@ static void vop_update_csc(struct drm_crtc *crtc) s->output_mode = ROCKCHIP_OUT_MODE_P888; if (is_uv_swap(s->bus_format, s->output_mode)) - VOP_CTRL_SET(vop, dsp_data_swap, DSP_RB_SWAP); + VOP_CTRL_SET(vop, dsp_rb_swap, 1); else VOP_CTRL_SET(vop, dsp_data_swap, 0); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 7b1612937ddb..896ebfa760a4 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -305,6 +305,11 @@ struct vop_ctrl { struct vop_reg sw_uv_offset_en; struct vop_reg dsp_out_yuv; struct vop_reg dsp_data_swap; + struct vop_reg dsp_bg_swap; + struct vop_reg dsp_rb_swap; + struct vop_reg dsp_rg_swap; + struct vop_reg dsp_delta_swap; + struct vop_reg dsp_dummy_swap; struct vop_reg yuv_clip; struct vop_reg dsp_ccir656_avg; struct vop_reg dsp_black; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index e47f5e865537..7c632677ce6d 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -311,6 +311,11 @@ static const struct vop_ctrl rk3288_ctrl_data = { .dsp_out_yuv = VOP_REG_VER(RK3399_POST_SCL_CTRL, 0x1, 2, 3, 5, -1), .dsp_data_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1f, 12), + .dsp_bg_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 12), + .dsp_rb_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 13), + .dsp_rg_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 14), + .dsp_delta_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 15), + .dsp_dummy_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 16), .dsp_ccir656_avg = VOP_REG(RK3288_DSP_CTRL0, 0x1, 20), .dsp_blank = VOP_REG(RK3288_DSP_CTRL0, 0x3, 18), .update_gamma_lut = VOP_REG_VER(RK3288_DSP_CTRL1, 0x1, 7, 3, 5, -1), @@ -1064,6 +1069,11 @@ static const struct vop_ctrl rk3328_ctrl_data = { .dither_up_en = VOP_REG(RK3328_DSP_CTRL1, 0x1, 6), .dsp_data_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1f, 12), + .dsp_bg_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 12), + .dsp_rb_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 13), + .dsp_rg_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 14), + .dsp_delta_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 15), + .dsp_dummy_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 16), .dsp_ccir656_avg = VOP_REG(RK3328_DSP_CTRL0, 0x1, 20), .dsp_blank = VOP_REG(RK3328_DSP_CTRL0, 0x3, 18), .dsp_lut_en = VOP_REG(RK3328_DSP_CTRL1, 0x1, 0), @@ -1554,6 +1564,9 @@ static const struct vop_ctrl px30_ctrl_data = { .dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6), .dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), + .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), + .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), + .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), @@ -1691,6 +1704,9 @@ static const struct vop_ctrl rk3308_ctrl_data = { .dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6), .dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), + .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), + .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), + .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), @@ -1799,6 +1815,9 @@ static const struct vop_ctrl rv1126_ctrl_data = { .dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6), .dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), + .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), + .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), + .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), .yuv_clip = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 4), .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), @@ -1888,6 +1907,9 @@ static const struct vop_ctrl rv1106_ctrl_data = { .dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6), .dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), + .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), + .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), + .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), .yuv_clip = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 4), .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14),