From a50f495d0c70b5b830fae8272b5a87ad982ec7f4 Mon Sep 17 00:00:00 2001 From: Damon Ding Date: Wed, 9 Mar 2022 15:27:39 +0800 Subject: [PATCH] drm/rockchip: vop: add bt656 support for rv1106 Signed-off-by: Damon Ding Change-Id: I2b60d18fe44cccdd6edcc542d3ae8865ca96e824 --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 11 ++++++++--- drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 3 +++ drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index d0f267eb58db..031de4f6b5e5 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -3044,8 +3044,10 @@ static void vop_update_csc(struct drm_crtc *crtc) struct vop *vop = to_vop(crtc); u32 val; - if (s->output_mode == ROCKCHIP_OUT_MODE_AAAA && - !(vop->data->feature & VOP_FEATURE_OUTPUT_10BIT)) + if ((s->output_mode == ROCKCHIP_OUT_MODE_AAAA && + !(vop->data->feature & VOP_FEATURE_OUTPUT_10BIT)) || + (VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) >= 12 && + s->output_if & VOP_OUTPUT_IF_BT656)) s->output_mode = ROCKCHIP_OUT_MODE_P888; if (is_uv_swap(s->bus_format, s->output_mode)) @@ -3214,6 +3216,8 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc, yc_swap = is_yc_swap(s->bus_format); VOP_CTRL_SET(vop, bt1120_yc_swap, yc_swap); VOP_CTRL_SET(vop, yuv_clip, 1); + } else if (s->output_if & VOP_OUTPUT_IF_BT656) { + VOP_CTRL_SET(vop, bt656_en, 1); } break; case DRM_MODE_CONNECTOR_eDP: @@ -3300,7 +3304,8 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc, VOP_CTRL_SET(vop, vtotal_pw, vtotal << 16 | vsync_len); VOP_CTRL_SET(vop, core_dclk_div, - !!(adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)); + !!(adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) || + s->output_if & VOP_OUTPUT_IF_BT656); VOP_CTRL_SET(vop, win_csc_mode_sel, 1); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 02e974bbf28f..c992de1842da 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -345,6 +345,9 @@ struct vop_ctrl { struct vop_reg bt1120_yc_swap; struct vop_reg bt1120_en; + /* bt656 */ + struct vop_reg bt656_en; + struct vop_reg reg_done_frm; struct vop_reg cfg_done; }; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index c0d28e2a93be..e9b60533723d 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -1904,6 +1904,7 @@ static const struct vop_ctrl rv1106_ctrl_data = { 0xffffffff, 0), .bt1120_yc_swap = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 30), .bt1120_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 31), + .bt656_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 6), }; static const struct vop_win_data rv1106_vop_win_data[] = {