xref: /OK3568_Linux_fs/u-boot/drivers/video/drm/rockchip_vop_reg.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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