drm/rockchip: define gamma registers for RK3399
authorHugh Cole-Baker <sigmaris@gmail.com>
Tue, 19 Oct 2021 21:58:41 +0000 (22:58 +0100)
committerHeiko Stuebner <heiko@sntech.de>
Thu, 15 Sep 2022 13:09:10 +0000 (15:09 +0200)
The VOP on RK3399 has a different approach from previous versions for
setting a gamma lookup table, using an update_gamma_lut register. As
this differs from RK3288, give RK3399 its own set of "common" register
definitions.

Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
Tested-by: "Milan P. Stanić" <mps@arvanta.net>
Tested-by: Linus Heckemann <git@sphalerite.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20211019215843.42718-2-sigmaris@gmail.com
drivers/gpu/drm/rockchip/rockchip_drm_vop.h
drivers/gpu/drm/rockchip/rockchip_vop_reg.c
drivers/gpu/drm/rockchip/rockchip_vop_reg.h

index ba88addc1a7547b56537456013e23d554cb5b5ab..8502849833d937a2f6444b6741408cb2c4c45c0f 100644 (file)
@@ -113,6 +113,8 @@ struct vop_common {
        struct vop_reg dither_down_en;
        struct vop_reg dither_up;
        struct vop_reg dsp_lut_en;
+       struct vop_reg update_gamma_lut;
+       struct vop_reg lut_buffer_index;
        struct vop_reg gate_en;
        struct vop_reg mmu_en;
        struct vop_reg out_mode;
index d03dd040292348d35ec9c156c92ad832199fd7ca..014f99e8928e3a772ad43ee95d145d0eb635e415 100644 (file)
@@ -875,6 +875,24 @@ static const struct vop_output rk3399_output = {
        .mipi_dual_channel_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 3),
 };
 
+static const struct vop_common rk3399_common = {
+       .standby = VOP_REG_SYNC(RK3399_SYS_CTRL, 0x1, 22),
+       .gate_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 23),
+       .mmu_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 20),
+       .dither_down_sel = VOP_REG(RK3399_DSP_CTRL1, 0x1, 4),
+       .dither_down_mode = VOP_REG(RK3399_DSP_CTRL1, 0x1, 3),
+       .dither_down_en = VOP_REG(RK3399_DSP_CTRL1, 0x1, 2),
+       .pre_dither_down = VOP_REG(RK3399_DSP_CTRL1, 0x1, 1),
+       .dither_up = VOP_REG(RK3399_DSP_CTRL1, 0x1, 6),
+       .dsp_lut_en = VOP_REG(RK3399_DSP_CTRL1, 0x1, 0),
+       .update_gamma_lut = VOP_REG(RK3399_DSP_CTRL1, 0x1, 7),
+       .lut_buffer_index = VOP_REG(RK3399_DBG_POST_REG1, 0x1, 1),
+       .data_blank = VOP_REG(RK3399_DSP_CTRL0, 0x1, 19),
+       .dsp_blank = VOP_REG(RK3399_DSP_CTRL0, 0x3, 18),
+       .out_mode = VOP_REG(RK3399_DSP_CTRL0, 0xf, 0),
+       .cfg_done = VOP_REG_SYNC(RK3399_REG_CFG_DONE, 0x1, 0),
+};
+
 static const struct vop_yuv2yuv_phy rk3399_yuv2yuv_win01_data = {
        .y2r_coefficients = {
                VOP_REG(RK3399_WIN0_YUV2YUV_Y2R + 0, 0xffff, 0),
@@ -957,7 +975,7 @@ static const struct vop_data rk3399_vop_big = {
        .version = VOP_VERSION(3, 5),
        .feature = VOP_FEATURE_OUTPUT_RGB10,
        .intr = &rk3366_vop_intr,
-       .common = &rk3288_common,
+       .common = &rk3399_common,
        .modeset = &rk3288_modeset,
        .output = &rk3399_output,
        .afbc = &rk3399_vop_afbc,
@@ -965,6 +983,7 @@ static const struct vop_data rk3399_vop_big = {
        .win = rk3399_vop_win_data,
        .win_size = ARRAY_SIZE(rk3399_vop_win_data),
        .win_yuv2yuv = rk3399_vop_big_win_yuv2yuv_data,
+       .lut_size = 1024,
 };
 
 static const struct vop_win_data rk3399_vop_lit_win_data[] = {
@@ -983,13 +1002,14 @@ static const struct vop_win_yuv2yuv_data rk3399_vop_lit_win_yuv2yuv_data[] = {
 static const struct vop_data rk3399_vop_lit = {
        .version = VOP_VERSION(3, 6),
        .intr = &rk3366_vop_intr,
-       .common = &rk3288_common,
+       .common = &rk3399_common,
        .modeset = &rk3288_modeset,
        .output = &rk3399_output,
        .misc = &rk3368_misc,
        .win = rk3399_vop_lit_win_data,
        .win_size = ARRAY_SIZE(rk3399_vop_lit_win_data),
        .win_yuv2yuv = rk3399_vop_lit_win_yuv2yuv_data,
+       .lut_size = 256,
 };
 
 static const struct vop_win_data rk3228_vop_win_data[] = {
index 0b3cd65ba5c1b3015f8d6021c7f0288c3591c59c..406e981c75bd73df2f2350e1704030abd1b585f3 100644 (file)
 #define RK3399_YUV2YUV_WIN                     0x02c0
 #define RK3399_YUV2YUV_POST                    0x02c4
 #define RK3399_AUTO_GATING_EN                  0x02cc
+#define RK3399_DBG_POST_REG1                   0x036c
 #define RK3399_WIN0_CSC_COE                    0x03a0
 #define RK3399_WIN1_CSC_COE                    0x03c0
 #define RK3399_WIN2_CSC_COE                    0x03e0