1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <config.h> 8*4882a593Smuzhiyun #include <common.h> 9*4882a593Smuzhiyun #include <errno.h> 10*4882a593Smuzhiyun #include <malloc.h> 11*4882a593Smuzhiyun #include <asm/unaligned.h> 12*4882a593Smuzhiyun #include <asm/io.h> 13*4882a593Smuzhiyun #include <linux/list.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #include "rockchip_vop.h" 16*4882a593Smuzhiyun #include "rockchip_vop_reg.h" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define VOP_REG_VER_MASK(off, _mask, s, _write_mask, _major, \ 19*4882a593Smuzhiyun _begin_minor, _end_minor) \ 20*4882a593Smuzhiyun {.offset = off, \ 21*4882a593Smuzhiyun .mask = _mask, \ 22*4882a593Smuzhiyun .shift = s, \ 23*4882a593Smuzhiyun .write_mask = _write_mask, \ 24*4882a593Smuzhiyun .major = _major, \ 25*4882a593Smuzhiyun .begin_minor = _begin_minor, \ 26*4882a593Smuzhiyun .end_minor = _end_minor,} 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define VOP_REG(off, _mask, s) \ 29*4882a593Smuzhiyun VOP_REG_VER_MASK(off, _mask, s, false, 0, 0, -1) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define VOP_REG_MASK(off, _mask, s) \ 32*4882a593Smuzhiyun VOP_REG_VER_MASK(off, _mask, s, true, 0, 0, -1) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define VOP_REG_VER(off, _mask, s, _major, _begin_minor, _end_minor) \ 35*4882a593Smuzhiyun VOP_REG_VER_MASK(off, _mask, s, false, \ 36*4882a593Smuzhiyun _major, _begin_minor, _end_minor) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun static const struct vop_scl_extension rk3288_win_full_scl_ext = { 39*4882a593Smuzhiyun .cbcr_vsd_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 31), 40*4882a593Smuzhiyun .cbcr_vsu_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 30), 41*4882a593Smuzhiyun .cbcr_hsd_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 28), 42*4882a593Smuzhiyun .cbcr_ver_scl_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 26), 43*4882a593Smuzhiyun .cbcr_hor_scl_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 24), 44*4882a593Smuzhiyun .yrgb_vsd_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 23), 45*4882a593Smuzhiyun .yrgb_vsu_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 22), 46*4882a593Smuzhiyun .yrgb_hsd_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 20), 47*4882a593Smuzhiyun .yrgb_ver_scl_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 18), 48*4882a593Smuzhiyun .yrgb_hor_scl_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 16), 49*4882a593Smuzhiyun .line_load_mode = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 15), 50*4882a593Smuzhiyun .cbcr_axi_gather_num = VOP_REG(RK3288_WIN0_CTRL1, 0x7, 12), 51*4882a593Smuzhiyun .yrgb_axi_gather_num = VOP_REG(RK3288_WIN0_CTRL1, 0xf, 8), 52*4882a593Smuzhiyun .vsd_cbcr_gt2 = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 7), 53*4882a593Smuzhiyun .vsd_cbcr_gt4 = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 6), 54*4882a593Smuzhiyun .vsd_yrgb_gt2 = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 5), 55*4882a593Smuzhiyun .vsd_yrgb_gt4 = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 4), 56*4882a593Smuzhiyun .bic_coe_sel = VOP_REG(RK3288_WIN0_CTRL1, 0x3, 2), 57*4882a593Smuzhiyun .cbcr_axi_gather_en = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 1), 58*4882a593Smuzhiyun .yrgb_axi_gather_en = VOP_REG(RK3288_WIN0_CTRL1, 0x1, 0), 59*4882a593Smuzhiyun .lb_mode = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 5), 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun static const struct vop_scl_regs rk3288_win_full_scl = { 63*4882a593Smuzhiyun .ext = &rk3288_win_full_scl_ext, 64*4882a593Smuzhiyun .scale_yrgb_x = VOP_REG(RK3288_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0), 65*4882a593Smuzhiyun .scale_yrgb_y = VOP_REG(RK3288_WIN0_SCL_FACTOR_YRGB, 0xffff, 16), 66*4882a593Smuzhiyun .scale_cbcr_x = VOP_REG(RK3288_WIN0_SCL_FACTOR_CBR, 0xffff, 0x0), 67*4882a593Smuzhiyun .scale_cbcr_y = VOP_REG(RK3288_WIN0_SCL_FACTOR_CBR, 0xffff, 16), 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun static const struct vop_win rk3288_win01_data = { 71*4882a593Smuzhiyun .scl = &rk3288_win_full_scl, 72*4882a593Smuzhiyun .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0), 73*4882a593Smuzhiyun .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1), 74*4882a593Smuzhiyun .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12), 75*4882a593Smuzhiyun .ymirror = VOP_REG_VER(RK3368_WIN0_CTRL0, 0x1, 22, 3, 2, -1), 76*4882a593Smuzhiyun .act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0), 77*4882a593Smuzhiyun .dsp_info = VOP_REG(RK3288_WIN0_DSP_INFO, 0x0fff0fff, 0), 78*4882a593Smuzhiyun .dsp_st = VOP_REG(RK3288_WIN0_DSP_ST, 0x1fff1fff, 0), 79*4882a593Smuzhiyun .yrgb_mst = VOP_REG(RK3288_WIN0_YRGB_MST, 0xffffffff, 0), 80*4882a593Smuzhiyun .uv_mst = VOP_REG(RK3288_WIN0_CBR_MST, 0xffffffff, 0), 81*4882a593Smuzhiyun .yrgb_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 0), 82*4882a593Smuzhiyun .uv_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 16), 83*4882a593Smuzhiyun .src_alpha_ctl = VOP_REG(RK3288_WIN0_SRC_ALPHA_CTRL, 0xffffffff, 0), 84*4882a593Smuzhiyun .dst_alpha_ctl = VOP_REG(RK3288_WIN0_DST_ALPHA_CTRL, 0xffffffff, 0), 85*4882a593Smuzhiyun }; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun static const struct vop_ctrl rk3288_ctrl_data = { 88*4882a593Smuzhiyun .standby = VOP_REG(RK3288_SYS_CTRL, 0x1, 22), 89*4882a593Smuzhiyun .axi_outstanding_max_num = VOP_REG(RK3288_SYS_CTRL1, 0x1f, 13), 90*4882a593Smuzhiyun .axi_max_outstanding_en = VOP_REG(RK3288_SYS_CTRL1, 0x1, 12), 91*4882a593Smuzhiyun .reg_done_frm = VOP_REG_VER(RK3288_SYS_CTRL1, 0x1, 24, 3, 7, -1), 92*4882a593Smuzhiyun .htotal_pw = VOP_REG(RK3288_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), 93*4882a593Smuzhiyun .hact_st_end = VOP_REG(RK3288_DSP_HACT_ST_END, 0x1fff1fff, 0), 94*4882a593Smuzhiyun .vtotal_pw = VOP_REG(RK3288_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), 95*4882a593Smuzhiyun .vact_st_end = VOP_REG(RK3288_DSP_VACT_ST_END, 0x1fff1fff, 0), 96*4882a593Smuzhiyun .vact_st_end_f1 = VOP_REG(RK3288_DSP_VACT_ST_END_F1, 0x1fff1fff, 0), 97*4882a593Smuzhiyun .vs_st_end_f1 = VOP_REG(RK3288_DSP_VS_ST_END_F1, 0x1fff1fff, 0), 98*4882a593Smuzhiyun .hpost_st_end = VOP_REG(RK3288_POST_DSP_HACT_INFO, 0x1fff1fff, 0), 99*4882a593Smuzhiyun .vpost_st_end = VOP_REG(RK3288_POST_DSP_VACT_INFO, 0x1fff1fff, 0), 100*4882a593Smuzhiyun .vpost_st_end_f1 = VOP_REG(RK3288_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0), 101*4882a593Smuzhiyun .post_scl_factor = VOP_REG(RK3288_POST_SCL_FACTOR_YRGB, 0xffffffff, 0), 102*4882a593Smuzhiyun .post_scl_ctrl = VOP_REG(RK3288_POST_SCL_CTRL, 0x3, 0), 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun .dsp_interlace = VOP_REG(RK3288_DSP_CTRL0, 0x1, 10), 105*4882a593Smuzhiyun .auto_gate_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 23), 106*4882a593Smuzhiyun .dsp_layer_sel = VOP_REG(RK3288_DSP_CTRL1, 0xff, 8), 107*4882a593Smuzhiyun .post_lb_mode = VOP_REG_VER(RK3288_SYS_CTRL, 0x1, 18, 3, 2, -1), 108*4882a593Smuzhiyun .global_regdone_en = VOP_REG_VER(RK3288_SYS_CTRL, 0x1, 11, 3, 2, -1), 109*4882a593Smuzhiyun .overlay_mode = VOP_REG_VER(RK3288_SYS_CTRL, 0x1, 16, 3, 2, -1), 110*4882a593Smuzhiyun .core_dclk_div = VOP_REG_VER(RK3399_DSP_CTRL0, 0x1, 4, 3, 4, -1), 111*4882a593Smuzhiyun .p2i_en = VOP_REG_VER(RK3399_DSP_CTRL0, 0x1, 5, 3, 4, -1), 112*4882a593Smuzhiyun .dclk_ddr = VOP_REG_VER(RK3399_DSP_CTRL0, 0x1, 8, 3, 4, -1), 113*4882a593Smuzhiyun .dp_en = VOP_REG(RK3399_SYS_CTRL, 0x1, 11), 114*4882a593Smuzhiyun .rgb_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 12), 115*4882a593Smuzhiyun .hdmi_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 13), 116*4882a593Smuzhiyun .edp_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 14), 117*4882a593Smuzhiyun .mipi_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 15), 118*4882a593Smuzhiyun .mipi_dual_channel_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 3), 119*4882a593Smuzhiyun .data01_swap = VOP_REG_VER(RK3288_SYS_CTRL, 0x1, 17, 3, 5, -1), 120*4882a593Smuzhiyun .dclk_pol = VOP_REG_VER(RK3288_DSP_CTRL0, 0x1, 7, 3, 0, 1), 121*4882a593Smuzhiyun .pin_pol = VOP_REG_VER(RK3288_DSP_CTRL0, 0xf, 4, 3, 0, 1), 122*4882a593Smuzhiyun .dp_dclk_pol = VOP_REG_VER(RK3399_DSP_CTRL1, 0x1, 19, 3, 5, -1), 123*4882a593Smuzhiyun .dp_pin_pol = VOP_REG_VER(RK3399_DSP_CTRL1, 0x7, 16, 3, 5, -1), 124*4882a593Smuzhiyun .rgb_dclk_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x1, 19, 3, 2, -1), 125*4882a593Smuzhiyun .rgb_pin_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x7, 16, 3, 2, -1), 126*4882a593Smuzhiyun .tve_dclk_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 24), 127*4882a593Smuzhiyun .tve_dclk_pol = VOP_REG(RK3288_SYS_CTRL, 0x1, 25), 128*4882a593Smuzhiyun .tve_sw_mode = VOP_REG(RK3288_SYS_CTRL, 0x1, 26), 129*4882a593Smuzhiyun .sw_uv_offset_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 27), 130*4882a593Smuzhiyun .sw_genlock = VOP_REG(RK3288_SYS_CTRL, 0x1, 28), 131*4882a593Smuzhiyun .hdmi_dclk_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x1, 23, 3, 2, -1), 132*4882a593Smuzhiyun .hdmi_pin_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x7, 20, 3, 2, -1), 133*4882a593Smuzhiyun .edp_dclk_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x1, 27, 3, 2, -1), 134*4882a593Smuzhiyun .edp_pin_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x7, 24, 3, 2, -1), 135*4882a593Smuzhiyun .mipi_dclk_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x1, 31, 3, 2, -1), 136*4882a593Smuzhiyun .mipi_pin_pol = VOP_REG_VER(RK3368_DSP_CTRL1, 0x7, 28, 3, 2, -1), 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun .dither_down = VOP_REG(RK3288_DSP_CTRL1, 0xf, 1), 139*4882a593Smuzhiyun .dither_up = VOP_REG(RK3288_DSP_CTRL1, 0x1, 6), 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun .dsp_out_yuv = VOP_REG_VER(RK3399_POST_SCL_CTRL, 0x1, 2, 3, 5, -1), 142*4882a593Smuzhiyun .dsp_data_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1f, 12), 143*4882a593Smuzhiyun .dsp_bg_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 12), 144*4882a593Smuzhiyun .dsp_rb_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 13), 145*4882a593Smuzhiyun .dsp_rg_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 14), 146*4882a593Smuzhiyun .dsp_delta_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 15), 147*4882a593Smuzhiyun .dsp_dummy_swap = VOP_REG(RK3288_DSP_CTRL0, 0x1, 16), 148*4882a593Smuzhiyun .dsp_ccir656_avg = VOP_REG(RK3288_DSP_CTRL0, 0x1, 20), 149*4882a593Smuzhiyun .dsp_blank = VOP_REG(RK3288_DSP_CTRL0, 0x3, 18), 150*4882a593Smuzhiyun .dsp_lut_en = VOP_REG(RK3288_DSP_CTRL1, 0x1, 0), 151*4882a593Smuzhiyun .update_gamma_lut = VOP_REG_VER(RK3288_DSP_CTRL1, 0x1, 7, 3, 5, -1), 152*4882a593Smuzhiyun .out_mode = VOP_REG(RK3288_DSP_CTRL0, 0xf, 0), 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun .bcsh_brightness = VOP_REG(RK3288_BCSH_BCS, 0xff, 0), 155*4882a593Smuzhiyun .bcsh_contrast = VOP_REG(RK3288_BCSH_BCS, 0x1ff, 8), 156*4882a593Smuzhiyun .bcsh_sat_con = VOP_REG(RK3288_BCSH_BCS, 0x3ff, 20), 157*4882a593Smuzhiyun .bcsh_out_mode = VOP_REG(RK3288_BCSH_BCS, 0x3, 0), 158*4882a593Smuzhiyun .bcsh_sin_hue = VOP_REG(RK3288_BCSH_H, 0x1ff, 0), 159*4882a593Smuzhiyun .bcsh_cos_hue = VOP_REG(RK3288_BCSH_H, 0x1ff, 16), 160*4882a593Smuzhiyun .bcsh_r2y_csc_mode = VOP_REG_VER(RK3368_BCSH_CTRL, 0x1, 6, 3, 1, -1), 161*4882a593Smuzhiyun .bcsh_r2y_en = VOP_REG_VER(RK3368_BCSH_CTRL, 0x1, 4, 3, 1, -1), 162*4882a593Smuzhiyun .bcsh_y2r_csc_mode = VOP_REG_VER(RK3368_BCSH_CTRL, 0x3, 2, 3, 1, -1), 163*4882a593Smuzhiyun .bcsh_y2r_en = VOP_REG_VER(RK3368_BCSH_CTRL, 0x1, 0, 3, 1, -1), 164*4882a593Smuzhiyun .bcsh_color_bar = VOP_REG(RK3288_BCSH_COLOR_BAR, 0xffffff, 8), 165*4882a593Smuzhiyun .bcsh_en = VOP_REG(RK3288_BCSH_COLOR_BAR, 0x1, 0), 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun .xmirror = VOP_REG(RK3288_DSP_CTRL0, 0x1, 22), 168*4882a593Smuzhiyun .ymirror = VOP_REG(RK3288_DSP_CTRL0, 0x1, 23), 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun .dsp_background = VOP_REG(RK3288_DSP_BG, 0xffffffff, 0), 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun .cfg_done = VOP_REG(RK3288_REG_CFG_DONE, 0x1, 0), 173*4882a593Smuzhiyun .win_gate[0] = VOP_REG(RK3288_WIN2_CTRL0, 0x1, 0), 174*4882a593Smuzhiyun .win_gate[1] = VOP_REG(RK3288_WIN3_CTRL0, 0x1, 0), 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun .mcu_pix_total = VOP_REG(RK3288_MCU_CTRL, 0x3f, 0), 177*4882a593Smuzhiyun .mcu_cs_pst = VOP_REG(RK3288_MCU_CTRL, 0xf, 6), 178*4882a593Smuzhiyun .mcu_cs_pend = VOP_REG(RK3288_MCU_CTRL, 0x3f, 10), 179*4882a593Smuzhiyun .mcu_rw_pst = VOP_REG(RK3288_MCU_CTRL, 0xf, 16), 180*4882a593Smuzhiyun .mcu_rw_pend = VOP_REG(RK3288_MCU_CTRL, 0x3f, 20), 181*4882a593Smuzhiyun .mcu_clk_sel = VOP_REG(RK3288_MCU_CTRL, 0x1, 26), 182*4882a593Smuzhiyun .mcu_hold_mode = VOP_REG(RK3288_MCU_CTRL, 0x1, 27), 183*4882a593Smuzhiyun .mcu_frame_st = VOP_REG(RK3288_MCU_CTRL, 0x1, 28), 184*4882a593Smuzhiyun .mcu_rs = VOP_REG(RK3288_MCU_CTRL, 0x1, 29), 185*4882a593Smuzhiyun .mcu_bypass = VOP_REG(RK3288_MCU_CTRL, 0x1, 30), 186*4882a593Smuzhiyun .mcu_type = VOP_REG(RK3288_MCU_CTRL, 0x1, 31), 187*4882a593Smuzhiyun .mcu_rw_bypass_port = VOP_REG(RK3288_MCU_BYPASS_WPORT, 0xffffffff, 0), 188*4882a593Smuzhiyun }; 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun static const struct vop_line_flag rk3288_vop_line_flag = { 191*4882a593Smuzhiyun .line_flag_num[0] = VOP_REG(RK3288_INTR_CTRL0, 0x1fff, 12), 192*4882a593Smuzhiyun }; 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun static const struct vop_grf_ctrl rk3288_vop_big_grf_ctrl = { 195*4882a593Smuzhiyun .grf_dclk_inv = VOP_REG(RK3288_GRF_SOC_CON15, 0x1, 13), 196*4882a593Smuzhiyun }; 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun static const struct vop_grf_ctrl rk3288_vop_lit_grf_ctrl = { 199*4882a593Smuzhiyun .grf_dclk_inv = VOP_REG(RK3288_GRF_SOC_CON15, 0x1, 15), 200*4882a593Smuzhiyun }; 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun const struct vop_data rk3288_vop_big = { 203*4882a593Smuzhiyun .version = VOP_VERSION(3, 1), 204*4882a593Smuzhiyun .max_output = {3840, 2160}, 205*4882a593Smuzhiyun .feature = VOP_FEATURE_OUTPUT_10BIT, 206*4882a593Smuzhiyun .ctrl = &rk3288_ctrl_data, 207*4882a593Smuzhiyun .grf_ctrl = &rk3288_vop_big_grf_ctrl, 208*4882a593Smuzhiyun .win = &rk3288_win01_data, 209*4882a593Smuzhiyun .line_flag = &rk3288_vop_line_flag, 210*4882a593Smuzhiyun .reg_len = RK3288_DSP_VACT_ST_END_F1 * 4, 211*4882a593Smuzhiyun }; 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun const struct vop_data rk3288_vop_lit = { 214*4882a593Smuzhiyun .version = VOP_VERSION(3, 1), 215*4882a593Smuzhiyun .max_output = {2560, 1600}, 216*4882a593Smuzhiyun .feature = VOP_FEATURE_OUTPUT_10BIT, 217*4882a593Smuzhiyun .ctrl = &rk3288_ctrl_data, 218*4882a593Smuzhiyun .grf_ctrl = &rk3288_vop_lit_grf_ctrl, 219*4882a593Smuzhiyun .win = &rk3288_win01_data, 220*4882a593Smuzhiyun .line_flag = &rk3288_vop_line_flag, 221*4882a593Smuzhiyun .reg_len = RK3288_DSP_VACT_ST_END_F1 * 4, 222*4882a593Smuzhiyun }; 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun static const struct vop_win rk3368_win23_data = { 225*4882a593Smuzhiyun .enable = VOP_REG(RK3368_WIN2_CTRL0, 0x1, 4), 226*4882a593Smuzhiyun .format = VOP_REG(RK3368_WIN2_CTRL0, 0x3, 5), 227*4882a593Smuzhiyun .ymirror = VOP_REG(RK3368_WIN2_CTRL1, 0x1, 15), 228*4882a593Smuzhiyun .rb_swap = VOP_REG(RK3368_WIN2_CTRL0, 0x1, 20), 229*4882a593Smuzhiyun .dsp_info = VOP_REG(RK3368_WIN2_DSP_INFO0, 0x0fff0fff, 0), 230*4882a593Smuzhiyun .dsp_st = VOP_REG(RK3368_WIN2_DSP_ST0, 0x1fff1fff, 0), 231*4882a593Smuzhiyun .yrgb_mst = VOP_REG(RK3368_WIN2_MST0, 0xffffffff, 0), 232*4882a593Smuzhiyun .yrgb_vir = VOP_REG(RK3368_WIN2_VIR0_1, 0x1fff, 0), 233*4882a593Smuzhiyun .src_alpha_ctl = VOP_REG(RK3368_WIN2_SRC_ALPHA_CTRL, 0xffff, 0), 234*4882a593Smuzhiyun .dst_alpha_ctl = VOP_REG(RK3368_WIN2_DST_ALPHA_CTRL, 0xffffffff, 0), 235*4882a593Smuzhiyun }; 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun static const struct vop_line_flag rk3368_vop_line_flag = { 238*4882a593Smuzhiyun .line_flag_num[0] = VOP_REG(RK3368_LINE_FLAG, 0xffff, 0), 239*4882a593Smuzhiyun .line_flag_num[1] = VOP_REG(RK3368_LINE_FLAG, 0xffff, 16), 240*4882a593Smuzhiyun }; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun static const struct vop_grf_ctrl rk3368_vop_grf_ctrl = { 243*4882a593Smuzhiyun .grf_dclk_inv = VOP_REG(RK3368_GRF_SOC_CON6, 0x1, 5), 244*4882a593Smuzhiyun }; 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun const struct vop_data rk3368_vop = { 247*4882a593Smuzhiyun .version = VOP_VERSION(3, 2), 248*4882a593Smuzhiyun .max_output = {4096, 2160}, 249*4882a593Smuzhiyun .ctrl = &rk3288_ctrl_data, 250*4882a593Smuzhiyun .grf_ctrl = &rk3368_vop_grf_ctrl, 251*4882a593Smuzhiyun .win = &rk3288_win01_data, 252*4882a593Smuzhiyun .line_flag = &rk3368_vop_line_flag, 253*4882a593Smuzhiyun .reg_len = RK3368_DSP_VACT_ST_END_F1 * 4, 254*4882a593Smuzhiyun }; 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun static const struct vop_line_flag rk3366_vop_line_flag = { 257*4882a593Smuzhiyun .line_flag_num[0] = VOP_REG(RK3366_LINE_FLAG, 0xffff, 0), 258*4882a593Smuzhiyun .line_flag_num[1] = VOP_REG(RK3366_LINE_FLAG, 0xffff, 16), 259*4882a593Smuzhiyun }; 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun const struct vop_data rk3366_vop = { 262*4882a593Smuzhiyun .version = VOP_VERSION(3, 4), 263*4882a593Smuzhiyun .max_output = {4096, 2160}, 264*4882a593Smuzhiyun .ctrl = &rk3288_ctrl_data, 265*4882a593Smuzhiyun .win = &rk3288_win01_data, 266*4882a593Smuzhiyun .line_flag = &rk3366_vop_line_flag, 267*4882a593Smuzhiyun .reg_len = RK3366_DSP_VACT_ST_END_F1 * 4, 268*4882a593Smuzhiyun }; 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun static const uint32_t vop_csc_r2y_bt601[] = { 271*4882a593Smuzhiyun 0x02590132, 0xff530075, 0x0200fead, 0xfe530200, 272*4882a593Smuzhiyun 0x0000ffad, 0x00000200, 0x00080200, 0x00080200, 273*4882a593Smuzhiyun }; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun static const uint32_t vop_csc_r2y_bt601_12_235[] = { 276*4882a593Smuzhiyun 0x02040107, 0xff680064, 0x01c2fed6, 0xfe8701c2, 277*4882a593Smuzhiyun 0x0000ffb7, 0x00010200, 0x00080200, 0x00080200, 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun static const uint32_t vop_csc_r2y_bt709[] = { 281*4882a593Smuzhiyun 0x027500bb, 0xff99003f, 0x01c2fea5, 0xfe6801c2, 282*4882a593Smuzhiyun 0x0000ffd7, 0x00010200, 0x00080200, 0x00080200, 283*4882a593Smuzhiyun }; 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun static const uint32_t vop_csc_r2y_bt2020[] = { 286*4882a593Smuzhiyun 0x025300e6, 0xff830034, 0x01c1febd, 0xfe6401c1, 287*4882a593Smuzhiyun 0x0000ffdc, 0x00010200, 0x00080200, 0x00080200, 288*4882a593Smuzhiyun }; 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun static const struct vop_csc_table rk3399_csc_table = { 291*4882a593Smuzhiyun .r2y_bt601 = vop_csc_r2y_bt601, 292*4882a593Smuzhiyun .r2y_bt601_12_235 = vop_csc_r2y_bt601_12_235, 293*4882a593Smuzhiyun .r2y_bt709 = vop_csc_r2y_bt709, 294*4882a593Smuzhiyun .r2y_bt2020 = vop_csc_r2y_bt2020, 295*4882a593Smuzhiyun }; 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun static const struct vop_csc rk3399_win0_csc = { 298*4882a593Smuzhiyun .r2r_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 0), 299*4882a593Smuzhiyun .y2r_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 1), 300*4882a593Smuzhiyun .r2y_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 2), 301*4882a593Smuzhiyun .y2r_offset = RK3399_WIN0_YUV2YUV_Y2R, 302*4882a593Smuzhiyun .r2r_offset = RK3399_WIN0_YUV2YUV_3X3, 303*4882a593Smuzhiyun .r2y_offset = RK3399_WIN0_YUV2YUV_R2Y, 304*4882a593Smuzhiyun }; 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun static const struct vop_csc rk3399_win2_csc = { 307*4882a593Smuzhiyun .r2r_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 16), 308*4882a593Smuzhiyun .r2y_en = VOP_REG(RK3399_YUV2YUV_WIN, 0x1, 18), 309*4882a593Smuzhiyun .r2r_offset = RK3399_WIN2_YUV2YUV_3X3, 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun }; 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun const struct vop_data rk3399_vop_big = { 314*4882a593Smuzhiyun .version = VOP_VERSION(3, 5), 315*4882a593Smuzhiyun .max_output = {4096, 2160}, 316*4882a593Smuzhiyun .feature = VOP_FEATURE_OUTPUT_10BIT, 317*4882a593Smuzhiyun .ctrl = &rk3288_ctrl_data, 318*4882a593Smuzhiyun .win = &rk3288_win01_data, 319*4882a593Smuzhiyun .line_flag = &rk3366_vop_line_flag, 320*4882a593Smuzhiyun .csc_table = &rk3399_csc_table, 321*4882a593Smuzhiyun .win_csc = &rk3399_win0_csc, 322*4882a593Smuzhiyun .reg_len = RK3399_DSP_VACT_ST_END_F1 * 4, 323*4882a593Smuzhiyun }; 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun const struct vop_data rk3399_vop_lit = { 326*4882a593Smuzhiyun .version = VOP_VERSION(3, 6), 327*4882a593Smuzhiyun .max_output = {2560, 1600}, 328*4882a593Smuzhiyun .ctrl = &rk3288_ctrl_data, 329*4882a593Smuzhiyun .win = &rk3368_win23_data, 330*4882a593Smuzhiyun .line_flag = &rk3366_vop_line_flag, 331*4882a593Smuzhiyun .csc_table = &rk3399_csc_table, 332*4882a593Smuzhiyun .win_csc = &rk3399_win2_csc, 333*4882a593Smuzhiyun .reg_len = RK3399_DSP_VACT_ST_END_F1 * 4, 334*4882a593Smuzhiyun }; 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun const struct vop_data rk322x_vop = { 337*4882a593Smuzhiyun .version = VOP_VERSION(3, 7), 338*4882a593Smuzhiyun .max_output = {4096, 2160}, 339*4882a593Smuzhiyun .feature = VOP_FEATURE_OUTPUT_10BIT, 340*4882a593Smuzhiyun .ctrl = &rk3288_ctrl_data, 341*4882a593Smuzhiyun .win = &rk3288_win01_data, 342*4882a593Smuzhiyun .line_flag = &rk3366_vop_line_flag, 343*4882a593Smuzhiyun .reg_len = RK3399_DSP_VACT_ST_END_F1 * 4, 344*4882a593Smuzhiyun }; 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun static const struct vop_ctrl rk3328_ctrl_data = { 347*4882a593Smuzhiyun .standby = VOP_REG(RK3328_SYS_CTRL, 0x1, 22), 348*4882a593Smuzhiyun .axi_outstanding_max_num = VOP_REG(RK3328_SYS_CTRL1, 0x1f, 13), 349*4882a593Smuzhiyun .axi_max_outstanding_en = VOP_REG(RK3328_SYS_CTRL1, 0x1, 12), 350*4882a593Smuzhiyun .reg_done_frm = VOP_REG(RK3328_SYS_CTRL1, 0x1, 24), 351*4882a593Smuzhiyun .auto_gate_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 23), 352*4882a593Smuzhiyun .htotal_pw = VOP_REG(RK3328_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), 353*4882a593Smuzhiyun .hact_st_end = VOP_REG(RK3328_DSP_HACT_ST_END, 0x1fff1fff, 0), 354*4882a593Smuzhiyun .vtotal_pw = VOP_REG(RK3328_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), 355*4882a593Smuzhiyun .vact_st_end = VOP_REG(RK3328_DSP_VACT_ST_END, 0x1fff1fff, 0), 356*4882a593Smuzhiyun .vact_st_end_f1 = VOP_REG(RK3328_DSP_VACT_ST_END_F1, 0x1fff1fff, 0), 357*4882a593Smuzhiyun .vs_st_end_f1 = VOP_REG(RK3328_DSP_VS_ST_END_F1, 0x1fff1fff, 0), 358*4882a593Smuzhiyun .hpost_st_end = VOP_REG(RK3328_POST_DSP_HACT_INFO, 0x1fff1fff, 0), 359*4882a593Smuzhiyun .vpost_st_end = VOP_REG(RK3328_POST_DSP_VACT_INFO, 0x1fff1fff, 0), 360*4882a593Smuzhiyun .vpost_st_end_f1 = VOP_REG(RK3328_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0), 361*4882a593Smuzhiyun .post_scl_factor = VOP_REG(RK3328_POST_SCL_FACTOR_YRGB, 0xffffffff, 0), 362*4882a593Smuzhiyun .post_scl_ctrl = VOP_REG(RK3328_POST_SCL_CTRL, 0x3, 0), 363*4882a593Smuzhiyun .dsp_out_yuv = VOP_REG(RK3328_POST_SCL_CTRL, 0x1, 2), 364*4882a593Smuzhiyun .dsp_interlace = VOP_REG(RK3328_DSP_CTRL0, 0x1, 10), 365*4882a593Smuzhiyun .dsp_layer_sel = VOP_REG(RK3328_DSP_CTRL1, 0xff, 8), 366*4882a593Smuzhiyun .post_lb_mode = VOP_REG(RK3328_SYS_CTRL, 0x1, 18), 367*4882a593Smuzhiyun .global_regdone_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 11), 368*4882a593Smuzhiyun .overlay_mode = VOP_REG(RK3328_SYS_CTRL, 0x1, 16), 369*4882a593Smuzhiyun .core_dclk_div = VOP_REG(RK3328_DSP_CTRL0, 0x1, 4), 370*4882a593Smuzhiyun .dclk_ddr = VOP_REG(RK3328_DSP_CTRL0, 0x1, 8), 371*4882a593Smuzhiyun .p2i_en = VOP_REG(RK3328_DSP_CTRL0, 0x1, 5), 372*4882a593Smuzhiyun .rgb_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 12), 373*4882a593Smuzhiyun .hdmi_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 13), 374*4882a593Smuzhiyun .edp_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 14), 375*4882a593Smuzhiyun .mipi_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 15), 376*4882a593Smuzhiyun .tve_dclk_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 24), 377*4882a593Smuzhiyun .tve_dclk_pol = VOP_REG(RK3328_SYS_CTRL, 0x1, 25), 378*4882a593Smuzhiyun .tve_sw_mode = VOP_REG(RK3328_SYS_CTRL, 0x1, 26), 379*4882a593Smuzhiyun .sw_uv_offset_en = VOP_REG(RK3328_SYS_CTRL, 0x1, 27), 380*4882a593Smuzhiyun .sw_genlock = VOP_REG(RK3328_SYS_CTRL, 0x1, 28), 381*4882a593Smuzhiyun .sw_dac_sel = VOP_REG(RK3328_SYS_CTRL, 0x1, 29), 382*4882a593Smuzhiyun .rgb_pin_pol = VOP_REG(RK3328_DSP_CTRL1, 0xf, 16), 383*4882a593Smuzhiyun .hdmi_pin_pol = VOP_REG(RK3328_DSP_CTRL1, 0xf, 20), 384*4882a593Smuzhiyun .edp_pin_pol = VOP_REG(RK3328_DSP_CTRL1, 0xf, 24), 385*4882a593Smuzhiyun .mipi_pin_pol = VOP_REG(RK3328_DSP_CTRL1, 0xf, 28), 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun .dither_down = VOP_REG(RK3328_DSP_CTRL1, 0xf, 1), 388*4882a593Smuzhiyun .dither_up = VOP_REG(RK3328_DSP_CTRL1, 0x1, 6), 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun .dsp_data_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1f, 12), 391*4882a593Smuzhiyun .dsp_bg_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 12), 392*4882a593Smuzhiyun .dsp_rb_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 13), 393*4882a593Smuzhiyun .dsp_rg_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 14), 394*4882a593Smuzhiyun .dsp_delta_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 15), 395*4882a593Smuzhiyun .dsp_dummy_swap = VOP_REG(RK3328_DSP_CTRL0, 0x1, 16), 396*4882a593Smuzhiyun .dsp_ccir656_avg = VOP_REG(RK3328_DSP_CTRL0, 0x1, 20), 397*4882a593Smuzhiyun .dsp_blank = VOP_REG(RK3328_DSP_CTRL0, 0x3, 18), 398*4882a593Smuzhiyun .dsp_lut_en = VOP_REG(RK3328_DSP_CTRL1, 0x1, 0), 399*4882a593Smuzhiyun .out_mode = VOP_REG(RK3328_DSP_CTRL0, 0xf, 0), 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun .xmirror = VOP_REG(RK3328_DSP_CTRL0, 0x1, 22), 402*4882a593Smuzhiyun .ymirror = VOP_REG(RK3328_DSP_CTRL0, 0x1, 23), 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun .dsp_background = VOP_REG(RK3328_DSP_BG, 0xffffffff, 0), 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun .bcsh_brightness = VOP_REG(RK3328_BCSH_BCS, 0xff, 0), 407*4882a593Smuzhiyun .bcsh_contrast = VOP_REG(RK3328_BCSH_BCS, 0x1ff, 8), 408*4882a593Smuzhiyun .bcsh_sat_con = VOP_REG(RK3328_BCSH_BCS, 0x3ff, 20), 409*4882a593Smuzhiyun .bcsh_out_mode = VOP_REG(RK3328_BCSH_BCS, 0x3, 30), 410*4882a593Smuzhiyun .bcsh_sin_hue = VOP_REG(RK3328_BCSH_H, 0x1ff, 0), 411*4882a593Smuzhiyun .bcsh_cos_hue = VOP_REG(RK3328_BCSH_H, 0x1ff, 16), 412*4882a593Smuzhiyun .bcsh_r2y_csc_mode = VOP_REG(RK3328_BCSH_CTRL, 0x3, 6), 413*4882a593Smuzhiyun .bcsh_r2y_en = VOP_REG(RK3328_BCSH_CTRL, 0x1, 4), 414*4882a593Smuzhiyun .bcsh_y2r_csc_mode = VOP_REG(RK3328_BCSH_CTRL, 0x3, 2), 415*4882a593Smuzhiyun .bcsh_y2r_en = VOP_REG(RK3328_BCSH_CTRL, 0x1, 0), 416*4882a593Smuzhiyun .bcsh_color_bar = VOP_REG(RK3328_BCSH_COLOR_BAR, 0xffffff, 8), 417*4882a593Smuzhiyun .bcsh_en = VOP_REG(RK3328_BCSH_COLOR_BAR, 0x1, 0), 418*4882a593Smuzhiyun .win_channel[0] = VOP_REG_VER(RK3328_WIN0_CTRL2, 0xff, 0, 3, 8, 8), 419*4882a593Smuzhiyun .win_channel[1] = VOP_REG_VER(RK3328_WIN1_CTRL2, 0xff, 0, 3, 8, 8), 420*4882a593Smuzhiyun .win_channel[2] = VOP_REG_VER(RK3328_WIN2_CTRL2, 0xff, 0, 3, 8, 8), 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun .cfg_done = VOP_REG(RK3328_REG_CFG_DONE, 0x1, 0), 423*4882a593Smuzhiyun }; 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun static const struct vop_line_flag rk3328_vop_line_flag = { 427*4882a593Smuzhiyun .line_flag_num[0] = VOP_REG(RK3328_LINE_FLAG, 0xffff, 0), 428*4882a593Smuzhiyun .line_flag_num[1] = VOP_REG(RK3328_LINE_FLAG, 0xffff, 16), 429*4882a593Smuzhiyun }; 430*4882a593Smuzhiyun 431*4882a593Smuzhiyun const struct vop_data rk3328_vop = { 432*4882a593Smuzhiyun .version = VOP_VERSION(3, 8), 433*4882a593Smuzhiyun .max_output = {4096, 2160}, 434*4882a593Smuzhiyun .feature = VOP_FEATURE_OUTPUT_10BIT, 435*4882a593Smuzhiyun .ctrl = &rk3328_ctrl_data, 436*4882a593Smuzhiyun .win = &rk3288_win01_data, 437*4882a593Smuzhiyun .win_offset = 0xd0, 438*4882a593Smuzhiyun .line_flag = &rk3328_vop_line_flag, 439*4882a593Smuzhiyun .reg_len = RK3328_DSP_VACT_ST_END_F1 * 4, 440*4882a593Smuzhiyun }; 441*4882a593Smuzhiyun 442*4882a593Smuzhiyun static const struct vop_win rk3126_win1_data = { 443*4882a593Smuzhiyun .enable = VOP_REG(RK3036_SYS_CTRL, 0x1, 1), 444*4882a593Smuzhiyun .format = VOP_REG(RK3036_SYS_CTRL, 0x7, 6), 445*4882a593Smuzhiyun .rb_swap = VOP_REG(RK3036_SYS_CTRL, 0x1, 19), 446*4882a593Smuzhiyun .dsp_info = VOP_REG(RK3126_WIN1_DSP_INFO, 0x0fff0fff, 0), 447*4882a593Smuzhiyun .dsp_st = VOP_REG(RK3126_WIN1_DSP_ST, 0x1fff1fff, 0), 448*4882a593Smuzhiyun .yrgb_mst = VOP_REG(RK3126_WIN1_MST, 0xffffffff, 0), 449*4882a593Smuzhiyun .yrgb_vir = VOP_REG(RK3036_WIN1_VIR, 0xffff, 0), 450*4882a593Smuzhiyun }; 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun static const struct vop_ctrl rk3036_ctrl_data = { 453*4882a593Smuzhiyun .standby = VOP_REG(RK3036_SYS_CTRL, 0x1, 30), 454*4882a593Smuzhiyun .out_mode = VOP_REG(RK3036_DSP_CTRL0, 0xf, 0), 455*4882a593Smuzhiyun .dsp_blank = VOP_REG(RK3036_DSP_CTRL1, 0x1, 24), 456*4882a593Smuzhiyun .dclk_pol = VOP_REG(RK3036_DSP_CTRL0, 0x1, 7), 457*4882a593Smuzhiyun .pin_pol = VOP_REG(RK3036_DSP_CTRL0, 0xf, 4), 458*4882a593Smuzhiyun .dither_down = VOP_REG(RK3036_DSP_CTRL0, 0x3, 10), 459*4882a593Smuzhiyun .dsp_layer_sel = VOP_REG(RK3036_DSP_CTRL0, 0x1, 8), 460*4882a593Smuzhiyun .htotal_pw = VOP_REG(RK3036_DSP_HTOTAL_HS_END, 0x1fff1fff, 0), 461*4882a593Smuzhiyun .hact_st_end = VOP_REG(RK3036_DSP_HACT_ST_END, 0x1fff1fff, 0), 462*4882a593Smuzhiyun .hdmi_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 22), 463*4882a593Smuzhiyun .hdmi_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 23), 464*4882a593Smuzhiyun .hdmi_pin_pol = VOP_REG(RK3036_INT_SCALER, 0x7, 4), 465*4882a593Smuzhiyun .rgb_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 24), 466*4882a593Smuzhiyun .rgb_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 25), 467*4882a593Smuzhiyun .lvds_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 26), 468*4882a593Smuzhiyun .lvds_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 27), 469*4882a593Smuzhiyun .mipi_en = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 28), 470*4882a593Smuzhiyun .mipi_dclk_pol = VOP_REG(RK3036_AXI_BUS_CTRL, 0x1, 29), 471*4882a593Smuzhiyun .vtotal_pw = VOP_REG(RK3036_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), 472*4882a593Smuzhiyun .vact_st_end = VOP_REG(RK3036_DSP_VACT_ST_END, 0x1fff1fff, 0), 473*4882a593Smuzhiyun .cfg_done = VOP_REG(RK3036_REG_CFG_DONE, 0x1, 0), 474*4882a593Smuzhiyun }; 475*4882a593Smuzhiyun 476*4882a593Smuzhiyun static const struct vop_line_flag rk3036_vop_line_flag = { 477*4882a593Smuzhiyun .line_flag_num[0] = VOP_REG(RK3036_INT_STATUS, 0xfff, 12), 478*4882a593Smuzhiyun }; 479*4882a593Smuzhiyun 480*4882a593Smuzhiyun const struct vop_data rk3036_vop = { 481*4882a593Smuzhiyun .version = VOP_VERSION(2, 2), 482*4882a593Smuzhiyun .max_output = {1920, 1080}, 483*4882a593Smuzhiyun .ctrl = &rk3036_ctrl_data, 484*4882a593Smuzhiyun .win = &rk3126_win1_data, 485*4882a593Smuzhiyun .line_flag = &rk3036_vop_line_flag, 486*4882a593Smuzhiyun .reg_len = RK3036_DSP_VACT_ST_END_F1 * 4, 487*4882a593Smuzhiyun }; 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun static const struct vop_scl_regs rk3366_lit_win_scl = { 490*4882a593Smuzhiyun .scale_yrgb_x = VOP_REG(RK3366_LIT_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0), 491*4882a593Smuzhiyun .scale_yrgb_y = VOP_REG(RK3366_LIT_WIN0_SCL_FACTOR_YRGB, 0xffff, 16), 492*4882a593Smuzhiyun .scale_cbcr_x = VOP_REG(RK3366_LIT_WIN0_SCL_FACTOR_CBR, 0xffff, 0x0), 493*4882a593Smuzhiyun .scale_cbcr_y = VOP_REG(RK3366_LIT_WIN0_SCL_FACTOR_CBR, 0xffff, 16), 494*4882a593Smuzhiyun }; 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun static const struct vop_win rk3366_win0_data = { 497*4882a593Smuzhiyun .scl = &rk3366_lit_win_scl, 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun .enable = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 0), 500*4882a593Smuzhiyun .format = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x7, 1), 501*4882a593Smuzhiyun .rb_swap = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 12), 502*4882a593Smuzhiyun .act_info = VOP_REG(RK3366_LIT_WIN0_ACT_INFO, 0xffffffff, 0), 503*4882a593Smuzhiyun .dsp_info = VOP_REG(RK3366_LIT_WIN0_DSP_INFO, 0xffffffff, 0), 504*4882a593Smuzhiyun .dsp_st = VOP_REG(RK3366_LIT_WIN0_DSP_ST, 0xffffffff, 0), 505*4882a593Smuzhiyun .yrgb_mst = VOP_REG(RK3366_LIT_WIN0_YRGB_MST0, 0xffffffff, 0), 506*4882a593Smuzhiyun .uv_mst = VOP_REG(RK3366_LIT_WIN0_CBR_MST0, 0xffffffff, 0), 507*4882a593Smuzhiyun .yrgb_vir = VOP_REG(RK3366_LIT_WIN0_VIR, 0x1fff, 0), 508*4882a593Smuzhiyun .uv_vir = VOP_REG(RK3366_LIT_WIN0_VIR, 0x1fff, 16), 509*4882a593Smuzhiyun 510*4882a593Smuzhiyun .alpha_mode = VOP_REG(RK3366_LIT_WIN0_ALPHA_CTRL, 0x1, 1), 511*4882a593Smuzhiyun .alpha_en = VOP_REG(RK3366_LIT_WIN0_ALPHA_CTRL, 0x1, 0), 512*4882a593Smuzhiyun }; 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun static const struct vop_win rk3366_win1_data = { 515*4882a593Smuzhiyun .enable = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 0), 516*4882a593Smuzhiyun .format = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x7, 4), 517*4882a593Smuzhiyun .rb_swap = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 12), 518*4882a593Smuzhiyun .dsp_info = VOP_REG(RK3366_LIT_WIN1_DSP_INFO, 0xffffffff, 0), 519*4882a593Smuzhiyun .dsp_st = VOP_REG(RK3366_LIT_WIN1_DSP_ST, 0xffffffff, 0), 520*4882a593Smuzhiyun .yrgb_mst = VOP_REG(RK3366_LIT_WIN1_MST, 0xffffffff, 0), 521*4882a593Smuzhiyun .yrgb_vir = VOP_REG(RK3366_LIT_WIN1_VIR, 0x1fff, 0), 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun .alpha_mode = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 1), 524*4882a593Smuzhiyun .alpha_en = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 0), 525*4882a593Smuzhiyun }; 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun static const struct vop_ctrl px30_ctrl_data = { 528*4882a593Smuzhiyun .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 529*4882a593Smuzhiyun .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 530*4882a593Smuzhiyun .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 531*4882a593Smuzhiyun .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 532*4882a593Smuzhiyun .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 533*4882a593Smuzhiyun .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 534*4882a593Smuzhiyun .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 535*4882a593Smuzhiyun .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), 536*4882a593Smuzhiyun .global_regdone_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 13), 537*4882a593Smuzhiyun .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 538*4882a593Smuzhiyun .dsp_layer_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 22), 539*4882a593Smuzhiyun .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), 540*4882a593Smuzhiyun .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), 541*4882a593Smuzhiyun .dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14), 542*4882a593Smuzhiyun .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 543*4882a593Smuzhiyun .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 544*4882a593Smuzhiyun .hdmi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 8), 545*4882a593Smuzhiyun .hdmi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 10), 546*4882a593Smuzhiyun .lvds_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 16), 547*4882a593Smuzhiyun .lvds_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 18), 548*4882a593Smuzhiyun .mipi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 24), 549*4882a593Smuzhiyun .mipi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 26), 550*4882a593Smuzhiyun .mipi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 25), 551*4882a593Smuzhiyun .lvds_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 17), 552*4882a593Smuzhiyun .hdmi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 9), 553*4882a593Smuzhiyun .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), 554*4882a593Smuzhiyun .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 555*4882a593Smuzhiyun .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x7, 6), 556*4882a593Smuzhiyun .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 557*4882a593Smuzhiyun .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 558*4882a593Smuzhiyun .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 559*4882a593Smuzhiyun .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 560*4882a593Smuzhiyun .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), 561*4882a593Smuzhiyun .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 562*4882a593Smuzhiyun .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 563*4882a593Smuzhiyun .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 564*4882a593Smuzhiyun .dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5), 565*4882a593Smuzhiyun .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 566*4882a593Smuzhiyun .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 567*4882a593Smuzhiyun .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 570*4882a593Smuzhiyun .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 571*4882a593Smuzhiyun .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 572*4882a593Smuzhiyun .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 573*4882a593Smuzhiyun .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 574*4882a593Smuzhiyun .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 575*4882a593Smuzhiyun .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 576*4882a593Smuzhiyun .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 577*4882a593Smuzhiyun .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 578*4882a593Smuzhiyun .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 579*4882a593Smuzhiyun .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 580*4882a593Smuzhiyun .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 581*4882a593Smuzhiyun 582*4882a593Smuzhiyun .cabc_config_mode = VOP_REG(PX30_CABC_CTRL0, 0x3, 2), 583*4882a593Smuzhiyun .cabc_calc_pixel_num = VOP_REG(PX30_CABC_CTRL0, 0x7fffff, 4), 584*4882a593Smuzhiyun .cabc_handle_en = VOP_REG(PX30_CABC_CTRL0, 0x1, 1), 585*4882a593Smuzhiyun .cabc_en = VOP_REG(PX30_CABC_CTRL0, 0x1, 0), 586*4882a593Smuzhiyun .cabc_total_num = VOP_REG(PX30_CABC_CTRL1, 0x7fffff, 4), 587*4882a593Smuzhiyun .cabc_lut_en = VOP_REG(PX30_CABC_CTRL1, 0x1, 0), 588*4882a593Smuzhiyun .cabc_stage_up_mode = VOP_REG(PX30_CABC_CTRL2, 0x1, 19), 589*4882a593Smuzhiyun .cabc_stage_up = VOP_REG(PX30_CABC_CTRL2, 0x1ff, 8), 590*4882a593Smuzhiyun .cabc_stage_down = VOP_REG(PX30_CABC_CTRL2, 0xff, 0), 591*4882a593Smuzhiyun .cabc_global_dn = VOP_REG(PX30_CABC_CTRL3, 0xff, 0), 592*4882a593Smuzhiyun .cabc_global_dn_limit_en = VOP_REG(PX30_CABC_CTRL3, 0x1, 8), 593*4882a593Smuzhiyun 594*4882a593Smuzhiyun .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 595*4882a593Smuzhiyun .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 596*4882a593Smuzhiyun .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 597*4882a593Smuzhiyun .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 598*4882a593Smuzhiyun .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 599*4882a593Smuzhiyun .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 600*4882a593Smuzhiyun .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 601*4882a593Smuzhiyun .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 602*4882a593Smuzhiyun .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 603*4882a593Smuzhiyun .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 604*4882a593Smuzhiyun .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 605*4882a593Smuzhiyun .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 606*4882a593Smuzhiyun 0xffffffff, 0), 607*4882a593Smuzhiyun }; 608*4882a593Smuzhiyun 609*4882a593Smuzhiyun static const struct vop_line_flag rk3366_vop_lite_line_flag = { 610*4882a593Smuzhiyun .line_flag_num[0] = VOP_REG(RK3366_LIT_LINE_FLAG, 0xfff, 0), 611*4882a593Smuzhiyun }; 612*4882a593Smuzhiyun 613*4882a593Smuzhiyun static const struct vop_grf_ctrl px30_grf_ctrl = { 614*4882a593Smuzhiyun .grf_dclk_inv = VOP_REG(PX30_GRF_PD_VO_CON1, 0x1, 4), 615*4882a593Smuzhiyun }; 616*4882a593Smuzhiyun 617*4882a593Smuzhiyun const struct vop_data px30_vop_lit = { 618*4882a593Smuzhiyun .version = VOP_VERSION(2, 5), 619*4882a593Smuzhiyun .max_output = {1920, 1080}, 620*4882a593Smuzhiyun .ctrl = &px30_ctrl_data, 621*4882a593Smuzhiyun .grf_ctrl = &px30_grf_ctrl, 622*4882a593Smuzhiyun .win = &rk3366_win1_data, 623*4882a593Smuzhiyun .line_flag = &rk3366_vop_lite_line_flag, 624*4882a593Smuzhiyun .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 625*4882a593Smuzhiyun }; 626*4882a593Smuzhiyun 627*4882a593Smuzhiyun const struct vop_data px30_vop_big = { 628*4882a593Smuzhiyun .version = VOP_VERSION(2, 6), 629*4882a593Smuzhiyun .max_output = {1920, 1080}, 630*4882a593Smuzhiyun .ctrl = &px30_ctrl_data, 631*4882a593Smuzhiyun .grf_ctrl = &px30_grf_ctrl, 632*4882a593Smuzhiyun .win = &rk3366_win1_data, 633*4882a593Smuzhiyun .line_flag = &rk3366_vop_lite_line_flag, 634*4882a593Smuzhiyun .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 635*4882a593Smuzhiyun }; 636*4882a593Smuzhiyun 637*4882a593Smuzhiyun static const struct vop_ctrl rk3308_ctrl_data = { 638*4882a593Smuzhiyun .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 639*4882a593Smuzhiyun .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), 640*4882a593Smuzhiyun .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), 641*4882a593Smuzhiyun .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 642*4882a593Smuzhiyun .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 643*4882a593Smuzhiyun .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 644*4882a593Smuzhiyun .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 645*4882a593Smuzhiyun .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 646*4882a593Smuzhiyun .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 647*4882a593Smuzhiyun .global_regdone_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 13), 648*4882a593Smuzhiyun .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 649*4882a593Smuzhiyun .dsp_layer_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 3), 650*4882a593Smuzhiyun .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), 651*4882a593Smuzhiyun .dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14), 652*4882a593Smuzhiyun .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 653*4882a593Smuzhiyun .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 654*4882a593Smuzhiyun .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), 655*4882a593Smuzhiyun .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 656*4882a593Smuzhiyun .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x7, 6), 657*4882a593Smuzhiyun .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 658*4882a593Smuzhiyun .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 659*4882a593Smuzhiyun .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 660*4882a593Smuzhiyun .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 661*4882a593Smuzhiyun .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), 662*4882a593Smuzhiyun .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 663*4882a593Smuzhiyun .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 664*4882a593Smuzhiyun .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 665*4882a593Smuzhiyun .dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5), 666*4882a593Smuzhiyun .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 667*4882a593Smuzhiyun .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 668*4882a593Smuzhiyun .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 669*4882a593Smuzhiyun 670*4882a593Smuzhiyun .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 671*4882a593Smuzhiyun .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 672*4882a593Smuzhiyun .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 673*4882a593Smuzhiyun .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 674*4882a593Smuzhiyun .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 675*4882a593Smuzhiyun .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 676*4882a593Smuzhiyun .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 677*4882a593Smuzhiyun .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 678*4882a593Smuzhiyun .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 679*4882a593Smuzhiyun .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 680*4882a593Smuzhiyun .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 681*4882a593Smuzhiyun .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 684*4882a593Smuzhiyun .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 685*4882a593Smuzhiyun .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 686*4882a593Smuzhiyun .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 687*4882a593Smuzhiyun .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 688*4882a593Smuzhiyun .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 689*4882a593Smuzhiyun .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 690*4882a593Smuzhiyun .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 691*4882a593Smuzhiyun .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 692*4882a593Smuzhiyun .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 693*4882a593Smuzhiyun .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 694*4882a593Smuzhiyun .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 695*4882a593Smuzhiyun 0xffffffff, 0), 696*4882a593Smuzhiyun }; 697*4882a593Smuzhiyun 698*4882a593Smuzhiyun const struct vop_data rk3308_vop = { 699*4882a593Smuzhiyun .version = VOP_VERSION(2, 7), 700*4882a593Smuzhiyun .max_output = {1920, 1080}, 701*4882a593Smuzhiyun .ctrl = &rk3308_ctrl_data, 702*4882a593Smuzhiyun .win = &rk3366_win0_data, 703*4882a593Smuzhiyun .line_flag = &rk3366_vop_lite_line_flag, 704*4882a593Smuzhiyun .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 705*4882a593Smuzhiyun }; 706*4882a593Smuzhiyun 707*4882a593Smuzhiyun static const struct vop_grf_ctrl rk1808_grf_ctrl = { 708*4882a593Smuzhiyun .grf_dclk_inv = VOP_REG(RK1808_GRF_PD_VO_CON1, 0x1, 4), 709*4882a593Smuzhiyun }; 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun const struct vop_data rk1808_vop = { 712*4882a593Smuzhiyun .version = VOP_VERSION(2, 8), 713*4882a593Smuzhiyun .max_output = {1920, 1080}, 714*4882a593Smuzhiyun .ctrl = &px30_ctrl_data, 715*4882a593Smuzhiyun .grf_ctrl = &rk1808_grf_ctrl, 716*4882a593Smuzhiyun .win = &rk3366_win1_data, 717*4882a593Smuzhiyun .line_flag = &rk3366_vop_lite_line_flag, 718*4882a593Smuzhiyun .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 719*4882a593Smuzhiyun }; 720*4882a593Smuzhiyun 721*4882a593Smuzhiyun const struct vop_data rv1108_vop = { 722*4882a593Smuzhiyun .version = VOP_VERSION(2, 4), 723*4882a593Smuzhiyun .max_output = {1920, 1080}, 724*4882a593Smuzhiyun .ctrl = &rk3308_ctrl_data, 725*4882a593Smuzhiyun .win = &rk3366_win0_data, 726*4882a593Smuzhiyun .line_flag = &rk3366_vop_lite_line_flag, 727*4882a593Smuzhiyun .reg_len = RK3366_LIT_FRC_LOWER01_0 * 4, 728*4882a593Smuzhiyun }; 729*4882a593Smuzhiyun 730*4882a593Smuzhiyun static const struct vop_win rv1126_win2_data = { 731*4882a593Smuzhiyun .gate = VOP_REG(RV1126_WIN2_CTRL0, 0x1, 0), 732*4882a593Smuzhiyun .enable = VOP_REG(RV1126_WIN2_CTRL0, 0x1, 4), 733*4882a593Smuzhiyun .format = VOP_REG(RV1126_WIN2_CTRL0, 0x3, 5), 734*4882a593Smuzhiyun .rb_swap = VOP_REG(RV1126_WIN2_CTRL0, 0x1, 20), 735*4882a593Smuzhiyun .dsp_info = VOP_REG(RV1126_WIN2_DSP_INFO0, 0x0fff0fff, 0), 736*4882a593Smuzhiyun .dsp_st = VOP_REG(RV1126_WIN2_DSP_ST0, 0x1fff1fff, 0), 737*4882a593Smuzhiyun .yrgb_mst = VOP_REG(RV1126_WIN2_MST0, 0xffffffff, 0), 738*4882a593Smuzhiyun .yrgb_vir = VOP_REG(RV1126_WIN2_VIR0_1, 0x1fff, 0), 739*4882a593Smuzhiyun }; 740*4882a593Smuzhiyun 741*4882a593Smuzhiyun static const struct vop_ctrl rv1126_ctrl_data = { 742*4882a593Smuzhiyun .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 743*4882a593Smuzhiyun .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), 744*4882a593Smuzhiyun .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), 745*4882a593Smuzhiyun .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 746*4882a593Smuzhiyun .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 747*4882a593Smuzhiyun .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 748*4882a593Smuzhiyun .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 749*4882a593Smuzhiyun .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 750*4882a593Smuzhiyun .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 751*4882a593Smuzhiyun .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), 752*4882a593Smuzhiyun .global_regdone_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 13), 753*4882a593Smuzhiyun .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 754*4882a593Smuzhiyun .dsp_layer_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xff, 22), 755*4882a593Smuzhiyun .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), 756*4882a593Smuzhiyun .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), 757*4882a593Smuzhiyun .dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14), 758*4882a593Smuzhiyun .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 759*4882a593Smuzhiyun .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 760*4882a593Smuzhiyun .hdmi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 8), 761*4882a593Smuzhiyun .hdmi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 10), 762*4882a593Smuzhiyun .lvds_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 16), 763*4882a593Smuzhiyun .lvds_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 18), 764*4882a593Smuzhiyun .mipi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 24), 765*4882a593Smuzhiyun .mipi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 26), 766*4882a593Smuzhiyun .mipi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 25), 767*4882a593Smuzhiyun .lvds_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 17), 768*4882a593Smuzhiyun .hdmi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 9), 769*4882a593Smuzhiyun .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), 770*4882a593Smuzhiyun .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 8), 771*4882a593Smuzhiyun .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 772*4882a593Smuzhiyun .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 773*4882a593Smuzhiyun .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 774*4882a593Smuzhiyun .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 775*4882a593Smuzhiyun .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 776*4882a593Smuzhiyun .dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5), 777*4882a593Smuzhiyun .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 778*4882a593Smuzhiyun .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 779*4882a593Smuzhiyun .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 780*4882a593Smuzhiyun .dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5), 781*4882a593Smuzhiyun .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 782*4882a593Smuzhiyun .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 783*4882a593Smuzhiyun .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 784*4882a593Smuzhiyun 785*4882a593Smuzhiyun .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 786*4882a593Smuzhiyun .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 787*4882a593Smuzhiyun .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 788*4882a593Smuzhiyun .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 789*4882a593Smuzhiyun .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 790*4882a593Smuzhiyun .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 791*4882a593Smuzhiyun .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 792*4882a593Smuzhiyun .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 793*4882a593Smuzhiyun .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 794*4882a593Smuzhiyun .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 795*4882a593Smuzhiyun .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 796*4882a593Smuzhiyun .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 799*4882a593Smuzhiyun .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 800*4882a593Smuzhiyun .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 801*4882a593Smuzhiyun .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 802*4882a593Smuzhiyun .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 803*4882a593Smuzhiyun .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 804*4882a593Smuzhiyun .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 805*4882a593Smuzhiyun .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 806*4882a593Smuzhiyun .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 807*4882a593Smuzhiyun .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 808*4882a593Smuzhiyun .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 809*4882a593Smuzhiyun .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 810*4882a593Smuzhiyun 0xffffffff, 0), 811*4882a593Smuzhiyun }; 812*4882a593Smuzhiyun 813*4882a593Smuzhiyun static const struct vop_grf_ctrl rv1126_grf_ctrl = { 814*4882a593Smuzhiyun .grf_dclk_inv = VOP_REG(0x1026c, 0x1, 2), 815*4882a593Smuzhiyun }; 816*4882a593Smuzhiyun 817*4882a593Smuzhiyun const struct vop_data rv1126_vop = { 818*4882a593Smuzhiyun .version = VOP_VERSION(2, 7), 819*4882a593Smuzhiyun .max_output = {1920, 1080}, 820*4882a593Smuzhiyun .ctrl = &rv1126_ctrl_data, 821*4882a593Smuzhiyun .grf_ctrl = &rv1126_grf_ctrl, 822*4882a593Smuzhiyun .win = &rv1126_win2_data, 823*4882a593Smuzhiyun .line_flag = &rk3366_vop_lite_line_flag, 824*4882a593Smuzhiyun .reg_len = RK3366_LIT_FLAG_REG * 4, 825*4882a593Smuzhiyun }; 826*4882a593Smuzhiyun 827*4882a593Smuzhiyun static const struct vop_ctrl rv1106_ctrl_data = { 828*4882a593Smuzhiyun .standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1), 829*4882a593Smuzhiyun .axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16), 830*4882a593Smuzhiyun .axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12), 831*4882a593Smuzhiyun .htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0), 832*4882a593Smuzhiyun .hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0), 833*4882a593Smuzhiyun .vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0), 834*4882a593Smuzhiyun .vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0), 835*4882a593Smuzhiyun .vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0), 836*4882a593Smuzhiyun .vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0), 837*4882a593Smuzhiyun .dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0), 838*4882a593Smuzhiyun .auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0), 839*4882a593Smuzhiyun .overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4), 840*4882a593Smuzhiyun .core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13), 841*4882a593Smuzhiyun .dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14), 842*4882a593Smuzhiyun .rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0), 843*4882a593Smuzhiyun .rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1), 844*4882a593Smuzhiyun .rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2), 845*4882a593Smuzhiyun .dither_down = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 8), 846*4882a593Smuzhiyun .dither_up = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2), 847*4882a593Smuzhiyun .dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9), 848*4882a593Smuzhiyun .dsp_bg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 9), 849*4882a593Smuzhiyun .dsp_rb_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 11), 850*4882a593Smuzhiyun .dsp_rg_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 12), 851*4882a593Smuzhiyun .dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15), 852*4882a593Smuzhiyun .dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14), 853*4882a593Smuzhiyun .dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3), 854*4882a593Smuzhiyun .out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16), 855*4882a593Smuzhiyun .dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0), 856*4882a593Smuzhiyun .cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0), 857*4882a593Smuzhiyun 858*4882a593Smuzhiyun .bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0), 859*4882a593Smuzhiyun .bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1), 860*4882a593Smuzhiyun .bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2), 861*4882a593Smuzhiyun .bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4), 862*4882a593Smuzhiyun .bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6), 863*4882a593Smuzhiyun .bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7), 864*4882a593Smuzhiyun .bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0), 865*4882a593Smuzhiyun .bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0), 866*4882a593Smuzhiyun .bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8), 867*4882a593Smuzhiyun .bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20), 868*4882a593Smuzhiyun .bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0), 869*4882a593Smuzhiyun .bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16), 870*4882a593Smuzhiyun 871*4882a593Smuzhiyun .mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0), 872*4882a593Smuzhiyun .mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6), 873*4882a593Smuzhiyun .mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10), 874*4882a593Smuzhiyun .mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16), 875*4882a593Smuzhiyun .mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20), 876*4882a593Smuzhiyun .mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26), 877*4882a593Smuzhiyun .mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27), 878*4882a593Smuzhiyun .mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28), 879*4882a593Smuzhiyun .mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29), 880*4882a593Smuzhiyun .mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30), 881*4882a593Smuzhiyun .mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31), 882*4882a593Smuzhiyun .mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT, 883*4882a593Smuzhiyun 0xffffffff, 0), 884*4882a593Smuzhiyun .bt1120_yc_swap = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 30), 885*4882a593Smuzhiyun .bt1120_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 31), 886*4882a593Smuzhiyun .bt656_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 6), 887*4882a593Smuzhiyun }; 888*4882a593Smuzhiyun 889*4882a593Smuzhiyun static const struct vop_grf_ctrl rv1106_grf_ctrl = { 890*4882a593Smuzhiyun .grf_dclk_inv = VOP_REG(0x1000c, 0x1, 2), 891*4882a593Smuzhiyun }; 892*4882a593Smuzhiyun 893*4882a593Smuzhiyun static const struct vop_win rv1106_win1_data = { 894*4882a593Smuzhiyun .enable = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 0), 895*4882a593Smuzhiyun .format = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x7, 4), 896*4882a593Smuzhiyun .interlace_read = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 8), 897*4882a593Smuzhiyun .rb_swap = VOP_REG(RK3366_LIT_WIN1_CTRL0, 0x1, 12), 898*4882a593Smuzhiyun .dsp_info = VOP_REG(RK3366_LIT_WIN1_DSP_INFO, 0x0fff0fff, 0), 899*4882a593Smuzhiyun .dsp_st = VOP_REG(RK3366_LIT_WIN1_DSP_ST, 0xffffffff, 0), 900*4882a593Smuzhiyun .yrgb_mst = VOP_REG(RK3366_LIT_WIN1_MST, 0xffffffff, 0), 901*4882a593Smuzhiyun .yrgb_vir = VOP_REG(RK3366_LIT_WIN1_VIR, 0x1fff, 0), 902*4882a593Smuzhiyun 903*4882a593Smuzhiyun .alpha_mode = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 1), 904*4882a593Smuzhiyun .alpha_en = VOP_REG(RK3366_LIT_WIN1_ALPHA_CTRL, 0x1, 0), 905*4882a593Smuzhiyun }; 906*4882a593Smuzhiyun 907*4882a593Smuzhiyun static const struct vop_line_flag rv1106_vop_lite_line_flag = { 908*4882a593Smuzhiyun .line_flag_num[0] = VOP_REG(RK3366_LIT_LINE_FLAG, 0xfff, 0), 909*4882a593Smuzhiyun .line_flag_num[1] = VOP_REG(RK3366_LIT_LINE_FLAG, 0xfff, 16), 910*4882a593Smuzhiyun }; 911*4882a593Smuzhiyun 912*4882a593Smuzhiyun const struct vop_data rv1106_vop = { 913*4882a593Smuzhiyun .version = VOP_VERSION(2, 12), 914*4882a593Smuzhiyun .max_output = {1280, 1280}, 915*4882a593Smuzhiyun .ctrl = &rv1106_ctrl_data, 916*4882a593Smuzhiyun .grf_ctrl = &rv1106_grf_ctrl, 917*4882a593Smuzhiyun .win = &rv1106_win1_data, 918*4882a593Smuzhiyun .line_flag = &rv1106_vop_lite_line_flag, 919*4882a593Smuzhiyun .reg_len = RK3366_LIT_FLAG_REG * 4, 920*4882a593Smuzhiyun }; 921