xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) Rockchip Electronics Co.Ltd
4*4882a593Smuzhiyun  * Author: Andy Yan <andy.yan@rock-chips.com>
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <linux/kernel.h>
8*4882a593Smuzhiyun #include <linux/component.h>
9*4882a593Smuzhiyun #include <linux/of.h>
10*4882a593Smuzhiyun #include <linux/platform_device.h>
11*4882a593Smuzhiyun #include <dt-bindings/display/rockchip_vop.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <drm/drm_fourcc.h>
14*4882a593Smuzhiyun #include <drm/drm_print.h>
15*4882a593Smuzhiyun #include "rockchip_drm_vop.h"
16*4882a593Smuzhiyun #include "rockchip_vop_reg.h"
17*4882a593Smuzhiyun #include "rockchip_drm_drv.h"
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define _VOP_REG(off, _mask, _shift, _write_mask) \
20*4882a593Smuzhiyun 		{ \
21*4882a593Smuzhiyun 		 .offset = off, \
22*4882a593Smuzhiyun 		 .mask = _mask, \
23*4882a593Smuzhiyun 		 .shift = _shift, \
24*4882a593Smuzhiyun 		 .write_mask = _write_mask, \
25*4882a593Smuzhiyun 		}
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #define VOP_REG(off, _mask, _shift) \
28*4882a593Smuzhiyun 		_VOP_REG(off, _mask, _shift, false)
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #define VOP_REG_MASK(off, _mask, s) \
31*4882a593Smuzhiyun 		_VOP_REG(off, _mask, s, true)
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun static const uint32_t formats_for_cluster[] = {
34*4882a593Smuzhiyun 	DRM_FORMAT_XRGB2101010,
35*4882a593Smuzhiyun 	DRM_FORMAT_ARGB2101010,
36*4882a593Smuzhiyun 	DRM_FORMAT_XBGR2101010,
37*4882a593Smuzhiyun 	DRM_FORMAT_ABGR2101010,
38*4882a593Smuzhiyun 	DRM_FORMAT_XRGB8888,
39*4882a593Smuzhiyun 	DRM_FORMAT_ARGB8888,
40*4882a593Smuzhiyun 	DRM_FORMAT_XBGR8888,
41*4882a593Smuzhiyun 	DRM_FORMAT_ABGR8888,
42*4882a593Smuzhiyun 	DRM_FORMAT_RGB888,
43*4882a593Smuzhiyun 	DRM_FORMAT_BGR888,
44*4882a593Smuzhiyun 	DRM_FORMAT_RGB565,
45*4882a593Smuzhiyun 	DRM_FORMAT_BGR565,
46*4882a593Smuzhiyun 	DRM_FORMAT_YUV420_8BIT, /* yuv420_8bit non-Linear mode only */
47*4882a593Smuzhiyun 	DRM_FORMAT_YUV420_10BIT, /* yuv420_10bit non-Linear mode only */
48*4882a593Smuzhiyun 	DRM_FORMAT_YUYV, /* yuv422_8bit non-Linear mode only*/
49*4882a593Smuzhiyun 	DRM_FORMAT_Y210, /* yuv422_10bit non-Linear mode only */
50*4882a593Smuzhiyun };
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun static const uint32_t formats_for_vop3_cluster[] = {
53*4882a593Smuzhiyun 	DRM_FORMAT_XRGB2101010,
54*4882a593Smuzhiyun 	DRM_FORMAT_ARGB2101010,
55*4882a593Smuzhiyun 	DRM_FORMAT_XBGR2101010,
56*4882a593Smuzhiyun 	DRM_FORMAT_ABGR2101010,
57*4882a593Smuzhiyun 	DRM_FORMAT_XRGB8888,
58*4882a593Smuzhiyun 	DRM_FORMAT_ARGB8888,
59*4882a593Smuzhiyun 	DRM_FORMAT_XBGR8888,
60*4882a593Smuzhiyun 	DRM_FORMAT_ABGR8888,
61*4882a593Smuzhiyun 	DRM_FORMAT_RGB888,
62*4882a593Smuzhiyun 	DRM_FORMAT_BGR888,
63*4882a593Smuzhiyun 	DRM_FORMAT_RGB565,
64*4882a593Smuzhiyun 	DRM_FORMAT_BGR565,
65*4882a593Smuzhiyun 	DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */
66*4882a593Smuzhiyun 	DRM_FORMAT_NV21, /* yvu420_8bit linear mode, 2 plane */
67*4882a593Smuzhiyun 	DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */
68*4882a593Smuzhiyun 	DRM_FORMAT_NV61, /* yvu422_8bit linear mode, 2 plane */
69*4882a593Smuzhiyun 	DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */
70*4882a593Smuzhiyun 	DRM_FORMAT_NV42, /* yvu444_8bit linear mode, 2 plane */
71*4882a593Smuzhiyun 	DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */
72*4882a593Smuzhiyun #ifdef CONFIG_NO_GKI
73*4882a593Smuzhiyun 	DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */
74*4882a593Smuzhiyun 	DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */
75*4882a593Smuzhiyun #endif
76*4882a593Smuzhiyun 	DRM_FORMAT_YUV420_8BIT, /* yuv420_8bit non-Linear mode only */
77*4882a593Smuzhiyun 	DRM_FORMAT_YUV420_10BIT, /* yuv420_10bit non-Linear mode only */
78*4882a593Smuzhiyun 	DRM_FORMAT_YUYV, /* yuv422_8bit non-Linear mode only*/
79*4882a593Smuzhiyun 	DRM_FORMAT_Y210, /* yuv422_10bit non-Linear mode only */
80*4882a593Smuzhiyun };
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun static const uint32_t formats_for_esmart[] = {
83*4882a593Smuzhiyun 	DRM_FORMAT_XRGB8888,
84*4882a593Smuzhiyun 	DRM_FORMAT_ARGB8888,
85*4882a593Smuzhiyun 	DRM_FORMAT_XBGR8888,
86*4882a593Smuzhiyun 	DRM_FORMAT_ABGR8888,
87*4882a593Smuzhiyun 	DRM_FORMAT_RGB888,
88*4882a593Smuzhiyun 	DRM_FORMAT_BGR888,
89*4882a593Smuzhiyun 	DRM_FORMAT_RGB565,
90*4882a593Smuzhiyun 	DRM_FORMAT_BGR565,
91*4882a593Smuzhiyun 	DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */
92*4882a593Smuzhiyun 	DRM_FORMAT_NV21, /* yvu420_8bit linear mode, 2 plane */
93*4882a593Smuzhiyun 	DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */
94*4882a593Smuzhiyun 	DRM_FORMAT_NV61, /* yvu422_8bit linear mode, 2 plane */
95*4882a593Smuzhiyun 	DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */
96*4882a593Smuzhiyun 	DRM_FORMAT_NV42, /* yvu444_8bit linear mode, 2 plane */
97*4882a593Smuzhiyun 	DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */
98*4882a593Smuzhiyun #ifdef CONFIG_NO_GKI
99*4882a593Smuzhiyun 	DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */
100*4882a593Smuzhiyun 	DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */
101*4882a593Smuzhiyun #endif
102*4882a593Smuzhiyun 	DRM_FORMAT_YVYU, /* yuv422_8bit[YVYU] linear mode */
103*4882a593Smuzhiyun 	DRM_FORMAT_VYUY, /* yuv422_8bit[VYUY] linear mode */
104*4882a593Smuzhiyun 	DRM_FORMAT_YUYV, /* yuv422_8bit[YUYV] linear mode */
105*4882a593Smuzhiyun 	DRM_FORMAT_UYVY, /* yuv422_8bit[UYVY] linear mode */
106*4882a593Smuzhiyun };
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /* RK356x can't support uv swap for YUYV and UYVY */
109*4882a593Smuzhiyun static const uint32_t formats_for_rk356x_esmart[] = {
110*4882a593Smuzhiyun 	DRM_FORMAT_XRGB8888,
111*4882a593Smuzhiyun 	DRM_FORMAT_ARGB8888,
112*4882a593Smuzhiyun 	DRM_FORMAT_XBGR8888,
113*4882a593Smuzhiyun 	DRM_FORMAT_ABGR8888,
114*4882a593Smuzhiyun 	DRM_FORMAT_RGB888,
115*4882a593Smuzhiyun 	DRM_FORMAT_BGR888,
116*4882a593Smuzhiyun 	DRM_FORMAT_RGB565,
117*4882a593Smuzhiyun 	DRM_FORMAT_BGR565,
118*4882a593Smuzhiyun 	DRM_FORMAT_NV12, /* yuv420_8bit linear mode, 2 plane */
119*4882a593Smuzhiyun 	DRM_FORMAT_NV16, /* yuv422_8bit linear mode, 2 plane */
120*4882a593Smuzhiyun 	DRM_FORMAT_NV24, /* yuv444_8bit linear mode, 2 plane */
121*4882a593Smuzhiyun 	DRM_FORMAT_NV15, /* yuv420_10bit linear mode, 2 plane, no padding */
122*4882a593Smuzhiyun #ifdef CONFIG_NO_GKI
123*4882a593Smuzhiyun 	DRM_FORMAT_NV20, /* yuv422_10bit linear mode, 2 plane, no padding */
124*4882a593Smuzhiyun 	DRM_FORMAT_NV30, /* yuv444_10bit linear mode, 2 plane, no padding */
125*4882a593Smuzhiyun #endif
126*4882a593Smuzhiyun 	DRM_FORMAT_YUYV, /* yuv422_8bit[YUYV] linear mode */
127*4882a593Smuzhiyun 	DRM_FORMAT_UYVY, /* yuv422_8bit[UYVY] linear mode */
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun static const uint32_t formats_for_smart[] = {
131*4882a593Smuzhiyun 	DRM_FORMAT_XRGB8888,
132*4882a593Smuzhiyun 	DRM_FORMAT_ARGB8888,
133*4882a593Smuzhiyun 	DRM_FORMAT_XBGR8888,
134*4882a593Smuzhiyun 	DRM_FORMAT_ABGR8888,
135*4882a593Smuzhiyun 	DRM_FORMAT_RGB888,
136*4882a593Smuzhiyun 	DRM_FORMAT_BGR888,
137*4882a593Smuzhiyun 	DRM_FORMAT_RGB565,
138*4882a593Smuzhiyun 	DRM_FORMAT_BGR565,
139*4882a593Smuzhiyun };
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun static const u32 formats_wb[] = {
142*4882a593Smuzhiyun 	DRM_FORMAT_BGR888,
143*4882a593Smuzhiyun 	DRM_FORMAT_ARGB8888,
144*4882a593Smuzhiyun 	DRM_FORMAT_RGB565,
145*4882a593Smuzhiyun 	DRM_FORMAT_NV12,
146*4882a593Smuzhiyun };
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun static const uint64_t format_modifiers[] = {
149*4882a593Smuzhiyun 	DRM_FORMAT_MOD_LINEAR,
150*4882a593Smuzhiyun 	DRM_FORMAT_MOD_INVALID,
151*4882a593Smuzhiyun };
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun static const uint64_t format_modifiers_afbc[] = {
154*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16),
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
157*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
160*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR),
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
163*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR),
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
166*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
167*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
170*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR |
171*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
174*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
175*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR),
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
178*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
179*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR |
180*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun 	/* SPLIT mandates SPARSE, RGB modes mandates YTR */
183*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
184*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
185*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE |
186*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPLIT),
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun 	DRM_FORMAT_MOD_LINEAR,
189*4882a593Smuzhiyun 	DRM_FORMAT_MOD_INVALID,
190*4882a593Smuzhiyun };
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun static const uint64_t format_modifiers_afbc_no_linear_mode[] = {
193*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16),
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
196*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
199*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR),
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
202*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR),
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
205*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
206*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
209*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR |
210*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
213*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
214*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR),
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
217*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
218*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR |
219*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun 	/* SPLIT mandates SPARSE, RGB modes mandates YTR */
222*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
223*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
224*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE |
225*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPLIT),
226*4882a593Smuzhiyun 	DRM_FORMAT_MOD_INVALID,
227*4882a593Smuzhiyun };
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun static const uint64_t format_modifiers_afbc_tiled[] = {
230*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16),
231*4882a593Smuzhiyun 
232*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
233*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
236*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR),
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
239*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR),
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
242*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
243*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
246*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR |
247*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
250*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
251*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR),
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
254*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
255*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_CBR |
256*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE),
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun 	/* SPLIT mandates SPARSE, RGB modes mandates YTR */
259*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 |
260*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_YTR |
261*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPARSE |
262*4882a593Smuzhiyun 				AFBC_FORMAT_MOD_SPLIT),
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ROCKCHIP_TILED(ROCKCHIP_TILED_BLOCK_SIZE_8x8),
265*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ROCKCHIP_TILED(ROCKCHIP_TILED_BLOCK_SIZE_4x4_MODE0),
266*4882a593Smuzhiyun 	DRM_FORMAT_MOD_ROCKCHIP_TILED(ROCKCHIP_TILED_BLOCK_SIZE_4x4_MODE1),
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun 	DRM_FORMAT_MOD_LINEAR,
269*4882a593Smuzhiyun 	DRM_FORMAT_MOD_INVALID,
270*4882a593Smuzhiyun };
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun static const u32 sdr2hdr_bt1886eotf_yn_for_hlg_hdr[65] = {
273*4882a593Smuzhiyun 	0,
274*4882a593Smuzhiyun 	1,	7,	17,	35,
275*4882a593Smuzhiyun 	60,	92,	134,	184,
276*4882a593Smuzhiyun 	244,	315,	396,	487,
277*4882a593Smuzhiyun 	591,	706,	833,	915,
278*4882a593Smuzhiyun 	1129,	1392,	1717,	2118,
279*4882a593Smuzhiyun 	2352,	2612,	2900,	3221,
280*4882a593Smuzhiyun 	3577,	3972,	4411,	4899,
281*4882a593Smuzhiyun 	5441,	6042,	6710,	7452,
282*4882a593Smuzhiyun 	7853,	8276,	8721,	9191,
283*4882a593Smuzhiyun 	9685,	10207,	10756,	11335,
284*4882a593Smuzhiyun 	11945,	12588,	13266,	13980,
285*4882a593Smuzhiyun 	14732,	15525,	16361,	17241,
286*4882a593Smuzhiyun 	17699,	18169,	18652,	19147,
287*4882a593Smuzhiyun 	19656,	20178,	20714,	21264,
288*4882a593Smuzhiyun 	21829,	22408,	23004,	23615,
289*4882a593Smuzhiyun 	24242,	24886,	25547,	26214,
290*4882a593Smuzhiyun };
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun static const u32 sdr2hdr_bt1886eotf_yn_for_bt2020[65] = {
293*4882a593Smuzhiyun 	0,
294*4882a593Smuzhiyun 	1820,   3640,   5498,   7674,
295*4882a593Smuzhiyun 	10256,  13253,  16678,  20539,
296*4882a593Smuzhiyun 	24847,  29609,  34833,  40527,
297*4882a593Smuzhiyun 	46699,  53354,  60499,  68141,
298*4882a593Smuzhiyun 	76285,  84937,  94103,  103787,
299*4882a593Smuzhiyun 	108825, 113995, 119296, 124731,
300*4882a593Smuzhiyun 	130299, 136001, 141837, 147808,
301*4882a593Smuzhiyun 	153915, 160158, 166538, 173055,
302*4882a593Smuzhiyun 	176365, 179709, 183089, 186502,
303*4882a593Smuzhiyun 	189951, 193434, 196952, 200505,
304*4882a593Smuzhiyun 	204093, 207715, 211373, 215066,
305*4882a593Smuzhiyun 	218795, 222558, 226357, 230191,
306*4882a593Smuzhiyun 	232121, 234060, 236008, 237965,
307*4882a593Smuzhiyun 	239931, 241906, 243889, 245882,
308*4882a593Smuzhiyun 	247883, 249894, 251913, 253941,
309*4882a593Smuzhiyun 	255978, 258024, 260079, 262143,
310*4882a593Smuzhiyun };
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun static u32 sdr2hdr_bt1886eotf_yn_for_hdr[65] = {
313*4882a593Smuzhiyun 	/* dst_range 425int */
314*4882a593Smuzhiyun 	0,
315*4882a593Smuzhiyun 	5,     21,    49,     91,
316*4882a593Smuzhiyun 	150,   225,   320,   434,
317*4882a593Smuzhiyun 	569,   726,   905,   1108,
318*4882a593Smuzhiyun 	1336,  1588,  1866,  2171,
319*4882a593Smuzhiyun 	2502,  2862,  3250,  3667,
320*4882a593Smuzhiyun 	3887,  4114,  4349,  4591,
321*4882a593Smuzhiyun 	4841,  5099,  5364,  5638,
322*4882a593Smuzhiyun 	5920,  6209,  6507,  6812,
323*4882a593Smuzhiyun 	6968,  7126,  7287,  7449,
324*4882a593Smuzhiyun 	7613,  7779,  7948,  8118,
325*4882a593Smuzhiyun 	8291,  8466,  8643,  8822,
326*4882a593Smuzhiyun 	9003,  9187,  9372,  9560,
327*4882a593Smuzhiyun 	9655,  9750,  9846,  9942,
328*4882a593Smuzhiyun 	10039, 10136, 10234, 10333,
329*4882a593Smuzhiyun 	10432, 10531, 10631, 10732,
330*4882a593Smuzhiyun 	10833, 10935, 11038, 11141,
331*4882a593Smuzhiyun };
332*4882a593Smuzhiyun 
333*4882a593Smuzhiyun static const u32 sdr2hdr_st2084oetf_yn_for_hlg_hdr[65] = {
334*4882a593Smuzhiyun 	0,
335*4882a593Smuzhiyun 	668,	910,	1217,	1600,
336*4882a593Smuzhiyun 	2068,	2384,	2627,	3282,
337*4882a593Smuzhiyun 	3710,	4033,	4879,	5416,
338*4882a593Smuzhiyun 	5815,	6135,	6401,	6631,
339*4882a593Smuzhiyun 	6833,	7176,	7462,	7707,
340*4882a593Smuzhiyun 	7921,	8113,	8285,	8442,
341*4882a593Smuzhiyun 	8586,	8843,	9068,	9268,
342*4882a593Smuzhiyun 	9447,	9760,	10027,	10259,
343*4882a593Smuzhiyun 	10465,	10650,	10817,	10971,
344*4882a593Smuzhiyun 	11243,	11480,	11689,	11877,
345*4882a593Smuzhiyun 	12047,	12202,	12345,	12477,
346*4882a593Smuzhiyun 	12601,	12716,	12926,	13115,
347*4882a593Smuzhiyun 	13285,	13441,	13583,	13716,
348*4882a593Smuzhiyun 	13839,	13953,	14163,	14350,
349*4882a593Smuzhiyun 	14519,	14673,	14945,	15180,
350*4882a593Smuzhiyun 	15570,	15887,	16153,	16383,
351*4882a593Smuzhiyun };
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun static const u32 sdr2hdr_st2084oetf_yn_for_bt2020[65] = {
354*4882a593Smuzhiyun 	0,
355*4882a593Smuzhiyun 	0,     0,     1,     2,
356*4882a593Smuzhiyun 	4,     6,     9,     18,
357*4882a593Smuzhiyun 	27,    36,    72,    108,
358*4882a593Smuzhiyun 	144,   180,   216,   252,
359*4882a593Smuzhiyun 	288,   360,   432,   504,
360*4882a593Smuzhiyun 	576,   648,   720,   792,
361*4882a593Smuzhiyun 	864,   1008,  1152,  1296,
362*4882a593Smuzhiyun 	1444,  1706,  1945,  2166,
363*4882a593Smuzhiyun 	2372,  2566,  2750,  2924,
364*4882a593Smuzhiyun 	3251,  3553,  3834,  4099,
365*4882a593Smuzhiyun 	4350,  4588,  4816,  5035,
366*4882a593Smuzhiyun 	5245,  5447,  5832,  6194,
367*4882a593Smuzhiyun 	6536,  6862,  7173,  7471,
368*4882a593Smuzhiyun 	7758,  8035,  8560,  9055,
369*4882a593Smuzhiyun 	9523,  9968,  10800, 11569,
370*4882a593Smuzhiyun 	12963, 14210, 15347, 16383,
371*4882a593Smuzhiyun };
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun static u32 sdr2hdr_st2084oetf_yn_for_hdr[65] = {
374*4882a593Smuzhiyun 	0,
375*4882a593Smuzhiyun 	281,   418,   610,   871,
376*4882a593Smuzhiyun 	1217,  1464,  1662,  2218,
377*4882a593Smuzhiyun 	2599,  2896,  3699,  4228,
378*4882a593Smuzhiyun 	4628,  4953,  5227,  5466,
379*4882a593Smuzhiyun 	5676,  6038,  6341,  6602,
380*4882a593Smuzhiyun 	6833,  7039,  7226,  7396,
381*4882a593Smuzhiyun 	7554,  7835,  8082,  8302,
382*4882a593Smuzhiyun 	8501,  8848,  9145,  9405,
383*4882a593Smuzhiyun 	9635,  9842,  10031, 10204,
384*4882a593Smuzhiyun 	10512, 10779, 11017, 11230,
385*4882a593Smuzhiyun 	11423, 11599, 11762, 11913,
386*4882a593Smuzhiyun 	12054, 12185, 12426, 12641,
387*4882a593Smuzhiyun 	12835, 13013, 13177, 13328,
388*4882a593Smuzhiyun 	13469, 13600, 13840, 14055,
389*4882a593Smuzhiyun 	14248, 14425, 14737, 15006,
390*4882a593Smuzhiyun 	15453, 15816, 16121, 16383,
391*4882a593Smuzhiyun };
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun static const u32 sdr2hdr_st2084oetf_dxn_pow2[64] = {
394*4882a593Smuzhiyun 	0,  0,  1,  2,
395*4882a593Smuzhiyun 	3,  3,  3,  5,
396*4882a593Smuzhiyun 	5,  5,  7,  7,
397*4882a593Smuzhiyun 	7,  7,  7,  7,
398*4882a593Smuzhiyun 	7,  8,  8,  8,
399*4882a593Smuzhiyun 	8,  8,  8,  8,
400*4882a593Smuzhiyun 	8,  9,  9,  9,
401*4882a593Smuzhiyun 	9,  10, 10, 10,
402*4882a593Smuzhiyun 	10, 10, 10, 10,
403*4882a593Smuzhiyun 	11, 11, 11, 11,
404*4882a593Smuzhiyun 	11, 11, 11, 11,
405*4882a593Smuzhiyun 	11, 11, 12, 12,
406*4882a593Smuzhiyun 	12, 12, 12, 12,
407*4882a593Smuzhiyun 	12, 12, 13, 13,
408*4882a593Smuzhiyun 	13, 13, 14, 14,
409*4882a593Smuzhiyun 	15, 15, 15, 15,
410*4882a593Smuzhiyun };
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun static const u32 sdr2hdr_st2084oetf_dxn[64] = {
413*4882a593Smuzhiyun 	1,     1,     2,     4,
414*4882a593Smuzhiyun 	8,     8,     8,     32,
415*4882a593Smuzhiyun 	32,    32,    128,   128,
416*4882a593Smuzhiyun 	128,   128,   128,   128,
417*4882a593Smuzhiyun 	128,   256,   256,   256,
418*4882a593Smuzhiyun 	256,   256,   256,   256,
419*4882a593Smuzhiyun 	256,   512,   512,   512,
420*4882a593Smuzhiyun 	512,   1024,  1024,  1024,
421*4882a593Smuzhiyun 	1024,  1024,  1024,  1024,
422*4882a593Smuzhiyun 	2048,  2048,  2048,  2048,
423*4882a593Smuzhiyun 	2048,  2048,  2048,  2048,
424*4882a593Smuzhiyun 	2048,  2048,  4096,  4096,
425*4882a593Smuzhiyun 	4096,  4096,  4096,  4096,
426*4882a593Smuzhiyun 	4096,  4096,  8192,  8192,
427*4882a593Smuzhiyun 	8192,  8192,  16384, 16384,
428*4882a593Smuzhiyun 	32768, 32768, 32768, 32768,
429*4882a593Smuzhiyun };
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun static const u32 sdr2hdr_st2084oetf_xn[63] = {
432*4882a593Smuzhiyun 	1,      2,      4,      8,
433*4882a593Smuzhiyun 	16,     24,     32,     64,
434*4882a593Smuzhiyun 	96,     128,    256,    384,
435*4882a593Smuzhiyun 	512,    640,    768,    896,
436*4882a593Smuzhiyun 	1024,   1280,   1536,   1792,
437*4882a593Smuzhiyun 	2048,   2304,   2560,   2816,
438*4882a593Smuzhiyun 	3072,   3584,   4096,   4608,
439*4882a593Smuzhiyun 	5120,   6144,   7168,   8192,
440*4882a593Smuzhiyun 	9216,   10240,  11264,  12288,
441*4882a593Smuzhiyun 	14336,  16384,  18432,  20480,
442*4882a593Smuzhiyun 	22528,  24576,  26624,  28672,
443*4882a593Smuzhiyun 	30720,  32768,  36864,  40960,
444*4882a593Smuzhiyun 	45056,  49152,  53248,  57344,
445*4882a593Smuzhiyun 	61440,  65536,  73728,  81920,
446*4882a593Smuzhiyun 	90112,  98304,  114688, 131072,
447*4882a593Smuzhiyun 	163840, 196608, 229376,
448*4882a593Smuzhiyun };
449*4882a593Smuzhiyun 
450*4882a593Smuzhiyun static u32 hdr2sdr_eetf_yn[33] = {
451*4882a593Smuzhiyun 	1716,
452*4882a593Smuzhiyun 	1880,	2067,	2277,	2508,
453*4882a593Smuzhiyun 	2758,	3026,	3310,	3609,
454*4882a593Smuzhiyun 	3921,	4246,	4581,	4925,
455*4882a593Smuzhiyun 	5279,	5640,	6007,	6380,
456*4882a593Smuzhiyun 	6758,	7140,	7526,	7914,
457*4882a593Smuzhiyun 	8304,	8694,	9074,	9438,
458*4882a593Smuzhiyun 	9779,	10093,	10373,	10615,
459*4882a593Smuzhiyun 	10812,	10960,	11053,	11084,
460*4882a593Smuzhiyun };
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun static u32 hdr2sdr_bt1886oetf_yn[33] = {
463*4882a593Smuzhiyun 	0,
464*4882a593Smuzhiyun 	0,	0,	0,	0,
465*4882a593Smuzhiyun 	0,	0,	0,	314,
466*4882a593Smuzhiyun 	746,	1323,	2093,	2657,
467*4882a593Smuzhiyun 	3120,	3519,	3874,	4196,
468*4882a593Smuzhiyun 	4492,	5024,	5498,	5928,
469*4882a593Smuzhiyun 	6323,	7034,	7666,	8239,
470*4882a593Smuzhiyun 	8766,	9716,	10560,	11325,
471*4882a593Smuzhiyun 	12029,	13296,	14422,	16383,
472*4882a593Smuzhiyun };
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun static const u32 hdr2sdr_sat_yn[9] = {
475*4882a593Smuzhiyun 	0,
476*4882a593Smuzhiyun 	1792, 3584, 3472, 2778,
477*4882a593Smuzhiyun 	2083, 1389, 694,  0,
478*4882a593Smuzhiyun };
479*4882a593Smuzhiyun 
480*4882a593Smuzhiyun static const struct vop_hdr_table rk3568_vop_hdr_table = {
481*4882a593Smuzhiyun 	.hdr2sdr_eetf_yn = hdr2sdr_eetf_yn,
482*4882a593Smuzhiyun 	.hdr2sdr_bt1886oetf_yn = hdr2sdr_bt1886oetf_yn,
483*4882a593Smuzhiyun 	.hdr2sdr_sat_yn = hdr2sdr_sat_yn,
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun 	.hdr2sdr_src_range_min = 494,
486*4882a593Smuzhiyun 	.hdr2sdr_src_range_max = 12642,
487*4882a593Smuzhiyun 	.hdr2sdr_normfaceetf = 1327,
488*4882a593Smuzhiyun 	.hdr2sdr_dst_range_min = 4,
489*4882a593Smuzhiyun 	.hdr2sdr_dst_range_max = 3276,
490*4882a593Smuzhiyun 	.hdr2sdr_normfacgamma = 5120,
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun 	.sdr2hdr_bt1886eotf_yn_for_hlg_hdr = sdr2hdr_bt1886eotf_yn_for_hlg_hdr,
493*4882a593Smuzhiyun 	.sdr2hdr_bt1886eotf_yn_for_bt2020 = sdr2hdr_bt1886eotf_yn_for_bt2020,
494*4882a593Smuzhiyun 	.sdr2hdr_bt1886eotf_yn_for_hdr = sdr2hdr_bt1886eotf_yn_for_hdr,
495*4882a593Smuzhiyun 	.sdr2hdr_st2084oetf_yn_for_hlg_hdr = sdr2hdr_st2084oetf_yn_for_hlg_hdr,
496*4882a593Smuzhiyun 	.sdr2hdr_st2084oetf_yn_for_bt2020 = sdr2hdr_st2084oetf_yn_for_bt2020,
497*4882a593Smuzhiyun 	.sdr2hdr_st2084oetf_yn_for_hdr = sdr2hdr_st2084oetf_yn_for_hdr,
498*4882a593Smuzhiyun 	.sdr2hdr_st2084oetf_dxn_pow2 = sdr2hdr_st2084oetf_dxn_pow2,
499*4882a593Smuzhiyun 	.sdr2hdr_st2084oetf_dxn = sdr2hdr_st2084oetf_dxn,
500*4882a593Smuzhiyun 	.sdr2hdr_st2084oetf_xn = sdr2hdr_st2084oetf_xn,
501*4882a593Smuzhiyun };
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun static const int rk3568_vop_axi_intrs[] = {
504*4882a593Smuzhiyun 	0,
505*4882a593Smuzhiyun 	BUS_ERROR_INTR,
506*4882a593Smuzhiyun 	0,
507*4882a593Smuzhiyun 	WB_UV_FIFO_FULL_INTR,
508*4882a593Smuzhiyun 	WB_YRGB_FIFO_FULL_INTR,
509*4882a593Smuzhiyun 	WB_COMPLETE_INTR,
510*4882a593Smuzhiyun 
511*4882a593Smuzhiyun };
512*4882a593Smuzhiyun 
513*4882a593Smuzhiyun static const struct vop_intr rk3528_vop_axi_intr[] = {
514*4882a593Smuzhiyun 	{
515*4882a593Smuzhiyun 	  .intrs = rk3568_vop_axi_intrs,
516*4882a593Smuzhiyun 	  .nintrs = ARRAY_SIZE(rk3568_vop_axi_intrs),
517*4882a593Smuzhiyun 	  .status = VOP_REG(RK3568_SYS0_INT_STATUS, 0xfe, 0),
518*4882a593Smuzhiyun 	  .enable = VOP_REG_MASK(RK3568_SYS0_INT_EN, 0xfe, 0),
519*4882a593Smuzhiyun 	  .clear = VOP_REG_MASK(RK3568_SYS0_INT_CLR, 0xfe, 0),
520*4882a593Smuzhiyun 	},
521*4882a593Smuzhiyun };
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun static const struct vop_intr rk3568_vop_axi_intr[] = {
524*4882a593Smuzhiyun 	{
525*4882a593Smuzhiyun 	  .intrs = rk3568_vop_axi_intrs,
526*4882a593Smuzhiyun 	  .nintrs = ARRAY_SIZE(rk3568_vop_axi_intrs),
527*4882a593Smuzhiyun 	  .status = VOP_REG(RK3568_SYS0_INT_STATUS, 0xfe, 0),
528*4882a593Smuzhiyun 	  .enable = VOP_REG_MASK(RK3568_SYS0_INT_EN, 0xfe, 0),
529*4882a593Smuzhiyun 	  .clear = VOP_REG_MASK(RK3568_SYS0_INT_CLR, 0xfe, 0),
530*4882a593Smuzhiyun 	},
531*4882a593Smuzhiyun 
532*4882a593Smuzhiyun 	{
533*4882a593Smuzhiyun 	  .intrs = rk3568_vop_axi_intrs,
534*4882a593Smuzhiyun 	  .nintrs = ARRAY_SIZE(rk3568_vop_axi_intrs),
535*4882a593Smuzhiyun 	  .status = VOP_REG(RK3568_SYS1_INT_STATUS, 0xfe, 0),
536*4882a593Smuzhiyun 	  .enable = VOP_REG_MASK(RK3568_SYS1_INT_EN, 0xfe, 0),
537*4882a593Smuzhiyun 	  .clear = VOP_REG_MASK(RK3568_SYS1_INT_CLR, 0xfe, 0),
538*4882a593Smuzhiyun 	},
539*4882a593Smuzhiyun };
540*4882a593Smuzhiyun 
541*4882a593Smuzhiyun static const int rk3568_vop_intrs[] = {
542*4882a593Smuzhiyun 	FS_INTR,
543*4882a593Smuzhiyun 	FS_NEW_INTR,
544*4882a593Smuzhiyun 	LINE_FLAG_INTR,
545*4882a593Smuzhiyun 	LINE_FLAG1_INTR,
546*4882a593Smuzhiyun 	POST_BUF_EMPTY_INTR,
547*4882a593Smuzhiyun 	FS_FIELD_INTR,
548*4882a593Smuzhiyun 	DSP_HOLD_VALID_INTR,
549*4882a593Smuzhiyun };
550*4882a593Smuzhiyun 
551*4882a593Smuzhiyun static const struct vop_intr rk3568_vp0_intr = {
552*4882a593Smuzhiyun 	.intrs = rk3568_vop_intrs,
553*4882a593Smuzhiyun 	.nintrs = ARRAY_SIZE(rk3568_vop_intrs),
554*4882a593Smuzhiyun 	.line_flag_num[0] = VOP_REG(RK3568_VP0_LINE_FLAG, 0x1fff, 0),
555*4882a593Smuzhiyun 	.line_flag_num[1] = VOP_REG(RK3568_VP0_LINE_FLAG, 0x1fff, 16),
556*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_VP0_INT_STATUS, 0xffff, 0),
557*4882a593Smuzhiyun 	.enable = VOP_REG_MASK(RK3568_VP0_INT_EN, 0xffff, 0),
558*4882a593Smuzhiyun 	.clear = VOP_REG_MASK(RK3568_VP0_INT_CLR, 0xffff, 0),
559*4882a593Smuzhiyun };
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun static const struct vop_intr rk3568_vp1_intr = {
562*4882a593Smuzhiyun 	.intrs = rk3568_vop_intrs,
563*4882a593Smuzhiyun 	.nintrs = ARRAY_SIZE(rk3568_vop_intrs),
564*4882a593Smuzhiyun 	.line_flag_num[0] = VOP_REG(RK3568_VP1_LINE_FLAG, 0x1fff, 0),
565*4882a593Smuzhiyun 	.line_flag_num[1] = VOP_REG(RK3568_VP1_LINE_FLAG, 0x1fff, 16),
566*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_VP1_INT_STATUS, 0xffff, 0),
567*4882a593Smuzhiyun 	.enable = VOP_REG_MASK(RK3568_VP1_INT_EN, 0xffff, 0),
568*4882a593Smuzhiyun 	.clear = VOP_REG_MASK(RK3568_VP1_INT_CLR, 0xffff, 0),
569*4882a593Smuzhiyun };
570*4882a593Smuzhiyun 
571*4882a593Smuzhiyun static const struct vop_intr rk3568_vp2_intr = {
572*4882a593Smuzhiyun 	.intrs = rk3568_vop_intrs,
573*4882a593Smuzhiyun 	.nintrs = ARRAY_SIZE(rk3568_vop_intrs),
574*4882a593Smuzhiyun 	.line_flag_num[0] = VOP_REG(RK3568_VP2_LINE_FLAG, 0x1fff, 0),
575*4882a593Smuzhiyun 	.line_flag_num[1] = VOP_REG(RK3568_VP2_LINE_FLAG, 0x1fff, 16),
576*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_VP2_INT_STATUS, 0xffff, 0),
577*4882a593Smuzhiyun 	.enable = VOP_REG_MASK(RK3568_VP2_INT_EN, 0xffff, 0),
578*4882a593Smuzhiyun 	.clear = VOP_REG_MASK(RK3568_VP2_INT_CLR, 0xffff, 0),
579*4882a593Smuzhiyun };
580*4882a593Smuzhiyun 
581*4882a593Smuzhiyun static const struct vop_intr rk3588_vp3_intr = {
582*4882a593Smuzhiyun 	.intrs = rk3568_vop_intrs,
583*4882a593Smuzhiyun 	.nintrs = ARRAY_SIZE(rk3568_vop_intrs),
584*4882a593Smuzhiyun 	.line_flag_num[0] = VOP_REG(RK3588_VP3_LINE_FLAG, 0x1fff, 0),
585*4882a593Smuzhiyun 	.line_flag_num[1] = VOP_REG(RK3588_VP3_LINE_FLAG, 0x1fff, 16),
586*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_VP3_INT_STATUS, 0xffff, 0),
587*4882a593Smuzhiyun 	.enable = VOP_REG_MASK(RK3588_VP3_INT_EN, 0xffff, 0),
588*4882a593Smuzhiyun 	.clear = VOP_REG_MASK(RK3588_VP3_INT_CLR, 0xffff, 0),
589*4882a593Smuzhiyun };
590*4882a593Smuzhiyun 
591*4882a593Smuzhiyun static const struct vop2_dsc_regs rk3588_vop_dsc_8k_regs = {
592*4882a593Smuzhiyun 	/* DSC SYS CTRL */
593*4882a593Smuzhiyun 	.dsc_port_sel = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x3, 0),
594*4882a593Smuzhiyun 	.dsc_man_mode = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x1, 2),
595*4882a593Smuzhiyun 	.dsc_interface_mode = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x3, 4),
596*4882a593Smuzhiyun 	.dsc_pixel_num = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x3, 6),
597*4882a593Smuzhiyun 	.dsc_pxl_clk_div = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x1, 8),
598*4882a593Smuzhiyun 	.dsc_cds_clk_div = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x3, 12),
599*4882a593Smuzhiyun 	.dsc_txp_clk_div = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x3, 14),
600*4882a593Smuzhiyun 	.dsc_init_dly_mode = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x1, 16),
601*4882a593Smuzhiyun 	.dsc_scan_en = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x1, 17),
602*4882a593Smuzhiyun 	.dsc_halt_en = VOP_REG(RK3588_DSC_8K_SYS_CTRL, 0x1, 18),
603*4882a593Smuzhiyun 	.rst_deassert = VOP_REG(RK3588_DSC_8K_RST, 0x1, 0),
604*4882a593Smuzhiyun 	.dsc_flush = VOP_REG(RK3588_DSC_8K_RST, 0x1, 16),
605*4882a593Smuzhiyun 	.dsc_cfg_done = VOP_REG(RK3588_DSC_8K_CFG_DONE, 0x1, 0),
606*4882a593Smuzhiyun 	.dsc_init_dly_num = VOP_REG(RK3588_DSC_8K_INIT_DLY, 0xffff, 0),
607*4882a593Smuzhiyun 	.scan_timing_para_imd_en = VOP_REG(RK3588_DSC_8K_INIT_DLY, 0x1, 16),
608*4882a593Smuzhiyun 	.dsc_htotal_pw = VOP_REG(RK3588_DSC_8K_HTOTAL_HS_END, 0xffffffff, 0),
609*4882a593Smuzhiyun 	.dsc_hact_st_end = VOP_REG(RK3588_DSC_8K_HACT_ST_END, 0xffffffff, 0),
610*4882a593Smuzhiyun 	.dsc_vtotal = VOP_REG(RK3588_DSC_8K_VTOTAL_VS_END, 0xffff, 16),
611*4882a593Smuzhiyun 	.dsc_vs_end = VOP_REG(RK3588_DSC_8K_VTOTAL_VS_END, 0xffff, 0),
612*4882a593Smuzhiyun 	.dsc_vact_st_end = VOP_REG(RK3588_DSC_8K_VACT_ST_END, 0xffffffff, 0),
613*4882a593Smuzhiyun 	.dsc_error_status = VOP_REG(RK3588_DSC_8K_STATUS, 0x1, 0),
614*4882a593Smuzhiyun 
615*4882a593Smuzhiyun 	/* DSC encoder */
616*4882a593Smuzhiyun 	.dsc_pps0_3 = VOP_REG(RK3588_DSC_8K_PPS0_3, 0xffffffff, 0),
617*4882a593Smuzhiyun 	.dsc_en = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 0),
618*4882a593Smuzhiyun 	.dsc_rbit = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 2),
619*4882a593Smuzhiyun 	.dsc_rbyt = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 3),
620*4882a593Smuzhiyun 	.dsc_flal = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 4),
621*4882a593Smuzhiyun 	.dsc_mer = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 5),
622*4882a593Smuzhiyun 	.dsc_epb = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 6),
623*4882a593Smuzhiyun 	.dsc_epl = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 7),
624*4882a593Smuzhiyun 	.dsc_nslc = VOP_REG(RK3588_DSC_8K_CTRL0, 0x7, 16),
625*4882a593Smuzhiyun 	.dsc_sbo = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 28),
626*4882a593Smuzhiyun 	.dsc_ifep = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 29),
627*4882a593Smuzhiyun 	.dsc_pps_upd = VOP_REG(RK3588_DSC_8K_CTRL0, 0x1, 31),
628*4882a593Smuzhiyun 	.dsc_status = VOP_REG(RK3588_DSC_8K_STS0, 0xffffffff, 0),
629*4882a593Smuzhiyun 	.dsc_ecw = VOP_REG(RK3588_DSC_8K_ERS, 0xffffffff, 0),
630*4882a593Smuzhiyun };
631*4882a593Smuzhiyun 
632*4882a593Smuzhiyun static const struct vop2_dsc_regs rk3588_vop_dsc_4k_regs = {
633*4882a593Smuzhiyun 	/* DSC SYS CTRL */
634*4882a593Smuzhiyun 	.dsc_port_sel = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x3, 0),
635*4882a593Smuzhiyun 	.dsc_man_mode = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x1, 2),
636*4882a593Smuzhiyun 	.dsc_interface_mode = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x3, 4),
637*4882a593Smuzhiyun 	.dsc_pixel_num = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x3, 6),
638*4882a593Smuzhiyun 	.dsc_pxl_clk_div = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x1, 8),
639*4882a593Smuzhiyun 	.dsc_cds_clk_div = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x3, 12),
640*4882a593Smuzhiyun 	.dsc_txp_clk_div = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x3, 14),
641*4882a593Smuzhiyun 	.dsc_init_dly_mode = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x1, 16),
642*4882a593Smuzhiyun 	.dsc_scan_en = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x1, 17),
643*4882a593Smuzhiyun 	.dsc_halt_en = VOP_REG(RK3588_DSC_4K_SYS_CTRL, 0x1, 18),
644*4882a593Smuzhiyun 	.rst_deassert = VOP_REG(RK3588_DSC_4K_RST, 0x1, 0),
645*4882a593Smuzhiyun 	.dsc_flush = VOP_REG(RK3588_DSC_4K_RST, 0x1, 16),
646*4882a593Smuzhiyun 	.dsc_cfg_done = VOP_REG(RK3588_DSC_4K_CFG_DONE, 0x1, 0),
647*4882a593Smuzhiyun 	.dsc_init_dly_num = VOP_REG(RK3588_DSC_4K_INIT_DLY, 0xffff, 0),
648*4882a593Smuzhiyun 	.scan_timing_para_imd_en = VOP_REG(RK3588_DSC_4K_INIT_DLY, 0x1, 16),
649*4882a593Smuzhiyun 	.dsc_htotal_pw = VOP_REG(RK3588_DSC_4K_HTOTAL_HS_END, 0xffffffff, 0),
650*4882a593Smuzhiyun 	.dsc_hact_st_end = VOP_REG(RK3588_DSC_4K_HACT_ST_END, 0xffffffff, 0),
651*4882a593Smuzhiyun 	.dsc_vtotal = VOP_REG(RK3588_DSC_4K_VTOTAL_VS_END, 0xffff, 16),
652*4882a593Smuzhiyun 	.dsc_vs_end = VOP_REG(RK3588_DSC_4K_VTOTAL_VS_END, 0xffff, 0),
653*4882a593Smuzhiyun 	.dsc_vact_st_end = VOP_REG(RK3588_DSC_4K_VACT_ST_END, 0xffffffff, 0),
654*4882a593Smuzhiyun 	.dsc_error_status = VOP_REG(RK3588_DSC_4K_STATUS, 0x1, 0),
655*4882a593Smuzhiyun 
656*4882a593Smuzhiyun 	/* DSC encoder */
657*4882a593Smuzhiyun 	.dsc_pps0_3 = VOP_REG(RK3588_DSC_4K_PPS0_3, 0xffffffff, 0),
658*4882a593Smuzhiyun 	.dsc_en = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 0),
659*4882a593Smuzhiyun 	.dsc_rbit = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 2),
660*4882a593Smuzhiyun 	.dsc_rbyt = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 3),
661*4882a593Smuzhiyun 	.dsc_flal = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 4),
662*4882a593Smuzhiyun 	.dsc_mer = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 5),
663*4882a593Smuzhiyun 	.dsc_epb = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 6),
664*4882a593Smuzhiyun 	.dsc_epl = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 7),
665*4882a593Smuzhiyun 	.dsc_nslc = VOP_REG(RK3588_DSC_4K_CTRL0, 0x7, 16),
666*4882a593Smuzhiyun 	.dsc_sbo = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 28),
667*4882a593Smuzhiyun 	.dsc_ifep = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 29),
668*4882a593Smuzhiyun 	.dsc_pps_upd = VOP_REG(RK3588_DSC_4K_CTRL0, 0x1, 31),
669*4882a593Smuzhiyun 	.dsc_status = VOP_REG(RK3588_DSC_4K_STS0, 0xffffffff, 0),
670*4882a593Smuzhiyun 	.dsc_ecw = VOP_REG(RK3588_DSC_4K_ERS, 0xffffffff, 0),
671*4882a593Smuzhiyun };
672*4882a593Smuzhiyun 
673*4882a593Smuzhiyun static const struct dsc_error_info dsc_ecw[] = {
674*4882a593Smuzhiyun 	{0x00000000, "no error detected by DSC encoder"},
675*4882a593Smuzhiyun 	{0x0030ffff, "bits per component error"},
676*4882a593Smuzhiyun 	{0x0040ffff, "multiple mode error"},
677*4882a593Smuzhiyun 	{0x0050ffff, "line buffer depth error"},
678*4882a593Smuzhiyun 	{0x0060ffff, "minor version error"},
679*4882a593Smuzhiyun 	{0x0070ffff, "picture height error"},
680*4882a593Smuzhiyun 	{0x0080ffff, "picture width error"},
681*4882a593Smuzhiyun 	{0x0090ffff, "number of slices error"},
682*4882a593Smuzhiyun 	{0x00c0ffff, "slice height Error "},
683*4882a593Smuzhiyun 	{0x00d0ffff, "slice width error"},
684*4882a593Smuzhiyun 	{0x00e0ffff, "second line BPG offset error"},
685*4882a593Smuzhiyun 	{0x00f0ffff, "non second line BPG offset error"},
686*4882a593Smuzhiyun 	{0x0100ffff, "PPS ID error"},
687*4882a593Smuzhiyun 	{0x0110ffff, "bits per pixel (BPP) Error"},
688*4882a593Smuzhiyun 	{0x0120ffff, "buffer flow error"},  /* dsc_buffer_flow */
689*4882a593Smuzhiyun 
690*4882a593Smuzhiyun 	{0x01510001, "slice 0 RC buffer model overflow error"},
691*4882a593Smuzhiyun 	{0x01510002, "slice 1 RC buffer model overflow error"},
692*4882a593Smuzhiyun 	{0x01510004, "slice 2 RC buffer model overflow error"},
693*4882a593Smuzhiyun 	{0x01510008, "slice 3 RC buffer model overflow error"},
694*4882a593Smuzhiyun 	{0x01510010, "slice 4 RC buffer model overflow error"},
695*4882a593Smuzhiyun 	{0x01510020, "slice 5 RC buffer model overflow error"},
696*4882a593Smuzhiyun 	{0x01510040, "slice 6 RC buffer model overflow error"},
697*4882a593Smuzhiyun 	{0x01510080, "slice 7 RC buffer model overflow error"},
698*4882a593Smuzhiyun 
699*4882a593Smuzhiyun 	{0x01610001, "slice 0 RC buffer model underflow error"},
700*4882a593Smuzhiyun 	{0x01610002, "slice 1 RC buffer model underflow error"},
701*4882a593Smuzhiyun 	{0x01610004, "slice 2 RC buffer model underflow error"},
702*4882a593Smuzhiyun 	{0x01610008, "slice 3 RC buffer model underflow error"},
703*4882a593Smuzhiyun 	{0x01610010, "slice 4 RC buffer model underflow error"},
704*4882a593Smuzhiyun 	{0x01610020, "slice 5 RC buffer model underflow error"},
705*4882a593Smuzhiyun 	{0x01610040, "slice 6 RC buffer model underflow error"},
706*4882a593Smuzhiyun 	{0x01610080, "slice 7 RC buffer model underflow error"},
707*4882a593Smuzhiyun 
708*4882a593Smuzhiyun 	{0xffffffff, "unsuccessful RESET cycle status"},
709*4882a593Smuzhiyun 	{0x00a0ffff, "ICH full error precision settings error"},
710*4882a593Smuzhiyun 	{0x0020ffff, "native mode"},
711*4882a593Smuzhiyun };
712*4882a593Smuzhiyun 
713*4882a593Smuzhiyun static const struct dsc_error_info dsc_buffer_flow[] = {
714*4882a593Smuzhiyun 	{0x00000000, "rate buffer status"},
715*4882a593Smuzhiyun 	{0x00000001, "line buffer status"},
716*4882a593Smuzhiyun 	{0x00000002, "decoder model status"},
717*4882a593Smuzhiyun 	{0x00000003, "pixel buffer status"},
718*4882a593Smuzhiyun 	{0x00000004, "balance fifo buffer status"},
719*4882a593Smuzhiyun 	{0x00000005, "syntax element fifo status"},
720*4882a593Smuzhiyun };
721*4882a593Smuzhiyun 
722*4882a593Smuzhiyun static const struct vop2_dsc_data rk3588_vop_dsc_data[] = {
723*4882a593Smuzhiyun 	{
724*4882a593Smuzhiyun 	 .id = ROCKCHIP_VOP2_DSC_8K,
725*4882a593Smuzhiyun 	 .pd_id = VOP2_PD_DSC_8K,
726*4882a593Smuzhiyun 	 .max_slice_num = 8,
727*4882a593Smuzhiyun 	 .max_linebuf_depth = 11,
728*4882a593Smuzhiyun 	 .min_bits_per_pixel = 8,
729*4882a593Smuzhiyun 	 .dsc_txp_clk_src_name = "dsc_8k_txp_clk_src",
730*4882a593Smuzhiyun 	 .dsc_txp_clk_name = "dsc_8k_txp_clk",
731*4882a593Smuzhiyun 	 .dsc_pxl_clk_name = "dsc_8k_pxl_clk",
732*4882a593Smuzhiyun 	 .dsc_cds_clk_name = "dsc_8k_cds_clk",
733*4882a593Smuzhiyun 	 .regs = &rk3588_vop_dsc_8k_regs,
734*4882a593Smuzhiyun 	},
735*4882a593Smuzhiyun 
736*4882a593Smuzhiyun 	{
737*4882a593Smuzhiyun 	 .id = ROCKCHIP_VOP2_DSC_4K,
738*4882a593Smuzhiyun 	 .pd_id = VOP2_PD_DSC_4K,
739*4882a593Smuzhiyun 	 .max_slice_num = 2,
740*4882a593Smuzhiyun 	 .max_linebuf_depth = 11,
741*4882a593Smuzhiyun 	 .min_bits_per_pixel = 8,
742*4882a593Smuzhiyun 	 .dsc_txp_clk_src_name = "dsc_4k_txp_clk_src",
743*4882a593Smuzhiyun 	 .dsc_txp_clk_name = "dsc_4k_txp_clk",
744*4882a593Smuzhiyun 	 .dsc_pxl_clk_name = "dsc_4k_pxl_clk",
745*4882a593Smuzhiyun 	 .dsc_cds_clk_name = "dsc_4k_cds_clk",
746*4882a593Smuzhiyun 	 .regs = &rk3588_vop_dsc_4k_regs,
747*4882a593Smuzhiyun 	},
748*4882a593Smuzhiyun };
749*4882a593Smuzhiyun 
750*4882a593Smuzhiyun static const struct vop2_wb_regs rk3568_vop_wb_regs = {
751*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_WB_CTRL, 0x1, 0),
752*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_WB_CTRL, 0x7, 1),
753*4882a593Smuzhiyun 	.dither_en = VOP_REG(RK3568_WB_CTRL, 0x1, 4),
754*4882a593Smuzhiyun 	.r2y_en = VOP_REG(RK3568_WB_CTRL, 0x1, 5),
755*4882a593Smuzhiyun 	.scale_x_en = VOP_REG(RK3568_WB_CTRL, 0x1, 7),
756*4882a593Smuzhiyun 	.scale_y_en = VOP_REG(RK3568_WB_CTRL, 0x1, 8),
757*4882a593Smuzhiyun 	.axi_yrgb_id = VOP_REG(RK3568_WB_CTRL, 0xff, 19),
758*4882a593Smuzhiyun 	.axi_uv_id = VOP_REG(RK3568_WB_CTRL, 0x1f, 27),
759*4882a593Smuzhiyun 	.scale_x_factor = VOP_REG(RK3568_WB_XSCAL_FACTOR, 0x3fff, 16),
760*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3568_WB_YRGB_MST, 0xffffffff, 0),
761*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3568_WB_CBR_MST, 0xffffffff, 0),
762*4882a593Smuzhiyun 	.vp_id = VOP_REG(RK3568_LUT_PORT_SEL, 0x3, 8),
763*4882a593Smuzhiyun 	.fifo_throd = VOP_REG(RK3568_WB_XSCAL_FACTOR, 0x3ff, 0),
764*4882a593Smuzhiyun };
765*4882a593Smuzhiyun 
766*4882a593Smuzhiyun static const struct vop2_wb_data rk3568_vop_wb_data = {
767*4882a593Smuzhiyun 	.formats = formats_wb,
768*4882a593Smuzhiyun 	.nformats = ARRAY_SIZE(formats_wb),
769*4882a593Smuzhiyun 	.max_output = { 1920, 1080 },
770*4882a593Smuzhiyun 	.fifo_depth =  1920 * 4 / 16,
771*4882a593Smuzhiyun 	.regs = &rk3568_vop_wb_regs,
772*4882a593Smuzhiyun };
773*4882a593Smuzhiyun 
774*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3528_vop_vp0_regs = {
775*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 0),
776*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3528_OVL_PORT0_CTRL, 0x1, 0),
777*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP0_DSP_BG, 0xffffffff, 0),
778*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP0_DSP_CTRL, 0xf, 0),
779*4882a593Smuzhiyun 	.core_dclk_div = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 4),
780*4882a593Smuzhiyun 	.dclk_div2 = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 4),
781*4882a593Smuzhiyun 	.dclk_div2_phase_lock = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 5),
782*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 5),
783*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 6),
784*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 7),
785*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1f, 8),
786*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 13),
787*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 15),
788*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 16),
789*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 17),
790*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP0_DSP_CTRL, 0x3, 18),
791*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 20),
792*4882a593Smuzhiyun 	.gamma_update_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 22),
793*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 28),
794*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31),
795*4882a593Smuzhiyun 	.bg_mix_ctrl = VOP_REG(RK3528_OVL_PORT0_BG_MIX_CTRL, 0xffff, 0),
796*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3528_OVL_PORT0_BG_MIX_CTRL, 0xff, 24),
797*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP0_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
798*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP0_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
799*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP0_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
800*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP0_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
801*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP0_POST_SCL_CTRL, 0x3, 0),
802*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP0_DSP_HTOTAL_HS_END, 0xffffffff, 0),
803*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP0_DSP_HACT_ST_END, 0xffffffff, 0),
804*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1fff, 16),
805*4882a593Smuzhiyun 	.sw_dsp_vtotal_imd = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1, 15),
806*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1fff, 0),
807*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP0_DSP_VACT_ST_END, 0x1fff1fff, 0),
808*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP0_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
809*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP0_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
810*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP0_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
811*4882a593Smuzhiyun 	.lut_dma_rid = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0xf, 4),
812*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3528_OVL_PORT0_LAYER_SEL, 0xffff, 0),
813*4882a593Smuzhiyun 	.hdr_src_color_ctrl = VOP_REG(RK3528_HDR_SRC_COLOR_CTRL, 0xffffffff, 0),
814*4882a593Smuzhiyun 	.hdr_dst_color_ctrl = VOP_REG(RK3528_HDR_DST_COLOR_CTRL, 0xffffffff, 0),
815*4882a593Smuzhiyun 	.hdr_src_alpha_ctrl = VOP_REG(RK3528_HDR_SRC_ALPHA_CTRL, 0xffffffff, 0),
816*4882a593Smuzhiyun 	.hdr_dst_alpha_ctrl = VOP_REG(RK3528_HDR_DST_ALPHA_CTRL, 0xffffffff, 0),
817*4882a593Smuzhiyun 	.hdr_lut_update_en = VOP_REG(RK3568_HDR_LUT_CTRL, 0x1, 0),
818*4882a593Smuzhiyun 	.hdr_lut_mode = VOP_REG(RK3568_HDR_LUT_CTRL, 0x1, 1),
819*4882a593Smuzhiyun 	.hdr_lut_mst = VOP_REG(RK3568_HDR_LUT_MST, 0xffffffff, 0),
820*4882a593Smuzhiyun 	.hdr_lut_fetch_done = VOP_REG(RK3528_HDR_LUT_STATUS, 0x1, 0),
821*4882a593Smuzhiyun 	.hdr10_en = VOP_REG(RK3568_OVL_CTRL, 0x1, 4),
822*4882a593Smuzhiyun 	.sdr2hdr_path_en = VOP_REG(RK3568_OVL_CTRL, 0x1, 5),
823*4882a593Smuzhiyun 	.sdr2hdr_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 0),
824*4882a593Smuzhiyun 	.sdr2hdr_auto_gating_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 1),
825*4882a593Smuzhiyun 	.sdr2hdr_bypass_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 2),
826*4882a593Smuzhiyun 	.sdr2hdr_dstmode = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 3),
827*4882a593Smuzhiyun 	.hdr_vivid_en = VOP_REG(RK3528_HDRVIVID_CTRL, 0x1, 0),
828*4882a593Smuzhiyun 	.hdr_vivid_bypass_en = VOP_REG(RK3528_HDRVIVID_CTRL, 0x1, 2),
829*4882a593Smuzhiyun 	.hdr_vivid_path_mode = VOP_REG(RK3528_HDRVIVID_CTRL, 0x7, 3),
830*4882a593Smuzhiyun 	.hdr_vivid_dstgamut = VOP_REG(RK3528_HDRVIVID_CTRL, 0x1, 6),
831*4882a593Smuzhiyun 	.acm_bypass_en = VOP_REG(RK3528_VP0_ACM_CTRL, 0x1, 0),
832*4882a593Smuzhiyun 	.csc_en = VOP_REG(RK3528_VP0_ACM_CTRL, 0x1, 1),
833*4882a593Smuzhiyun 	.acm_r2y_en = VOP_REG(RK3528_VP0_ACM_CTRL, 0x1, 2),
834*4882a593Smuzhiyun 	.csc_mode = VOP_REG(RK3528_VP0_ACM_CTRL, 0x7, 3),
835*4882a593Smuzhiyun 	.acm_r2y_mode = VOP_REG(RK3528_VP0_ACM_CTRL, 0x7, 8),
836*4882a593Smuzhiyun 	.csc_coe00 = VOP_REG(RK3528_VP0_ACM_CTRL, 0xffff, 16),
837*4882a593Smuzhiyun 	.csc_coe01 = VOP_REG(RK3528_VP0_CSC_COE01_02, 0xffff, 0),
838*4882a593Smuzhiyun 	.csc_coe02 = VOP_REG(RK3528_VP0_CSC_COE01_02, 0xffff, 16),
839*4882a593Smuzhiyun 	.csc_coe10 = VOP_REG(RK3528_VP0_CSC_COE10_11, 0xffff, 0),
840*4882a593Smuzhiyun 	.csc_coe11 = VOP_REG(RK3528_VP0_CSC_COE10_11, 0xffff, 16),
841*4882a593Smuzhiyun 	.csc_coe12 = VOP_REG(RK3528_VP0_CSC_COE12_20, 0xffff, 0),
842*4882a593Smuzhiyun 	.csc_coe20 = VOP_REG(RK3528_VP0_CSC_COE12_20, 0xffff, 16),
843*4882a593Smuzhiyun 	.csc_coe21 = VOP_REG(RK3528_VP0_CSC_COE21_22, 0xffff, 0),
844*4882a593Smuzhiyun 	.csc_coe22 = VOP_REG(RK3528_VP0_CSC_COE21_22, 0xffff, 16),
845*4882a593Smuzhiyun 	.csc_offset0 = VOP_REG(RK3528_VP0_CSC_OFFSET0, 0xffffffff, 0),
846*4882a593Smuzhiyun 	.csc_offset1 = VOP_REG(RK3528_VP0_CSC_OFFSET1, 0xffffffff, 0),
847*4882a593Smuzhiyun 	.csc_offset2 = VOP_REG(RK3528_VP0_CSC_OFFSET2, 0xffffffff, 0),
848*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP0_COLOR_BAR_CTRL, 0x1, 1),
849*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP0_COLOR_BAR_CTRL, 0x1, 0),
850*4882a593Smuzhiyun };
851*4882a593Smuzhiyun 
852*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3528_vop_vp1_regs = {
853*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 1),
854*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3528_OVL_PORT1_CTRL, 0x1, 0),
855*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP1_DSP_BG, 0xffffffff, 0),
856*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP1_DSP_CTRL, 0xf, 0),
857*4882a593Smuzhiyun 	.core_dclk_div = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 4),
858*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 5),
859*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 6),
860*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 7),
861*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1f, 8),
862*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 13),
863*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 15),
864*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 16),
865*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 17),
866*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP1_DSP_CTRL, 0x3, 18),
867*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 20),
868*4882a593Smuzhiyun 	.gamma_update_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 22),
869*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 28),
870*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31),
871*4882a593Smuzhiyun 	.bg_mix_ctrl = VOP_REG(RK3528_OVL_PORT1_BG_MIX_CTRL, 0xffff, 0),
872*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3528_OVL_PORT1_BG_MIX_CTRL, 0xff, 24),
873*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP1_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
874*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP1_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
875*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP1_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
876*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP1_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
877*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP1_POST_SCL_CTRL, 0x3, 0),
878*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP1_DSP_HTOTAL_HS_END, 0xffffffff, 0),
879*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP1_DSP_HACT_ST_END, 0xffffffff, 0),
880*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP1_DSP_VTOTAL_VS_END, 0x1fff, 16),
881*4882a593Smuzhiyun 	.sw_dsp_vtotal_imd = VOP_REG(RK3568_VP1_DSP_VTOTAL_VS_END, 0x1, 15),
882*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP1_DSP_VTOTAL_VS_END, 0x1fff, 0),
883*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP1_DSP_VACT_ST_END, 0x1fff1fff, 0),
884*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP1_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
885*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP1_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
886*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP1_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
887*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3568_VP1_BCSH_BCS, 0xff, 0),
888*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3568_VP1_BCSH_BCS, 0x1ff, 8),
889*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3568_VP1_BCSH_BCS, 0x3ff, 20),
890*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3568_VP1_BCSH_BCS, 0x3, 30),
891*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3568_VP1_BCSH_H, 0x1ff, 0),
892*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3568_VP1_BCSH_H, 0x1ff, 16),
893*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x3, 6),
894*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x1, 4),
895*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x3, 2),
896*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x1, 0),
897*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3568_VP1_BCSH_COLOR_BAR, 0x1, 31),
898*4882a593Smuzhiyun 	.lut_dma_rid = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0xf, 4),
899*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3528_OVL_PORT1_LAYER_SEL, 0xffff, 0),
900*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP1_COLOR_BAR_CTRL, 0x1, 1),
901*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP1_COLOR_BAR_CTRL, 0x1, 0),
902*4882a593Smuzhiyun };
903*4882a593Smuzhiyun 
904*4882a593Smuzhiyun static const struct vop3_ovl_mix_regs rk3528_vop_hdr_mix_regs = {
905*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3528_HDR_SRC_COLOR_CTRL, 0xffffffff, 0),
906*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3528_HDR_DST_COLOR_CTRL, 0xffffffff, 0),
907*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3528_HDR_SRC_ALPHA_CTRL, 0xffffffff, 0),
908*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3528_HDR_DST_ALPHA_CTRL, 0xffffffff, 0),
909*4882a593Smuzhiyun };
910*4882a593Smuzhiyun 
911*4882a593Smuzhiyun static const struct vop3_ovl_mix_regs rk3528_vop_vp0_layer_mix_regs = {
912*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3528_OVL_PORT0_MIX0_SRC_COLOR_CTRL, 0xffffffff, 0),
913*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3528_OVL_PORT0_MIX0_DST_COLOR_CTRL, 0xffffffff, 0),
914*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3528_OVL_PORT0_MIX0_SRC_ALPHA_CTRL, 0xffffffff, 0),
915*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3528_OVL_PORT0_MIX0_DST_ALPHA_CTRL, 0xffffffff, 0),
916*4882a593Smuzhiyun };
917*4882a593Smuzhiyun 
918*4882a593Smuzhiyun static const struct vop3_ovl_mix_regs rk3528_vop_vp1_layer_mix_regs = {
919*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3528_OVL_PORT1_MIX0_SRC_COLOR_CTRL, 0xffffffff, 0),
920*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3528_OVL_PORT1_MIX0_DST_COLOR_CTRL, 0xffffffff, 0),
921*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3528_OVL_PORT1_MIX0_SRC_ALPHA_CTRL, 0xffffffff, 0),
922*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3528_OVL_PORT1_MIX0_DST_ALPHA_CTRL, 0xffffffff, 0),
923*4882a593Smuzhiyun };
924*4882a593Smuzhiyun 
925*4882a593Smuzhiyun static const struct vop3_ovl_regs rk3528_vop_vp0_ovl_regs = {
926*4882a593Smuzhiyun 	.layer_mix_regs = &rk3528_vop_vp0_layer_mix_regs,
927*4882a593Smuzhiyun 	.hdr_mix_regs = &rk3528_vop_hdr_mix_regs,
928*4882a593Smuzhiyun };
929*4882a593Smuzhiyun 
930*4882a593Smuzhiyun static const struct vop3_ovl_regs rk3528_vop_vp1_ovl_regs = {
931*4882a593Smuzhiyun 	.layer_mix_regs = &rk3528_vop_vp1_layer_mix_regs,
932*4882a593Smuzhiyun };
933*4882a593Smuzhiyun 
934*4882a593Smuzhiyun static const struct vop2_video_port_data rk3528_vop_video_ports[] = {
935*4882a593Smuzhiyun 	{
936*4882a593Smuzhiyun 	 .id = 0,
937*4882a593Smuzhiyun 	 .soc_id = { 0x3528, 0x3528 },
938*4882a593Smuzhiyun 	 .lut_dma_rid = 14,
939*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN | VOP_FEATURE_VIVID_HDR |
940*4882a593Smuzhiyun 		    VOP_FEATURE_POST_ACM | VOP_FEATURE_POST_CSC | VOP_FEATURE_OUTPUT_10BIT,
941*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
942*4882a593Smuzhiyun 	 .max_output = { 4096, 4096 },
943*4882a593Smuzhiyun 	 .hdrvivid_dly = {17, 29, 32, 44, 15, 38, 1, 29, 0, 0},
944*4882a593Smuzhiyun 	 .sdr2hdr_dly = 21,
945*4882a593Smuzhiyun 	 .layer_mix_dly = 6,
946*4882a593Smuzhiyun 	 .hdr_mix_dly = 2,
947*4882a593Smuzhiyun 	 .win_dly = 8,
948*4882a593Smuzhiyun 	 .intr = &rk3568_vp0_intr,
949*4882a593Smuzhiyun 	 .regs = &rk3528_vop_vp0_regs,
950*4882a593Smuzhiyun 	 .ovl_regs = &rk3528_vop_vp0_ovl_regs,
951*4882a593Smuzhiyun 	},
952*4882a593Smuzhiyun 	{
953*4882a593Smuzhiyun 	 .id = 1,
954*4882a593Smuzhiyun 	 .soc_id = { 0x3528, 0x3528 },
955*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
956*4882a593Smuzhiyun 	 .max_output = { 720, 576 },
957*4882a593Smuzhiyun 	 .hdrvivid_dly = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
958*4882a593Smuzhiyun 	 .sdr2hdr_dly = 0,
959*4882a593Smuzhiyun 	 .layer_mix_dly = 2,
960*4882a593Smuzhiyun 	 .hdr_mix_dly = 0,
961*4882a593Smuzhiyun 	 .win_dly = 8,
962*4882a593Smuzhiyun 	 .intr = &rk3568_vp1_intr,
963*4882a593Smuzhiyun 	 .regs = &rk3528_vop_vp1_regs,
964*4882a593Smuzhiyun 	 .ovl_regs = &rk3528_vop_vp1_ovl_regs,
965*4882a593Smuzhiyun 	},
966*4882a593Smuzhiyun };
967*4882a593Smuzhiyun 
968*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3562_vop_vp0_regs = {
969*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 0),
970*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3528_OVL_PORT0_CTRL, 0x1, 0),
971*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP0_DSP_BG, 0xffffffff, 0),
972*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP0_DSP_CTRL, 0xf, 0),
973*4882a593Smuzhiyun 	.core_dclk_div = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 4),
974*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 5),
975*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 6),
976*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 7),
977*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1f, 8),
978*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 13),
979*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 15),
980*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 16),
981*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 17),
982*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP0_DSP_CTRL, 0x3, 18),
983*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 20),
984*4882a593Smuzhiyun 	.gamma_update_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 22),
985*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 28),
986*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31),
987*4882a593Smuzhiyun 	.bg_mix_ctrl = VOP_REG(RK3528_OVL_PORT0_BG_MIX_CTRL, 0xffff, 0),
988*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3528_OVL_PORT0_BG_MIX_CTRL, 0xff, 24),
989*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP0_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
990*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP0_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
991*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP0_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
992*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP0_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
993*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP0_POST_SCL_CTRL, 0x3, 0),
994*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP0_DSP_HTOTAL_HS_END, 0xffffffff, 0),
995*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP0_DSP_HACT_ST_END, 0xffffffff, 0),
996*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1fff, 16),
997*4882a593Smuzhiyun 	.sw_dsp_vtotal_imd = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1, 15),
998*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1fff, 0),
999*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP0_DSP_VACT_ST_END, 0x1fff1fff, 0),
1000*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP0_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
1001*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP0_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
1002*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP0_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
1003*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3568_VP0_BCSH_BCS, 0xff, 0),
1004*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3568_VP0_BCSH_BCS, 0x1ff, 8),
1005*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3568_VP0_BCSH_BCS, 0x3ff, 20),
1006*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3568_VP0_BCSH_BCS, 0x3, 30),
1007*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3568_VP0_BCSH_H, 0x1ff, 0),
1008*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3568_VP0_BCSH_H, 0x1ff, 16),
1009*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x3, 6),
1010*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x1, 4),
1011*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x3, 2),
1012*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x1, 0),
1013*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3568_VP0_BCSH_COLOR_BAR, 0x1, 31),
1014*4882a593Smuzhiyun 	.edpi_te_en = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 28),
1015*4882a593Smuzhiyun 	.edpi_wms_hold_en = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 30),
1016*4882a593Smuzhiyun 	.edpi_wms_fs = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 31),
1017*4882a593Smuzhiyun 	.lut_dma_rid = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0xf, 4),
1018*4882a593Smuzhiyun 	.cubic_lut_en = VOP_REG(RK3568_VP0_3D_LUT_CTRL, 0x1, 0),
1019*4882a593Smuzhiyun 	.cubic_lut_update_en = VOP_REG(RK3568_VP0_3D_LUT_CTRL, 0x1, 2),
1020*4882a593Smuzhiyun 	.cubic_lut_mst = VOP_REG(RK3568_VP0_3D_LUT_MST, 0xffffffff, 0),
1021*4882a593Smuzhiyun 
1022*4882a593Smuzhiyun 	.mcu_pix_total = VOP_REG(RK3562_VP0_MCU_CTRL, 0x3f, 0),
1023*4882a593Smuzhiyun 	.mcu_cs_pst = VOP_REG(RK3562_VP0_MCU_CTRL, 0xf, 6),
1024*4882a593Smuzhiyun 	.mcu_cs_pend = VOP_REG(RK3562_VP0_MCU_CTRL, 0x3f, 10),
1025*4882a593Smuzhiyun 	.mcu_rw_pst = VOP_REG(RK3562_VP0_MCU_CTRL, 0xf, 16),
1026*4882a593Smuzhiyun 	.mcu_rw_pend = VOP_REG(RK3562_VP0_MCU_CTRL, 0x3f, 20),
1027*4882a593Smuzhiyun 	.mcu_hold_mode = VOP_REG(RK3562_VP0_MCU_CTRL, 0x1, 27),
1028*4882a593Smuzhiyun 	.mcu_frame_st = VOP_REG(RK3562_VP0_MCU_CTRL, 0x1, 28),
1029*4882a593Smuzhiyun 	.mcu_rs = VOP_REG(RK3562_VP0_MCU_CTRL, 0x1, 29),
1030*4882a593Smuzhiyun 	.mcu_bypass = VOP_REG(RK3562_VP0_MCU_CTRL, 0x1, 30),
1031*4882a593Smuzhiyun 	.mcu_type = VOP_REG(RK3562_VP0_MCU_CTRL, 0x1, 31),
1032*4882a593Smuzhiyun 	.mcu_rw_bypass_port = VOP_REG(RK3562_VP0_MCU_RW_BYPASS_PORT, 0xffffffff, 0),
1033*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3528_OVL_PORT0_LAYER_SEL, 0xffff, 0),
1034*4882a593Smuzhiyun 
1035*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP0_COLOR_BAR_CTRL, 0x1, 1),
1036*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP0_COLOR_BAR_CTRL, 0x1, 0),
1037*4882a593Smuzhiyun };
1038*4882a593Smuzhiyun 
1039*4882a593Smuzhiyun static const struct vop2_video_port_data rk3562_vop_video_ports[] = {
1040*4882a593Smuzhiyun 	{
1041*4882a593Smuzhiyun 	 .id = 0,
1042*4882a593Smuzhiyun 	 .soc_id = { 0x3562, 0x3562 },
1043*4882a593Smuzhiyun 	 .lut_dma_rid = 14,
1044*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
1045*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
1046*4882a593Smuzhiyun 	 .cubic_lut_len = 729, /* 9x9x9 */
1047*4882a593Smuzhiyun 	 .max_output = { 2048, 4096 },
1048*4882a593Smuzhiyun 	 .win_dly = 8,
1049*4882a593Smuzhiyun 	 .layer_mix_dly = 8,
1050*4882a593Smuzhiyun 	 .intr = &rk3568_vp0_intr,
1051*4882a593Smuzhiyun 	 .regs = &rk3562_vop_vp0_regs,
1052*4882a593Smuzhiyun 	 .ovl_regs = &rk3528_vop_vp0_ovl_regs,
1053*4882a593Smuzhiyun 	},
1054*4882a593Smuzhiyun };
1055*4882a593Smuzhiyun 
1056*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3568_vop_vp0_regs = {
1057*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 0),
1058*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3568_OVL_CTRL, 0x1, 0),
1059*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP0_DSP_BG, 0x3fffffff, 0),
1060*4882a593Smuzhiyun 	.port_mux = VOP_REG(RK3568_OVL_PORT_SEL, 0xf, 0),
1061*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP0_DSP_CTRL, 0xf, 0),
1062*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31),
1063*4882a593Smuzhiyun 	.core_dclk_div = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 4),
1064*4882a593Smuzhiyun 	.dclk_div2 = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 4),
1065*4882a593Smuzhiyun 	.dclk_div2_phase_lock = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 5),
1066*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 5),
1067*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 6),
1068*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 7),
1069*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1f, 8),
1070*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 13),
1071*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 15),
1072*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP0_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
1073*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3568_VP0_BG_MIX_CTRL, 0xff, 24),
1074*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP0_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
1075*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP0_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
1076*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP0_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
1077*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP0_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
1078*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP0_POST_SCL_CTRL, 0x3, 0),
1079*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP0_DSP_HACT_ST_END, 0x1fff1fff, 0),
1080*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1fff, 16),
1081*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1fff, 0),
1082*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP0_DSP_VACT_ST_END, 0x1fff1fff, 0),
1083*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP0_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
1084*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP0_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
1085*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP0_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
1086*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 16),
1087*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 17),
1088*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP0_DSP_CTRL, 0x3, 18),
1089*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 20),
1090*4882a593Smuzhiyun 	.dual_channel_en = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 20),
1091*4882a593Smuzhiyun 	.dual_channel_swap = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 21),
1092*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 28),
1093*4882a593Smuzhiyun 	.hdr10_en = VOP_REG(RK3568_OVL_CTRL, 0x1, 4),
1094*4882a593Smuzhiyun 	.hdr_lut_update_en = VOP_REG(RK3568_HDR_LUT_CTRL, 0x1, 0),
1095*4882a593Smuzhiyun 	.hdr_lut_mode = VOP_REG(RK3568_HDR_LUT_CTRL, 0x1, 1),
1096*4882a593Smuzhiyun 	.hdr_lut_mst = VOP_REG(RK3568_HDR_LUT_MST, 0xffffffff, 0),
1097*4882a593Smuzhiyun 	.sdr2hdr_eotf_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 0),
1098*4882a593Smuzhiyun 	.sdr2hdr_r2r_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 1),
1099*4882a593Smuzhiyun 	.sdr2hdr_r2r_mode = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 2),
1100*4882a593Smuzhiyun 	.sdr2hdr_oetf_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 3),
1101*4882a593Smuzhiyun 	.sdr2hdr_bypass_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 8),
1102*4882a593Smuzhiyun 	.sdr2hdr_auto_gating_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 9),
1103*4882a593Smuzhiyun 	.sdr2hdr_path_en = VOP_REG(RK3568_OVL_CTRL, 0x1, 5),
1104*4882a593Smuzhiyun 	.hdr2sdr_en = VOP_REG(RK3568_HDR2SDR_CTRL, 0x1, 0),
1105*4882a593Smuzhiyun 	.hdr2sdr_bypass_en = VOP_REG(RK3568_HDR2SDR_CTRL, 0x1, 8),
1106*4882a593Smuzhiyun 	.hdr2sdr_auto_gating_en = VOP_REG(RK3568_HDR2SDR_CTRL, 0x1, 9),
1107*4882a593Smuzhiyun 	.hdr2sdr_src_min = VOP_REG(RK3568_HDR2SDR_SRC_RANGE, 0x3fff, 0),
1108*4882a593Smuzhiyun 	.hdr2sdr_src_max = VOP_REG(RK3568_HDR2SDR_SRC_RANGE, 0x3fff, 16),
1109*4882a593Smuzhiyun 	.hdr2sdr_normfaceetf = VOP_REG(RK3568_HDR2SDR_NORMFACEETF, 0x7ff, 0),
1110*4882a593Smuzhiyun 	.hdr2sdr_dst_min = VOP_REG(RK3568_HDR2SDR_DST_RANGE, 0xffff, 0),
1111*4882a593Smuzhiyun 	.hdr2sdr_dst_max = VOP_REG(RK3568_HDR2SDR_DST_RANGE, 0xffff, 16),
1112*4882a593Smuzhiyun 	.hdr2sdr_normfacgamma = VOP_REG(RK3568_HDR2SDR_NORMFACCGAMMA, 0xffff, 0),
1113*4882a593Smuzhiyun 	.hdr2sdr_eetf_oetf_y0_offset = RK3568_HDR_EETF_OETF_Y0,
1114*4882a593Smuzhiyun 	.hdr2sdr_sat_y0_offset = RK3568_HDR_SAT_Y0,
1115*4882a593Smuzhiyun 	.sdr2hdr_eotf_oetf_y0_offset = RK3568_HDR_EOTF_OETF_Y0,
1116*4882a593Smuzhiyun 	.sdr2hdr_oetf_dx_pow1_offset = RK3568_HDR_OETF_DX_POW1,
1117*4882a593Smuzhiyun 	.sdr2hdr_oetf_xn1_offset = RK3568_HDR_OETF_XN1,
1118*4882a593Smuzhiyun 	.hdr_src_color_ctrl = VOP_REG(RK3568_HDR0_SRC_COLOR_CTRL, 0xffffffff, 0),
1119*4882a593Smuzhiyun 	.hdr_dst_color_ctrl = VOP_REG(RK3568_HDR0_DST_COLOR_CTRL, 0xffffffff, 0),
1120*4882a593Smuzhiyun 	.hdr_src_alpha_ctrl = VOP_REG(RK3568_HDR0_SRC_ALPHA_CTRL, 0xffffffff, 0),
1121*4882a593Smuzhiyun 	.hdr_dst_alpha_ctrl = VOP_REG(RK3568_HDR0_DST_ALPHA_CTRL, 0xffffffff, 0),
1122*4882a593Smuzhiyun 
1123*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3568_VP0_BCSH_BCS, 0xff, 0),
1124*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3568_VP0_BCSH_BCS, 0x1ff, 8),
1125*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3568_VP0_BCSH_BCS, 0x3ff, 20),
1126*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3568_VP0_BCSH_BCS, 0x3, 30),
1127*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3568_VP0_BCSH_H, 0x1ff, 0),
1128*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3568_VP0_BCSH_H, 0x1ff, 16),
1129*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x3, 6),
1130*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x1, 4),
1131*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x3, 2),
1132*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x1, 0),
1133*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3568_VP0_BCSH_COLOR_BAR, 0x1, 31),
1134*4882a593Smuzhiyun 
1135*4882a593Smuzhiyun 	.cubic_lut_en = VOP_REG(RK3568_VP0_3D_LUT_CTRL, 0x1, 0),
1136*4882a593Smuzhiyun 	.cubic_lut_update_en = VOP_REG(RK3568_VP0_3D_LUT_CTRL, 0x1, 2),
1137*4882a593Smuzhiyun 	.cubic_lut_mst = VOP_REG(RK3568_VP0_3D_LUT_MST, 0xffffffff, 0),
1138*4882a593Smuzhiyun 
1139*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP0_COLOR_BAR_CTRL, 0x1, 1),
1140*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP0_COLOR_BAR_CTRL, 0x1, 0),
1141*4882a593Smuzhiyun };
1142*4882a593Smuzhiyun 
1143*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3568_vop_vp1_regs = {
1144*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 1),
1145*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3568_OVL_CTRL, 0x1, 1),
1146*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP1_DSP_BG, 0x3fffffff, 0),
1147*4882a593Smuzhiyun 	.port_mux = VOP_REG(RK3568_OVL_PORT_SEL, 0xf, 4),
1148*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP1_DSP_CTRL, 0xf, 0),
1149*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31),
1150*4882a593Smuzhiyun 	.core_dclk_div = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 4),
1151*4882a593Smuzhiyun 	.dclk_div2 = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 4),
1152*4882a593Smuzhiyun 	.dclk_div2_phase_lock = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 5),
1153*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 5),
1154*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 6),
1155*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 7),
1156*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1f, 8),
1157*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 13),
1158*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 15),
1159*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP1_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
1160*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3568_VP1_BG_MIX_CTRL, 0xff, 24),
1161*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP1_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
1162*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP1_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
1163*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP1_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
1164*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP1_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
1165*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP1_POST_SCL_CTRL, 0x3, 0),
1166*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP1_DSP_HACT_ST_END, 0x1fff1fff, 0),
1167*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP1_DSP_VTOTAL_VS_END, 0x1fff, 16),
1168*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP1_DSP_VTOTAL_VS_END, 0x1fff, 0),
1169*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP1_DSP_VACT_ST_END, 0x1fff1fff, 0),
1170*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP1_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
1171*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP1_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
1172*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP1_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
1173*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 16),
1174*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 17),
1175*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP1_DSP_CTRL, 0x3, 18),
1176*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 20),
1177*4882a593Smuzhiyun 	.dual_channel_en = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 20),
1178*4882a593Smuzhiyun 	.dual_channel_swap = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 21),
1179*4882a593Smuzhiyun 
1180*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3568_VP1_BCSH_BCS, 0xff, 0),
1181*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3568_VP1_BCSH_BCS, 0x1ff, 8),
1182*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3568_VP1_BCSH_BCS, 0x3ff, 20),
1183*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3568_VP1_BCSH_BCS, 0x3, 30),
1184*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3568_VP1_BCSH_H, 0x1ff, 0),
1185*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3568_VP1_BCSH_H, 0x1ff, 16),
1186*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x3, 6),
1187*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x1, 4),
1188*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x3, 2),
1189*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x1, 0),
1190*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3568_VP1_BCSH_COLOR_BAR, 0x1, 31),
1191*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 28),
1192*4882a593Smuzhiyun 
1193*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP1_COLOR_BAR_CTRL, 0x1, 1),
1194*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP1_COLOR_BAR_CTRL, 0x1, 0),
1195*4882a593Smuzhiyun };
1196*4882a593Smuzhiyun 
1197*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3568_vop_vp2_regs = {
1198*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 2),
1199*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3568_OVL_CTRL, 0x1, 2),
1200*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP2_DSP_BG, 0x3fffffff, 0),
1201*4882a593Smuzhiyun 	.port_mux = VOP_REG(RK3568_OVL_PORT_SEL, 0xf, 8),
1202*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP2_DSP_CTRL, 0xf, 0),
1203*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 31),
1204*4882a593Smuzhiyun 	.core_dclk_div = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 4),
1205*4882a593Smuzhiyun 	.dclk_div2 = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 4),
1206*4882a593Smuzhiyun 	.dclk_div2_phase_lock = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 5),
1207*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 5),
1208*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 6),
1209*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 7),
1210*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1f, 8),
1211*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 13),
1212*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 15),
1213*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP2_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
1214*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3568_VP2_BG_MIX_CTRL, 0xff, 24),
1215*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP2_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
1216*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP2_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
1217*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP2_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
1218*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP2_POST_SCL_CTRL, 0x3, 0),
1219*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP2_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
1220*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP2_DSP_HACT_ST_END, 0x1fff1fff, 0),
1221*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP2_DSP_VTOTAL_VS_END, 0x1fff, 16),
1222*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP2_DSP_VTOTAL_VS_END, 0x1fff, 0),
1223*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP2_DSP_VACT_ST_END, 0x1fff1fff, 0),
1224*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP2_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
1225*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP2_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
1226*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP2_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
1227*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 16),
1228*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 17),
1229*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP2_DSP_CTRL, 0x3, 18),
1230*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 20),
1231*4882a593Smuzhiyun 	.dual_channel_en = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 20),
1232*4882a593Smuzhiyun 	.dual_channel_swap = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 21),
1233*4882a593Smuzhiyun 
1234*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3568_VP2_BCSH_BCS, 0xff, 0),
1235*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3568_VP2_BCSH_BCS, 0x1ff, 8),
1236*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3568_VP2_BCSH_BCS, 0x3ff, 20),
1237*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3568_VP2_BCSH_BCS, 0x3, 30),
1238*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3568_VP2_BCSH_H, 0x1ff, 0),
1239*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3568_VP2_BCSH_H, 0x1ff, 16),
1240*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3568_VP2_BCSH_CTRL, 0x3, 6),
1241*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3568_VP2_BCSH_CTRL, 0x1, 4),
1242*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3568_VP2_BCSH_CTRL, 0x3, 2),
1243*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3568_VP2_BCSH_CTRL, 0x1, 0),
1244*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3568_VP2_BCSH_COLOR_BAR, 0x1, 31),
1245*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 28),
1246*4882a593Smuzhiyun 
1247*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP2_COLOR_BAR_CTRL, 0x1, 1),
1248*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP2_COLOR_BAR_CTRL, 0x1, 0),
1249*4882a593Smuzhiyun };
1250*4882a593Smuzhiyun 
1251*4882a593Smuzhiyun static const struct vop2_video_port_data rk3568_vop_video_ports[] = {
1252*4882a593Smuzhiyun 	{
1253*4882a593Smuzhiyun 	 .id = 0,
1254*4882a593Smuzhiyun 	 .soc_id = { 0x3568, 0x3566 },
1255*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE |
1256*4882a593Smuzhiyun 			VOP_FEATURE_HDR10 | VOP_FEATURE_OVERSCAN,
1257*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
1258*4882a593Smuzhiyun 	 .cubic_lut_len = 729, /* 9x9x9 */
1259*4882a593Smuzhiyun 	 .max_output = { 4096, 4096 },
1260*4882a593Smuzhiyun 	 .pre_scan_max_dly = { 69, 53, 53, 42 },
1261*4882a593Smuzhiyun 	 .intr = &rk3568_vp0_intr,
1262*4882a593Smuzhiyun 	 .hdr_table = &rk3568_vop_hdr_table,
1263*4882a593Smuzhiyun 	 .regs = &rk3568_vop_vp0_regs,
1264*4882a593Smuzhiyun 	},
1265*4882a593Smuzhiyun 	{
1266*4882a593Smuzhiyun 	 .id = 1,
1267*4882a593Smuzhiyun 	 .soc_id = { 0x3568, 0x3566 },
1268*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
1269*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
1270*4882a593Smuzhiyun 	 .max_output = { 2048, 2048 },
1271*4882a593Smuzhiyun 	 .pre_scan_max_dly = { 40, 40, 40, 40 },
1272*4882a593Smuzhiyun 	 .intr = &rk3568_vp1_intr,
1273*4882a593Smuzhiyun 	 .regs = &rk3568_vop_vp1_regs,
1274*4882a593Smuzhiyun 	},
1275*4882a593Smuzhiyun 	{
1276*4882a593Smuzhiyun 	 .id = 2,
1277*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_ALPHA_SCALE | VOP_FEATURE_OVERSCAN,
1278*4882a593Smuzhiyun 	 .soc_id = { 0x3568, 0x3566 },
1279*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
1280*4882a593Smuzhiyun 	 .max_output = { 1920, 1920 },
1281*4882a593Smuzhiyun 	 .pre_scan_max_dly = { 40, 40, 40, 40 },
1282*4882a593Smuzhiyun 	 .intr = &rk3568_vp2_intr,
1283*4882a593Smuzhiyun 	 .regs = &rk3568_vop_vp2_regs,
1284*4882a593Smuzhiyun 	},
1285*4882a593Smuzhiyun };
1286*4882a593Smuzhiyun 
1287*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3588_vop_vp0_regs = {
1288*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 0),
1289*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3568_OVL_CTRL, 0x1, 0),
1290*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP0_DSP_BG, 0xffffffff, 0),
1291*4882a593Smuzhiyun 	.port_mux = VOP_REG(RK3568_OVL_PORT_SEL, 0xf, 0),
1292*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP0_DSP_CTRL, 0xf, 0),
1293*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 5),
1294*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 6),
1295*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 7),
1296*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1f, 8),
1297*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 13),
1298*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 15),
1299*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 16),
1300*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 17),
1301*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP0_DSP_CTRL, 0x3, 18),
1302*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 20),
1303*4882a593Smuzhiyun 	.gamma_update_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 22),
1304*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 28),
1305*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31),
1306*4882a593Smuzhiyun 	.dclk_src_sel = VOP_REG(RK3568_LUT_PORT_SEL, 0x1, 30),
1307*4882a593Smuzhiyun 	.splice_en = VOP_REG(RK3568_LUT_PORT_SEL, 0x1, 16),
1308*4882a593Smuzhiyun 	.dclk_core_div = VOP_REG(RK3568_VP0_CLK_CTRL, 0x3, 0),
1309*4882a593Smuzhiyun 	.dclk_out_div = VOP_REG(RK3568_VP0_CLK_CTRL, 0x3, 2),
1310*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP0_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
1311*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3568_VP0_BG_MIX_CTRL, 0xff, 24),
1312*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP0_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
1313*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP0_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
1314*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP0_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
1315*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP0_POST_SCL_CTRL, 0x3, 0),
1316*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP0_DSP_HTOTAL_HS_END, 0xffffffff, 0),
1317*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP0_DSP_HACT_ST_END, 0xffffffff, 0),
1318*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1fff, 16),
1319*4882a593Smuzhiyun 	.sw_dsp_vtotal_imd = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1, 15),
1320*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP0_DSP_VTOTAL_VS_END, 0x1fff, 0),
1321*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP0_DSP_VACT_ST_END, 0x1fff1fff, 0),
1322*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP0_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
1323*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP0_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
1324*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP0_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
1325*4882a593Smuzhiyun 	.dual_channel_en = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 20),
1326*4882a593Smuzhiyun 	.dual_channel_swap = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 21),
1327*4882a593Smuzhiyun 	.hdr10_en = VOP_REG(RK3568_OVL_CTRL, 0x1, 4),
1328*4882a593Smuzhiyun 	.hdr_lut_update_en = VOP_REG(RK3568_HDR_LUT_CTRL, 0x1, 0),
1329*4882a593Smuzhiyun 	.hdr_lut_mode = VOP_REG(RK3568_HDR_LUT_CTRL, 0x1, 1),
1330*4882a593Smuzhiyun 	.hdr_lut_mst = VOP_REG(RK3568_HDR_LUT_MST, 0xffffffff, 0),
1331*4882a593Smuzhiyun 	.sdr2hdr_eotf_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 0),
1332*4882a593Smuzhiyun 	.sdr2hdr_r2r_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 1),
1333*4882a593Smuzhiyun 	.sdr2hdr_r2r_mode = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 2),
1334*4882a593Smuzhiyun 	.sdr2hdr_oetf_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 3),
1335*4882a593Smuzhiyun 	.sdr2hdr_bypass_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 8),
1336*4882a593Smuzhiyun 	.sdr2hdr_auto_gating_en = VOP_REG(RK3568_SDR2HDR_CTRL, 0x1, 9),
1337*4882a593Smuzhiyun 	.sdr2hdr_path_en = VOP_REG(RK3568_OVL_CTRL, 0x1, 5),
1338*4882a593Smuzhiyun 	.hdr2sdr_en = VOP_REG(RK3568_HDR2SDR_CTRL, 0x1, 0),
1339*4882a593Smuzhiyun 	.hdr2sdr_bypass_en = VOP_REG(RK3568_HDR2SDR_CTRL, 0x1, 8),
1340*4882a593Smuzhiyun 	.hdr2sdr_auto_gating_en = VOP_REG(RK3568_HDR2SDR_CTRL, 0x1, 9),
1341*4882a593Smuzhiyun 	.hdr2sdr_src_min = VOP_REG(RK3568_HDR2SDR_SRC_RANGE, 0x3fff, 0),
1342*4882a593Smuzhiyun 	.hdr2sdr_src_max = VOP_REG(RK3568_HDR2SDR_SRC_RANGE, 0x3fff, 16),
1343*4882a593Smuzhiyun 	.hdr2sdr_normfaceetf = VOP_REG(RK3568_HDR2SDR_NORMFACEETF, 0x7ff, 0),
1344*4882a593Smuzhiyun 	.hdr2sdr_dst_min = VOP_REG(RK3568_HDR2SDR_DST_RANGE, 0xffff, 0),
1345*4882a593Smuzhiyun 	.hdr2sdr_dst_max = VOP_REG(RK3568_HDR2SDR_DST_RANGE, 0xffff, 16),
1346*4882a593Smuzhiyun 	.hdr2sdr_normfacgamma = VOP_REG(RK3568_HDR2SDR_NORMFACCGAMMA, 0xffff, 0),
1347*4882a593Smuzhiyun 	.hdr2sdr_eetf_oetf_y0_offset = RK3568_HDR_EETF_OETF_Y0,
1348*4882a593Smuzhiyun 	.hdr2sdr_sat_y0_offset = RK3568_HDR_SAT_Y0,
1349*4882a593Smuzhiyun 	.sdr2hdr_eotf_oetf_y0_offset = RK3568_HDR_EOTF_OETF_Y0,
1350*4882a593Smuzhiyun 	.sdr2hdr_oetf_dx_pow1_offset = RK3568_HDR_OETF_DX_POW1,
1351*4882a593Smuzhiyun 	.sdr2hdr_oetf_xn1_offset = RK3568_HDR_OETF_XN1,
1352*4882a593Smuzhiyun 	.hdr_src_color_ctrl = VOP_REG(RK3568_HDR0_SRC_COLOR_CTRL, 0xffffffff, 0),
1353*4882a593Smuzhiyun 	.hdr_dst_color_ctrl = VOP_REG(RK3568_HDR0_DST_COLOR_CTRL, 0xffffffff, 0),
1354*4882a593Smuzhiyun 	.hdr_src_alpha_ctrl = VOP_REG(RK3568_HDR0_SRC_ALPHA_CTRL, 0xffffffff, 0),
1355*4882a593Smuzhiyun 	.hdr_dst_alpha_ctrl = VOP_REG(RK3568_HDR0_DST_ALPHA_CTRL, 0xffffffff, 0),
1356*4882a593Smuzhiyun 
1357*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3568_VP0_BCSH_BCS, 0xff, 0),
1358*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3568_VP0_BCSH_BCS, 0x1ff, 8),
1359*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3568_VP0_BCSH_BCS, 0x3ff, 20),
1360*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3568_VP0_BCSH_BCS, 0x3, 30),
1361*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3568_VP0_BCSH_H, 0x1ff, 0),
1362*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3568_VP0_BCSH_H, 0x1ff, 16),
1363*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x3, 6),
1364*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x1, 4),
1365*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x3, 2),
1366*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3568_VP0_BCSH_CTRL, 0x1, 0),
1367*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3568_VP0_BCSH_COLOR_BAR, 0x1, 31),
1368*4882a593Smuzhiyun 	.edpi_te_en = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 28),
1369*4882a593Smuzhiyun 	.edpi_wms_hold_en = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 30),
1370*4882a593Smuzhiyun 	.edpi_wms_fs = VOP_REG(RK3568_VP0_DUAL_CHANNEL_CTRL, 0x1, 31),
1371*4882a593Smuzhiyun 
1372*4882a593Smuzhiyun 	.lut_dma_rid = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0xf, 4),
1373*4882a593Smuzhiyun 	.cubic_lut_en = VOP_REG(RK3568_VP0_3D_LUT_CTRL, 0x1, 0),
1374*4882a593Smuzhiyun 	.cubic_lut_update_en = VOP_REG(RK3568_VP0_3D_LUT_CTRL, 0x1, 2),
1375*4882a593Smuzhiyun 	.cubic_lut_mst = VOP_REG(RK3568_VP0_3D_LUT_MST, 0xffffffff, 0),
1376*4882a593Smuzhiyun 
1377*4882a593Smuzhiyun 	.line_flag_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 20),
1378*4882a593Smuzhiyun 	.dsp_hold_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 24),
1379*4882a593Smuzhiyun 	.almost_full_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 28),
1380*4882a593Smuzhiyun 
1381*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP0_COLOR_BAR_CTRL, 0x1, 1),
1382*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP0_COLOR_BAR_CTRL, 0x1, 0),
1383*4882a593Smuzhiyun };
1384*4882a593Smuzhiyun 
1385*4882a593Smuzhiyun /*
1386*4882a593Smuzhiyun  * VP1 can splice with VP0 to output hdisplay > 4096,
1387*4882a593Smuzhiyun  * VP1 has a another HDR10 controller, but share the
1388*4882a593Smuzhiyun  * same eotf curve with VP1.
1389*4882a593Smuzhiyun  */
1390*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3588_vop_vp1_regs = {
1391*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 1),
1392*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3568_OVL_CTRL, 0x1, 1),
1393*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP1_DSP_BG, 0xffffffff, 0),
1394*4882a593Smuzhiyun 	.port_mux = VOP_REG(RK3568_OVL_PORT_SEL, 0xf, 4),
1395*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP1_DSP_CTRL, 0xf, 0),
1396*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 5),
1397*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 6),
1398*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 7),
1399*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1f, 8),
1400*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 13),
1401*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 15),
1402*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 16),
1403*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 17),
1404*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP1_DSP_CTRL, 0x3, 18),
1405*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 20),
1406*4882a593Smuzhiyun 	.gamma_update_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 22),
1407*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 28),
1408*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31),
1409*4882a593Smuzhiyun 	.dclk_core_div = VOP_REG(RK3568_VP1_CLK_CTRL, 0x3, 0),
1410*4882a593Smuzhiyun 	.dclk_out_div = VOP_REG(RK3568_VP1_CLK_CTRL, 0x3, 2),
1411*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP1_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
1412*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3568_VP1_BG_MIX_CTRL, 0xff, 24),
1413*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP1_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
1414*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP1_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
1415*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP1_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
1416*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP1_POST_SCL_CTRL, 0x3, 0),
1417*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP1_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
1418*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP1_DSP_HACT_ST_END, 0x1fff1fff, 0),
1419*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP1_DSP_VTOTAL_VS_END, 0x1fff, 16),
1420*4882a593Smuzhiyun 	.sw_dsp_vtotal_imd = VOP_REG(RK3568_VP1_DSP_VTOTAL_VS_END, 0x1, 15),
1421*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP1_DSP_VTOTAL_VS_END, 0x1fff, 0),
1422*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP1_DSP_VACT_ST_END, 0x1fff1fff, 0),
1423*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP1_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
1424*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP1_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
1425*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP1_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
1426*4882a593Smuzhiyun 	.dual_channel_en = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 20),
1427*4882a593Smuzhiyun 	.dual_channel_swap = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 21),
1428*4882a593Smuzhiyun 	.hdr10_en = VOP_REG(RK3568_OVL_CTRL, 0x1, 24),
1429*4882a593Smuzhiyun 	.hdr_lut_update_en = VOP_REG(RK3568_HDR_LUT_CTRL, 0x1, 0),
1430*4882a593Smuzhiyun 	.hdr_lut_mode = VOP_REG(RK3568_HDR_LUT_CTRL, 0x1, 1),
1431*4882a593Smuzhiyun 	.hdr_lut_mst = VOP_REG(RK3568_HDR_LUT_MST, 0xffffffff, 0),
1432*4882a593Smuzhiyun 	.sdr2hdr_eotf_en = VOP_REG(RK3568_SDR2HDR_CTRL1, 0x1, 0),
1433*4882a593Smuzhiyun 	.sdr2hdr_r2r_en = VOP_REG(RK3568_SDR2HDR_CTRL1, 0x1, 1),
1434*4882a593Smuzhiyun 	.sdr2hdr_r2r_mode = VOP_REG(RK3568_SDR2HDR_CTRL1, 0x1, 2),
1435*4882a593Smuzhiyun 	.sdr2hdr_oetf_en = VOP_REG(RK3568_SDR2HDR_CTRL1, 0x1, 3),
1436*4882a593Smuzhiyun 	.sdr2hdr_bypass_en = VOP_REG(RK3568_SDR2HDR_CTRL1, 0x1, 8),
1437*4882a593Smuzhiyun 	.sdr2hdr_auto_gating_en = VOP_REG(RK3568_SDR2HDR_CTRL1, 0x1, 9),
1438*4882a593Smuzhiyun 	.sdr2hdr_path_en = VOP_REG(RK3568_OVL_CTRL, 0x1, 25),
1439*4882a593Smuzhiyun 	.hdr2sdr_en = VOP_REG(RK3568_HDR2SDR_CTRL1, 0x1, 0),
1440*4882a593Smuzhiyun 	.hdr2sdr_bypass_en = VOP_REG(RK3568_HDR2SDR_CTRL1, 0x1, 8),
1441*4882a593Smuzhiyun 	.hdr2sdr_auto_gating_en = VOP_REG(RK3568_HDR2SDR_CTRL1, 0x1, 9),
1442*4882a593Smuzhiyun 	.hdr2sdr_src_min = VOP_REG(RK3568_HDR2SDR_SRC_RANGE, 0x3fff, 0),
1443*4882a593Smuzhiyun 	.hdr2sdr_src_max = VOP_REG(RK3568_HDR2SDR_SRC_RANGE, 0x3fff, 16),
1444*4882a593Smuzhiyun 	.hdr2sdr_normfaceetf = VOP_REG(RK3568_HDR2SDR_NORMFACEETF, 0x7ff, 0),
1445*4882a593Smuzhiyun 	.hdr2sdr_dst_min = VOP_REG(RK3568_HDR2SDR_DST_RANGE, 0xffff, 0),
1446*4882a593Smuzhiyun 	.hdr2sdr_dst_max = VOP_REG(RK3568_HDR2SDR_DST_RANGE, 0xffff, 16),
1447*4882a593Smuzhiyun 	.hdr2sdr_normfacgamma = VOP_REG(RK3568_HDR2SDR_NORMFACCGAMMA, 0xffff, 0),
1448*4882a593Smuzhiyun 	.hdr2sdr_eetf_oetf_y0_offset = RK3568_HDR_EETF_OETF_Y0,
1449*4882a593Smuzhiyun 	.hdr2sdr_sat_y0_offset = RK3568_HDR_SAT_Y0,
1450*4882a593Smuzhiyun 	.sdr2hdr_eotf_oetf_y0_offset = RK3568_HDR_EOTF_OETF_Y0,
1451*4882a593Smuzhiyun 	.sdr2hdr_oetf_dx_pow1_offset = RK3568_HDR_OETF_DX_POW1,
1452*4882a593Smuzhiyun 	.sdr2hdr_oetf_xn1_offset = RK3568_HDR_OETF_XN1,
1453*4882a593Smuzhiyun 	.hdr_src_color_ctrl = VOP_REG(RK3568_HDR1_SRC_COLOR_CTRL, 0xffffffff, 0),
1454*4882a593Smuzhiyun 	.hdr_dst_color_ctrl = VOP_REG(RK3568_HDR1_DST_COLOR_CTRL, 0xffffffff, 0),
1455*4882a593Smuzhiyun 	.hdr_src_alpha_ctrl = VOP_REG(RK3568_HDR1_SRC_ALPHA_CTRL, 0xffffffff, 0),
1456*4882a593Smuzhiyun 	.hdr_dst_alpha_ctrl = VOP_REG(RK3568_HDR1_DST_ALPHA_CTRL, 0xffffffff, 0),
1457*4882a593Smuzhiyun 
1458*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3568_VP1_BCSH_BCS, 0xff, 0),
1459*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3568_VP1_BCSH_BCS, 0x1ff, 8),
1460*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3568_VP1_BCSH_BCS, 0x3ff, 20),
1461*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3568_VP1_BCSH_BCS, 0x3, 30),
1462*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3568_VP1_BCSH_H, 0x1ff, 0),
1463*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3568_VP1_BCSH_H, 0x1ff, 16),
1464*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x3, 6),
1465*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x1, 4),
1466*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x3, 2),
1467*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3568_VP1_BCSH_CTRL, 0x1, 0),
1468*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3568_VP1_BCSH_COLOR_BAR, 0x1, 31),
1469*4882a593Smuzhiyun 	.edpi_te_en = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 28),
1470*4882a593Smuzhiyun 	.edpi_wms_hold_en = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 30),
1471*4882a593Smuzhiyun 	.edpi_wms_fs = VOP_REG(RK3568_VP1_DUAL_CHANNEL_CTRL, 0x1, 31),
1472*4882a593Smuzhiyun 
1473*4882a593Smuzhiyun 	.lut_dma_rid = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0xf, 4),
1474*4882a593Smuzhiyun 	.cubic_lut_en = VOP_REG(RK3588_VP1_3D_LUT_CTRL, 0x1, 0),
1475*4882a593Smuzhiyun 	.cubic_lut_update_en = VOP_REG(RK3588_VP1_3D_LUT_CTRL, 0x1, 2),
1476*4882a593Smuzhiyun 	.cubic_lut_mst = VOP_REG(RK3588_VP1_3D_LUT_MST, 0xffffffff, 0),
1477*4882a593Smuzhiyun 
1478*4882a593Smuzhiyun 	.line_flag_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 21),
1479*4882a593Smuzhiyun 	.dsp_hold_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 25),
1480*4882a593Smuzhiyun 	.almost_full_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 29),
1481*4882a593Smuzhiyun 
1482*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP1_COLOR_BAR_CTRL, 0x1, 1),
1483*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP1_COLOR_BAR_CTRL, 0x1, 0),
1484*4882a593Smuzhiyun };
1485*4882a593Smuzhiyun 
1486*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3588_vop_vp2_regs = {
1487*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 2),
1488*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3568_OVL_CTRL, 0x1, 2),
1489*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3568_VP2_DSP_BG, 0xffffffff, 0),
1490*4882a593Smuzhiyun 	.port_mux = VOP_REG(RK3568_OVL_PORT_SEL, 0xf, 8),
1491*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3568_VP2_DSP_CTRL, 0xf, 0),
1492*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 5),
1493*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 6),
1494*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 7),
1495*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1f, 8),
1496*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 13),
1497*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 15),
1498*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 16),
1499*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 17),
1500*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3568_VP2_DSP_CTRL, 0x3, 18),
1501*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 20),
1502*4882a593Smuzhiyun 	.gamma_update_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 22),
1503*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 28),
1504*4882a593Smuzhiyun 	.standby = VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 31),
1505*4882a593Smuzhiyun 	.dclk_src_sel = VOP_REG(RK3568_LUT_PORT_SEL, 0x1, 31),
1506*4882a593Smuzhiyun 	.dclk_core_div = VOP_REG(RK3568_VP2_CLK_CTRL, 0x3, 0),
1507*4882a593Smuzhiyun 	.dclk_out_div = VOP_REG(RK3568_VP2_CLK_CTRL, 0x3, 2),
1508*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3568_VP2_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
1509*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3568_VP2_BG_MIX_CTRL, 0xff, 24),
1510*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3568_VP2_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
1511*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3568_VP2_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
1512*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3568_VP2_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
1513*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3568_VP2_POST_SCL_CTRL, 0x3, 0),
1514*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3568_VP2_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
1515*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3568_VP2_DSP_HACT_ST_END, 0x1fff1fff, 0),
1516*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3568_VP2_DSP_VTOTAL_VS_END, 0x1fff, 16),
1517*4882a593Smuzhiyun 	.sw_dsp_vtotal_imd = VOP_REG(RK3568_VP2_DSP_VTOTAL_VS_END, 0x1, 15),
1518*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3568_VP2_DSP_VTOTAL_VS_END, 0x1fff, 0),
1519*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3568_VP2_DSP_VACT_ST_END, 0x1fff1fff, 0),
1520*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3568_VP2_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
1521*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3568_VP2_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
1522*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3568_VP2_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
1523*4882a593Smuzhiyun 	.dual_channel_en = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 20),
1524*4882a593Smuzhiyun 	.dual_channel_swap = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 21),
1525*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3568_VP2_BCSH_BCS, 0xff, 0),
1526*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3568_VP2_BCSH_BCS, 0x1ff, 8),
1527*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3568_VP2_BCSH_BCS, 0x3ff, 20),
1528*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3568_VP2_BCSH_BCS, 0x3, 30),
1529*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3568_VP2_BCSH_H, 0x1ff, 0),
1530*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3568_VP2_BCSH_H, 0x1ff, 16),
1531*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3568_VP2_BCSH_CTRL, 0x3, 6),
1532*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3568_VP2_BCSH_CTRL, 0x1, 4),
1533*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3568_VP2_BCSH_CTRL, 0x3, 2),
1534*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3568_VP2_BCSH_CTRL, 0x1, 0),
1535*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3568_VP2_BCSH_COLOR_BAR, 0x1, 31),
1536*4882a593Smuzhiyun 	.edpi_te_en = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 28),
1537*4882a593Smuzhiyun 	.edpi_wms_hold_en = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 30),
1538*4882a593Smuzhiyun 	.edpi_wms_fs = VOP_REG(RK3568_VP2_DUAL_CHANNEL_CTRL, 0x1, 31),
1539*4882a593Smuzhiyun 
1540*4882a593Smuzhiyun 	.lut_dma_rid = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0xf, 4),
1541*4882a593Smuzhiyun 	.cubic_lut_en = VOP_REG(RK3588_VP2_3D_LUT_CTRL, 0x1, 0),
1542*4882a593Smuzhiyun 	.cubic_lut_update_en = VOP_REG(RK3588_VP2_3D_LUT_CTRL, 0x1, 2),
1543*4882a593Smuzhiyun 	.cubic_lut_mst = VOP_REG(RK3588_VP2_3D_LUT_MST, 0xffffffff, 0),
1544*4882a593Smuzhiyun 
1545*4882a593Smuzhiyun 	.line_flag_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 22),
1546*4882a593Smuzhiyun 	.dsp_hold_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 26),
1547*4882a593Smuzhiyun 	.almost_full_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 30),
1548*4882a593Smuzhiyun 
1549*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3568_VP2_COLOR_BAR_CTRL, 0x1, 1),
1550*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3568_VP2_COLOR_BAR_CTRL, 0x1, 0),
1551*4882a593Smuzhiyun };
1552*4882a593Smuzhiyun 
1553*4882a593Smuzhiyun static const struct vop2_video_port_regs rk3588_vop_vp3_regs = {
1554*4882a593Smuzhiyun 	.cfg_done = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 3),
1555*4882a593Smuzhiyun 	.overlay_mode = VOP_REG(RK3568_OVL_CTRL, 0x1, 3),
1556*4882a593Smuzhiyun 	.port_mux = VOP_REG(RK3568_OVL_PORT_SEL, 0xf, 12),
1557*4882a593Smuzhiyun 	.dsp_background = VOP_REG(RK3588_VP3_DSP_BG, 0xffffffff, 0),
1558*4882a593Smuzhiyun 	.out_mode = VOP_REG(RK3588_VP3_DSP_CTRL, 0xf, 0),
1559*4882a593Smuzhiyun 	.p2i_en = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 5),
1560*4882a593Smuzhiyun 	.dsp_filed_pol = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 6),
1561*4882a593Smuzhiyun 	.dsp_interlace = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 7),
1562*4882a593Smuzhiyun 	.dsp_data_swap = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1f, 8),
1563*4882a593Smuzhiyun 	.dsp_x_mir_en = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 13),
1564*4882a593Smuzhiyun 	.post_dsp_out_r2y = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 15),
1565*4882a593Smuzhiyun 	.pre_dither_down_en = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 16),
1566*4882a593Smuzhiyun 	.dither_down_en = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 17),
1567*4882a593Smuzhiyun 	.dither_down_sel = VOP_REG(RK3588_VP3_DSP_CTRL, 0x3, 18),
1568*4882a593Smuzhiyun 	.dither_down_mode = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 20),
1569*4882a593Smuzhiyun 	.gamma_update_en = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 22),
1570*4882a593Smuzhiyun 	.dsp_lut_en = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 28),
1571*4882a593Smuzhiyun 	.standby = VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 31),
1572*4882a593Smuzhiyun 	.dclk_src_sel = VOP_REG(RK3568_LUT_PORT_SEL, 0x1, 30),
1573*4882a593Smuzhiyun 	.dclk_core_div = VOP_REG(RK3568_VP3_CLK_CTRL, 0x3, 0),
1574*4882a593Smuzhiyun 	.dclk_out_div = VOP_REG(RK3568_VP3_CLK_CTRL, 0x3, 2),
1575*4882a593Smuzhiyun 	.pre_scan_htiming = VOP_REG(RK3588_VP3_PRE_SCAN_HTIMING, 0x1fff1fff, 0),
1576*4882a593Smuzhiyun 	.bg_dly = VOP_REG(RK3588_VP3_BG_MIX_CTRL, 0xff, 24),
1577*4882a593Smuzhiyun 	.hpost_st_end = VOP_REG(RK3588_VP3_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
1578*4882a593Smuzhiyun 	.vpost_st_end = VOP_REG(RK3588_VP3_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
1579*4882a593Smuzhiyun 	.post_scl_factor = VOP_REG(RK3588_VP3_POST_SCL_FACTOR_YRGB, 0xffffffff, 0),
1580*4882a593Smuzhiyun 	.post_scl_ctrl = VOP_REG(RK3588_VP3_POST_SCL_CTRL, 0x3, 0),
1581*4882a593Smuzhiyun 	.htotal_pw = VOP_REG(RK3588_VP3_DSP_HTOTAL_HS_END, 0x1fff1fff, 0),
1582*4882a593Smuzhiyun 	.hact_st_end = VOP_REG(RK3588_VP3_DSP_HACT_ST_END, 0x1fff1fff, 0),
1583*4882a593Smuzhiyun 	.dsp_vtotal = VOP_REG(RK3588_VP3_DSP_VTOTAL_VS_END, 0x1fff, 16),
1584*4882a593Smuzhiyun 	.sw_dsp_vtotal_imd = VOP_REG(RK3588_VP3_DSP_VTOTAL_VS_END, 0x1, 15),
1585*4882a593Smuzhiyun 	.dsp_vs_end = VOP_REG(RK3588_VP3_DSP_VTOTAL_VS_END, 0x1fff, 0),
1586*4882a593Smuzhiyun 	.vact_st_end = VOP_REG(RK3588_VP3_DSP_VACT_ST_END, 0x1fff1fff, 0),
1587*4882a593Smuzhiyun 	.vact_st_end_f1 = VOP_REG(RK3588_VP3_DSP_VACT_ST_END_F1, 0x1fff1fff, 0),
1588*4882a593Smuzhiyun 	.vs_st_end_f1 = VOP_REG(RK3588_VP3_DSP_VS_ST_END_F1, 0x1fff1fff, 0),
1589*4882a593Smuzhiyun 	.vpost_st_end_f1 = VOP_REG(RK3588_VP3_POST_DSP_VACT_INFO_F1, 0x1fff1fff, 0),
1590*4882a593Smuzhiyun 	.dual_channel_en = VOP_REG(RK3588_VP3_DUAL_CHANNEL_CTRL, 0x1, 20),
1591*4882a593Smuzhiyun 	.dual_channel_swap = VOP_REG(RK3588_VP3_DUAL_CHANNEL_CTRL, 0x1, 21),
1592*4882a593Smuzhiyun 	.bcsh_brightness = VOP_REG(RK3588_VP3_BCSH_BCS, 0xff, 0),
1593*4882a593Smuzhiyun 	.bcsh_contrast = VOP_REG(RK3588_VP3_BCSH_BCS, 0x1ff, 8),
1594*4882a593Smuzhiyun 	.bcsh_sat_con = VOP_REG(RK3588_VP3_BCSH_BCS, 0x3ff, 20),
1595*4882a593Smuzhiyun 	.bcsh_out_mode = VOP_REG(RK3588_VP3_BCSH_BCS, 0x3, 30),
1596*4882a593Smuzhiyun 	.bcsh_sin_hue = VOP_REG(RK3588_VP3_BCSH_H, 0x1ff, 0),
1597*4882a593Smuzhiyun 	.bcsh_cos_hue = VOP_REG(RK3588_VP3_BCSH_H, 0x1ff, 16),
1598*4882a593Smuzhiyun 	.bcsh_r2y_csc_mode = VOP_REG(RK3588_VP3_BCSH_CTRL, 0x3, 6),
1599*4882a593Smuzhiyun 	.bcsh_r2y_en = VOP_REG(RK3588_VP3_BCSH_CTRL, 0x1, 4),
1600*4882a593Smuzhiyun 	.bcsh_y2r_csc_mode = VOP_REG(RK3588_VP3_BCSH_CTRL, 0x3, 2),
1601*4882a593Smuzhiyun 	.bcsh_y2r_en = VOP_REG(RK3588_VP3_BCSH_CTRL, 0x1, 0),
1602*4882a593Smuzhiyun 	.bcsh_en = VOP_REG(RK3588_VP3_BCSH_COLOR_BAR, 0x1, 31),
1603*4882a593Smuzhiyun 	.edpi_te_en = VOP_REG(RK3588_VP3_DUAL_CHANNEL_CTRL, 0x1, 28),
1604*4882a593Smuzhiyun 	.edpi_wms_hold_en = VOP_REG(RK3588_VP3_DUAL_CHANNEL_CTRL, 0x1, 30),
1605*4882a593Smuzhiyun 	.edpi_wms_fs = VOP_REG(RK3588_VP3_DUAL_CHANNEL_CTRL, 0x1, 31),
1606*4882a593Smuzhiyun 
1607*4882a593Smuzhiyun 	.line_flag_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 23),
1608*4882a593Smuzhiyun 	.dsp_hold_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 27),
1609*4882a593Smuzhiyun 	.almost_full_or_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 31),
1610*4882a593Smuzhiyun 
1611*4882a593Smuzhiyun 	.color_bar_mode = VOP_REG(RK3588_VP3_COLOR_BAR_CTRL, 0x1, 1),
1612*4882a593Smuzhiyun 	.color_bar_en = VOP_REG(RK3588_VP3_COLOR_BAR_CTRL, 0x1, 0),
1613*4882a593Smuzhiyun };
1614*4882a593Smuzhiyun 
1615*4882a593Smuzhiyun static const struct vop2_video_port_data rk3588_vop_video_ports[] = {
1616*4882a593Smuzhiyun 	{
1617*4882a593Smuzhiyun 	 .id = 0,
1618*4882a593Smuzhiyun 	 .splice_vp_id = 1,
1619*4882a593Smuzhiyun 	 .lut_dma_rid = 0xd,
1620*4882a593Smuzhiyun 	 .soc_id = { 0x3588, 0x3588 },
1621*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE |
1622*4882a593Smuzhiyun 			VOP_FEATURE_HDR10 | VOP_FEATURE_NEXT_HDR,
1623*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
1624*4882a593Smuzhiyun 	 .cubic_lut_len = 729, /* 9x9x9 */
1625*4882a593Smuzhiyun 	 .dclk_max = 600000000,
1626*4882a593Smuzhiyun 	 .max_output = { 7680, 4320 },
1627*4882a593Smuzhiyun 	 /* hdr2sdr sdr2hdr hdr2hdr sdr2sdr */
1628*4882a593Smuzhiyun 	 .pre_scan_max_dly = { 76, 65, 65, 54 },
1629*4882a593Smuzhiyun 	 .intr = &rk3568_vp0_intr,
1630*4882a593Smuzhiyun 	 .hdr_table = &rk3568_vop_hdr_table,
1631*4882a593Smuzhiyun 	 .regs = &rk3588_vop_vp0_regs,
1632*4882a593Smuzhiyun 	},
1633*4882a593Smuzhiyun 	{
1634*4882a593Smuzhiyun 	 .id = 1,
1635*4882a593Smuzhiyun 	 .lut_dma_rid = 0xe,
1636*4882a593Smuzhiyun 	 .soc_id = { 0x3588, 0x3588 },
1637*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
1638*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
1639*4882a593Smuzhiyun 	 .cubic_lut_len = 729, /* 9x9x9 */
1640*4882a593Smuzhiyun 	 .dclk_max = 600000000,
1641*4882a593Smuzhiyun 	 .max_output = { 4096, 2304 },
1642*4882a593Smuzhiyun 	 .pre_scan_max_dly = { 76, 65, 65, 54 },
1643*4882a593Smuzhiyun 	 .intr = &rk3568_vp1_intr,
1644*4882a593Smuzhiyun 	 /* vp1 share the same hdr curve with vp0 */
1645*4882a593Smuzhiyun 	 .hdr_table = &rk3568_vop_hdr_table,
1646*4882a593Smuzhiyun 	 .regs = &rk3588_vop_vp1_regs,
1647*4882a593Smuzhiyun 	},
1648*4882a593Smuzhiyun 	{
1649*4882a593Smuzhiyun 	 .id = 2,
1650*4882a593Smuzhiyun 	 .lut_dma_rid = 0xe,
1651*4882a593Smuzhiyun 	 .soc_id = { 0x3588, 0x3588 },
1652*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_OUTPUT_10BIT | VOP_FEATURE_ALPHA_SCALE,
1653*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
1654*4882a593Smuzhiyun 	 .cubic_lut_len = 4913, /* 17x17x17 */
1655*4882a593Smuzhiyun 	 .dclk_max = 600000000,
1656*4882a593Smuzhiyun 	 .max_output = { 4096, 2304 },
1657*4882a593Smuzhiyun 	 .pre_scan_max_dly = { 52, 52, 52, 52 },
1658*4882a593Smuzhiyun 	 .intr = &rk3568_vp2_intr,
1659*4882a593Smuzhiyun 	 .regs = &rk3588_vop_vp2_regs,
1660*4882a593Smuzhiyun 	},
1661*4882a593Smuzhiyun 	{
1662*4882a593Smuzhiyun 	 .id = 3,
1663*4882a593Smuzhiyun 	 .soc_id = { 0x3588, 0x3588 },
1664*4882a593Smuzhiyun 	 .feature = VOP_FEATURE_ALPHA_SCALE,
1665*4882a593Smuzhiyun 	 .gamma_lut_len = 1024,
1666*4882a593Smuzhiyun 	 .dclk_max = 200000000,
1667*4882a593Smuzhiyun 	 .max_output = { 2048, 1536 },
1668*4882a593Smuzhiyun 	 .pre_scan_max_dly = { 52, 52, 52, 52 },
1669*4882a593Smuzhiyun 	 .intr = &rk3588_vp3_intr,
1670*4882a593Smuzhiyun 	 .regs = &rk3588_vop_vp3_regs,
1671*4882a593Smuzhiyun 	},
1672*4882a593Smuzhiyun };
1673*4882a593Smuzhiyun 
1674*4882a593Smuzhiyun /*
1675*4882a593Smuzhiyun  * HDMI/eDP infterface pixclk and dclk are independent of each other.
1676*4882a593Smuzhiyun  * MIPI and DP interface pixclk and dclk are the same in itself.
1677*4882a593Smuzhiyun  */
1678*4882a593Smuzhiyun static const struct vop2_connector_if_data rk3588_conn_if_data[] = {
1679*4882a593Smuzhiyun 	{
1680*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_HDMI0,
1681*4882a593Smuzhiyun 	 .clk_src_name = "hdmi_edp0_clk_src",
1682*4882a593Smuzhiyun 	 .clk_parent_name = "dclk",
1683*4882a593Smuzhiyun 	 .pixclk_name = "hdmi_edp0_pixclk",
1684*4882a593Smuzhiyun 	 .dclk_name = "hdmi_edp0_dclk",
1685*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1686*4882a593Smuzhiyun 	 .if_div_shift = 4,
1687*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 1,
1688*4882a593Smuzhiyun 	 .bus_div_shift = 2,
1689*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 2,
1690*4882a593Smuzhiyun 	},
1691*4882a593Smuzhiyun 
1692*4882a593Smuzhiyun 	{
1693*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_HDMI1,
1694*4882a593Smuzhiyun 	 .clk_src_name = "hdmi_edp1_clk_src",
1695*4882a593Smuzhiyun 	 .clk_parent_name = "dclk",
1696*4882a593Smuzhiyun 	 .pixclk_name = "hdmi_edp1_pixclk",
1697*4882a593Smuzhiyun 	 .dclk_name = "hdmi_edp1_dclk",
1698*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1699*4882a593Smuzhiyun 	 .if_div_shift = 4,
1700*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 1,
1701*4882a593Smuzhiyun 	 .bus_div_shift = 2,
1702*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 2,
1703*4882a593Smuzhiyun 	},
1704*4882a593Smuzhiyun 
1705*4882a593Smuzhiyun 	{
1706*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_eDP0,
1707*4882a593Smuzhiyun 	 .clk_src_name = "hdmi_edp0_clk_src",
1708*4882a593Smuzhiyun 	 .clk_parent_name = "dclk",
1709*4882a593Smuzhiyun 	 .pixclk_name = "hdmi_edp0_pixclk",
1710*4882a593Smuzhiyun 	 .dclk_name = "hdmi_edp0_dclk",
1711*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1712*4882a593Smuzhiyun 	 .if_div_shift = 4,
1713*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 1,
1714*4882a593Smuzhiyun 	 .bus_div_shift = 1,
1715*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 1,
1716*4882a593Smuzhiyun 	},
1717*4882a593Smuzhiyun 
1718*4882a593Smuzhiyun 	{
1719*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_eDP1,
1720*4882a593Smuzhiyun 	 .clk_src_name = "hdmi_edp1_clk_src",
1721*4882a593Smuzhiyun 	 .clk_parent_name = "dclk",
1722*4882a593Smuzhiyun 	 .pixclk_name = "hdmi_edp1_pixclk",
1723*4882a593Smuzhiyun 	 .dclk_name = "hdmi_edp1_dclk",
1724*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1725*4882a593Smuzhiyun 	 .if_div_shift = 4,
1726*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 1,
1727*4882a593Smuzhiyun 	 .bus_div_shift = 1,
1728*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 1,
1729*4882a593Smuzhiyun 	},
1730*4882a593Smuzhiyun 
1731*4882a593Smuzhiyun 	{
1732*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_DP0,
1733*4882a593Smuzhiyun 	 .clk_src_name = "dp0_pixclk",
1734*4882a593Smuzhiyun 	 .clk_parent_name = "dclk_out",
1735*4882a593Smuzhiyun 	 .pixclk_name = "dp0_pixclk",
1736*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1737*4882a593Smuzhiyun 	 .if_div_shift = 1,
1738*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 2,
1739*4882a593Smuzhiyun 	 .bus_div_shift = 1,
1740*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 1,
1741*4882a593Smuzhiyun 
1742*4882a593Smuzhiyun 	},
1743*4882a593Smuzhiyun 
1744*4882a593Smuzhiyun 	{
1745*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_DP1,
1746*4882a593Smuzhiyun 	 .clk_src_name = "dp1_pixclk",
1747*4882a593Smuzhiyun 	 .clk_parent_name = "dclk_out",
1748*4882a593Smuzhiyun 	 .pixclk_name = "dp1_pixclk",
1749*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1750*4882a593Smuzhiyun 	 .if_div_shift = 1,
1751*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 2,
1752*4882a593Smuzhiyun 	 .bus_div_shift = 1,
1753*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 1,
1754*4882a593Smuzhiyun 
1755*4882a593Smuzhiyun 	},
1756*4882a593Smuzhiyun 
1757*4882a593Smuzhiyun 	{
1758*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_MIPI0,
1759*4882a593Smuzhiyun 	 .clk_src_name = "mipi0_clk_src",
1760*4882a593Smuzhiyun 	 .clk_parent_name = "dclk_out",
1761*4882a593Smuzhiyun 	 .pixclk_name = "mipi0_pixclk",
1762*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1763*4882a593Smuzhiyun 	 .if_div_shift = 1,
1764*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 1,
1765*4882a593Smuzhiyun 	 .bus_div_shift = 1,
1766*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 1,
1767*4882a593Smuzhiyun 	},
1768*4882a593Smuzhiyun 
1769*4882a593Smuzhiyun 	{
1770*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_MIPI1,
1771*4882a593Smuzhiyun 	 .clk_src_name = "mipi1_clk_src",
1772*4882a593Smuzhiyun 	 .clk_parent_name = "dclk_out",
1773*4882a593Smuzhiyun 	 .pixclk_name = "mipi1_pixclk",
1774*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1775*4882a593Smuzhiyun 	 .if_div_shift = 1,
1776*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 1,
1777*4882a593Smuzhiyun 	 .bus_div_shift = 1,
1778*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 1,
1779*4882a593Smuzhiyun 	},
1780*4882a593Smuzhiyun 
1781*4882a593Smuzhiyun 	{
1782*4882a593Smuzhiyun 	 .id = VOP_OUTPUT_IF_RGB,
1783*4882a593Smuzhiyun 	 .clk_src_name = "port3_dclk_src",
1784*4882a593Smuzhiyun 	 .clk_parent_name = "dclk",
1785*4882a593Smuzhiyun 	 .pixclk_name = "rgb_pixclk",
1786*4882a593Smuzhiyun 	 .post_proc_div_shift = 2,
1787*4882a593Smuzhiyun 	 .if_div_shift = 0,
1788*4882a593Smuzhiyun 	 .if_div_yuv420_shift = 0,
1789*4882a593Smuzhiyun 	 .bus_div_shift = 0,
1790*4882a593Smuzhiyun 	 .pixel_clk_div_shift = 0,
1791*4882a593Smuzhiyun 	},
1792*4882a593Smuzhiyun };
1793*4882a593Smuzhiyun 
1794*4882a593Smuzhiyun 
1795*4882a593Smuzhiyun const struct vop2_layer_regs rk3568_vop_layer0_regs = {
1796*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3568_OVL_LAYER_SEL, 0x7, 0)
1797*4882a593Smuzhiyun };
1798*4882a593Smuzhiyun 
1799*4882a593Smuzhiyun const struct vop2_layer_regs rk3568_vop_layer1_regs = {
1800*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3568_OVL_LAYER_SEL, 0x7, 4)
1801*4882a593Smuzhiyun };
1802*4882a593Smuzhiyun 
1803*4882a593Smuzhiyun const struct vop2_layer_regs rk3568_vop_layer2_regs = {
1804*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3568_OVL_LAYER_SEL, 0x7, 8)
1805*4882a593Smuzhiyun };
1806*4882a593Smuzhiyun 
1807*4882a593Smuzhiyun const struct vop2_layer_regs rk3568_vop_layer3_regs = {
1808*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3568_OVL_LAYER_SEL, 0x7, 12)
1809*4882a593Smuzhiyun };
1810*4882a593Smuzhiyun 
1811*4882a593Smuzhiyun const struct vop2_layer_regs rk3568_vop_layer4_regs = {
1812*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3568_OVL_LAYER_SEL, 0x7, 16)
1813*4882a593Smuzhiyun };
1814*4882a593Smuzhiyun 
1815*4882a593Smuzhiyun const struct vop2_layer_regs rk3568_vop_layer5_regs = {
1816*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3568_OVL_LAYER_SEL, 0x7, 20)
1817*4882a593Smuzhiyun };
1818*4882a593Smuzhiyun 
1819*4882a593Smuzhiyun const struct vop2_layer_regs rk3568_vop_layer6_regs = {
1820*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3568_OVL_LAYER_SEL, 0x7, 24)
1821*4882a593Smuzhiyun };
1822*4882a593Smuzhiyun 
1823*4882a593Smuzhiyun const struct vop2_layer_regs rk3568_vop_layer7_regs = {
1824*4882a593Smuzhiyun 	.layer_sel = VOP_REG(RK3568_OVL_LAYER_SEL, 0x7, 28)
1825*4882a593Smuzhiyun };
1826*4882a593Smuzhiyun 
1827*4882a593Smuzhiyun static const struct vop2_layer_data rk3568_vop_layers[] = {
1828*4882a593Smuzhiyun 	{
1829*4882a593Smuzhiyun 	 .id = 0,
1830*4882a593Smuzhiyun 	 .regs = &rk3568_vop_layer0_regs,
1831*4882a593Smuzhiyun 	},
1832*4882a593Smuzhiyun 
1833*4882a593Smuzhiyun 	{
1834*4882a593Smuzhiyun 	 .id = 1,
1835*4882a593Smuzhiyun 	 .regs = &rk3568_vop_layer1_regs,
1836*4882a593Smuzhiyun 	},
1837*4882a593Smuzhiyun 
1838*4882a593Smuzhiyun 	{
1839*4882a593Smuzhiyun 	 .id = 2,
1840*4882a593Smuzhiyun 	 .regs = &rk3568_vop_layer2_regs,
1841*4882a593Smuzhiyun 	},
1842*4882a593Smuzhiyun 
1843*4882a593Smuzhiyun 	{
1844*4882a593Smuzhiyun 	 .id = 3,
1845*4882a593Smuzhiyun 	 .regs = &rk3568_vop_layer3_regs,
1846*4882a593Smuzhiyun 	},
1847*4882a593Smuzhiyun 
1848*4882a593Smuzhiyun 	{
1849*4882a593Smuzhiyun 	 .id = 4,
1850*4882a593Smuzhiyun 	 .regs = &rk3568_vop_layer4_regs,
1851*4882a593Smuzhiyun 	},
1852*4882a593Smuzhiyun 
1853*4882a593Smuzhiyun 	{
1854*4882a593Smuzhiyun 	 .id = 5,
1855*4882a593Smuzhiyun 	 .regs = &rk3568_vop_layer5_regs,
1856*4882a593Smuzhiyun 	},
1857*4882a593Smuzhiyun 
1858*4882a593Smuzhiyun 	{
1859*4882a593Smuzhiyun 	 .id = 6,
1860*4882a593Smuzhiyun 	 .regs = &rk3568_vop_layer6_regs,
1861*4882a593Smuzhiyun 	},
1862*4882a593Smuzhiyun 
1863*4882a593Smuzhiyun 	{
1864*4882a593Smuzhiyun 	 .id = 7,
1865*4882a593Smuzhiyun 	 .regs = &rk3568_vop_layer7_regs,
1866*4882a593Smuzhiyun 	},
1867*4882a593Smuzhiyun 
1868*4882a593Smuzhiyun };
1869*4882a593Smuzhiyun 
1870*4882a593Smuzhiyun static const struct vop2_cluster_regs rk3528_vop_cluster0 = {
1871*4882a593Smuzhiyun 	.afbc_enable = VOP_REG(RK3568_CLUSTER0_CTRL, 0x1, 1),
1872*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_CLUSTER0_CTRL, 1, 0),
1873*4882a593Smuzhiyun 	.lb_mode = VOP_REG(RK3568_CLUSTER0_CTRL, 0xf, 4),
1874*4882a593Smuzhiyun 	.scl_lb_mode = VOP_REG(RK3568_CLUSTER0_CTRL, 0x3, 9),
1875*4882a593Smuzhiyun 	.frm_reset_en = VOP_REG(RK3568_CLUSTER0_CTRL, 1, 31),
1876*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3528_CLUSTER0_MIX_SRC_COLOR_CTRL, 0xffffffff, 0),
1877*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3528_CLUSTER0_MIX_DST_COLOR_CTRL, 0xffffffff, 0),
1878*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3528_CLUSTER0_MIX_SRC_ALPHA_CTRL, 0xffffffff, 0),
1879*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3528_CLUSTER0_MIX_DST_ALPHA_CTRL, 0xffffffff, 0),
1880*4882a593Smuzhiyun };
1881*4882a593Smuzhiyun 
1882*4882a593Smuzhiyun static const struct vop2_cluster_regs rk3568_vop_cluster0 = {
1883*4882a593Smuzhiyun 	.afbc_enable = VOP_REG(RK3568_CLUSTER0_CTRL, 0x1, 1),
1884*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_CLUSTER0_CTRL, 1, 0),
1885*4882a593Smuzhiyun 	.lb_mode = VOP_REG(RK3568_CLUSTER0_CTRL, 0xf, 4),
1886*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3568_CLUSTER0_MIX_SRC_COLOR_CTRL, 0xffffffff, 0),
1887*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3568_CLUSTER0_MIX_DST_COLOR_CTRL, 0xffffffff, 0),
1888*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3568_CLUSTER0_MIX_SRC_ALPHA_CTRL, 0xffffffff, 0),
1889*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3568_CLUSTER0_MIX_DST_ALPHA_CTRL, 0xffffffff, 0),
1890*4882a593Smuzhiyun };
1891*4882a593Smuzhiyun 
1892*4882a593Smuzhiyun static const struct vop2_cluster_regs rk3568_vop_cluster1 = {
1893*4882a593Smuzhiyun 	.afbc_enable = VOP_REG(RK3568_CLUSTER1_CTRL, 0x1, 1),
1894*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_CLUSTER1_CTRL, 1, 0),
1895*4882a593Smuzhiyun 	.lb_mode = VOP_REG(RK3568_CLUSTER1_CTRL, 0xf, 4),
1896*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3568_CLUSTER1_MIX_SRC_COLOR_CTRL, 0xffffffff, 0),
1897*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3568_CLUSTER1_MIX_DST_COLOR_CTRL, 0xffffffff, 0),
1898*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3568_CLUSTER1_MIX_SRC_ALPHA_CTRL, 0xffffffff, 0),
1899*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3568_CLUSTER1_MIX_DST_ALPHA_CTRL, 0xffffffff, 0),
1900*4882a593Smuzhiyun };
1901*4882a593Smuzhiyun 
1902*4882a593Smuzhiyun static const struct vop2_cluster_regs rk3588_vop_cluster2 = {
1903*4882a593Smuzhiyun 	.afbc_enable = VOP_REG(RK3588_CLUSTER2_CTRL, 0x1, 1),
1904*4882a593Smuzhiyun 	.enable = VOP_REG(RK3588_CLUSTER2_CTRL, 1, 0),
1905*4882a593Smuzhiyun 	.lb_mode = VOP_REG(RK3588_CLUSTER2_CTRL, 0xf, 4),
1906*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3588_CLUSTER2_MIX_SRC_COLOR_CTRL, 0xffffffff, 0),
1907*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3588_CLUSTER2_MIX_DST_COLOR_CTRL, 0xffffffff, 0),
1908*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3588_CLUSTER2_MIX_SRC_ALPHA_CTRL, 0xffffffff, 0),
1909*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3588_CLUSTER2_MIX_DST_ALPHA_CTRL, 0xffffffff, 0),
1910*4882a593Smuzhiyun };
1911*4882a593Smuzhiyun 
1912*4882a593Smuzhiyun static const struct vop2_cluster_regs rk3588_vop_cluster3 =  {
1913*4882a593Smuzhiyun 	.afbc_enable = VOP_REG(RK3588_CLUSTER3_CTRL, 0x1, 1),
1914*4882a593Smuzhiyun 	.enable = VOP_REG(RK3588_CLUSTER3_CTRL, 1, 0),
1915*4882a593Smuzhiyun 	.lb_mode = VOP_REG(RK3588_CLUSTER3_CTRL, 0xf, 4),
1916*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3588_CLUSTER3_MIX_SRC_COLOR_CTRL, 0xffffffff, 0),
1917*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3588_CLUSTER3_MIX_DST_COLOR_CTRL, 0xffffffff, 0),
1918*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3588_CLUSTER3_MIX_SRC_ALPHA_CTRL, 0xffffffff, 0),
1919*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3588_CLUSTER3_MIX_DST_ALPHA_CTRL, 0xffffffff, 0),
1920*4882a593Smuzhiyun };
1921*4882a593Smuzhiyun 
1922*4882a593Smuzhiyun static const struct vop_afbc rk3568_cluster0_afbc = {
1923*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_CTRL, 0x1f, 2),
1924*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_CTRL, 0x1, 9),
1925*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_CTRL, 0x1, 10),
1926*4882a593Smuzhiyun 	.auto_gating_en = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_OUTPUT_CTRL, 0x1, 4),
1927*4882a593Smuzhiyun 	.half_block_en = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_CTRL, 0x1, 7),
1928*4882a593Smuzhiyun 	.block_split_en = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_CTRL, 0x1, 8),
1929*4882a593Smuzhiyun 	.hdr_ptr = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_HDR_PTR, 0xffffffff, 0),
1930*4882a593Smuzhiyun 	.pic_size = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_PIC_SIZE, 0xffffffff, 0),
1931*4882a593Smuzhiyun 	.pic_vir_width = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_VIR_WIDTH, 0xffff, 0),
1932*4882a593Smuzhiyun 	.tile_num = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_VIR_WIDTH, 0xffff, 16),
1933*4882a593Smuzhiyun 	.pic_offset = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_PIC_OFFSET, 0xffffffff, 0),
1934*4882a593Smuzhiyun 	.dsp_offset = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_DSP_OFFSET, 0xffffffff, 0),
1935*4882a593Smuzhiyun 	.transform_offset = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_TRANSFORM_OFFSET, 0xffffffff, 0),
1936*4882a593Smuzhiyun 	.rotate_90 = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_ROTATE_MODE, 0x1, 0),
1937*4882a593Smuzhiyun 	.rotate_270 = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_ROTATE_MODE, 0x1, 1),
1938*4882a593Smuzhiyun 	.xmirror = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_ROTATE_MODE, 0x1, 2),
1939*4882a593Smuzhiyun 	.ymirror = VOP_REG(RK3568_CLUSTER0_WIN0_AFBCD_ROTATE_MODE, 0x1, 3),
1940*4882a593Smuzhiyun };
1941*4882a593Smuzhiyun 
1942*4882a593Smuzhiyun static const struct vop2_scl_regs rk3528_cluster0_win_scl = {
1943*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3568_CLUSTER0_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0),
1944*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3568_CLUSTER0_WIN0_SCL_FACTOR_YRGB, 0xffff, 16),
1945*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3528_CLUSTER0_WIN0_CTRL1, 0x3, 14),
1946*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3528_CLUSTER0_WIN0_CTRL1, 0x3, 22),
1947*4882a593Smuzhiyun 
1948*4882a593Smuzhiyun 	.yrgb_vscl_filter_mode = VOP_REG(RK3528_CLUSTER0_WIN0_CTRL1, 0x3, 12),/* supported from vop3 */
1949*4882a593Smuzhiyun 	.yrgb_hscl_filter_mode = VOP_REG(RK3528_CLUSTER0_WIN0_CTRL1, 0x3, 20),/* supported from vop3 */
1950*4882a593Smuzhiyun 
1951*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 28),
1952*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 29),
1953*4882a593Smuzhiyun 	.vsd_cbcr_gt2 = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 30),
1954*4882a593Smuzhiyun 	.vsd_cbcr_gt4 = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 31),
1955*4882a593Smuzhiyun 
1956*4882a593Smuzhiyun 	.vsd_avg2 = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 18),/* supported from vop3 */
1957*4882a593Smuzhiyun 	.vsd_avg4 = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 19),
1958*4882a593Smuzhiyun 	.xavg_en = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 27),
1959*4882a593Smuzhiyun 	.xgt_en = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 24),
1960*4882a593Smuzhiyun 	.xgt_mode = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x3, 25),
1961*4882a593Smuzhiyun };
1962*4882a593Smuzhiyun 
1963*4882a593Smuzhiyun static const struct vop2_scl_regs rk3568_cluster0_win_scl = {
1964*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3568_CLUSTER0_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0),
1965*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3568_CLUSTER0_WIN0_SCL_FACTOR_YRGB, 0xffff, 16),
1966*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x3, 14),
1967*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x3, 12),
1968*4882a593Smuzhiyun 	.bic_coe_sel = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x3, 2),
1969*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 28),
1970*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL1, 0x1, 29),
1971*4882a593Smuzhiyun };
1972*4882a593Smuzhiyun 
1973*4882a593Smuzhiyun static const struct vop_afbc rk3568_cluster1_afbc = {
1974*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_CTRL, 0x1f, 2),
1975*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_CTRL, 0x1, 9),
1976*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_CTRL, 0x1, 10),
1977*4882a593Smuzhiyun 	.auto_gating_en = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_OUTPUT_CTRL, 0x1, 4),
1978*4882a593Smuzhiyun 	.half_block_en = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_CTRL, 0x1, 7),
1979*4882a593Smuzhiyun 	.block_split_en = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_CTRL, 0x1, 8),
1980*4882a593Smuzhiyun 	.hdr_ptr = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_HDR_PTR, 0xffffffff, 0),
1981*4882a593Smuzhiyun 	.pic_size = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_PIC_SIZE, 0xffffffff, 0),
1982*4882a593Smuzhiyun 	.pic_vir_width = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_VIR_WIDTH, 0xffff, 0),
1983*4882a593Smuzhiyun 	.tile_num = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_VIR_WIDTH, 0xffff, 16),
1984*4882a593Smuzhiyun 	.pic_offset = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_PIC_OFFSET, 0xffffffff, 0),
1985*4882a593Smuzhiyun 	.dsp_offset = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_DSP_OFFSET, 0xffffffff, 0),
1986*4882a593Smuzhiyun 	.transform_offset = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_TRANSFORM_OFFSET, 0xffffffff, 0),
1987*4882a593Smuzhiyun 	.rotate_90 = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_ROTATE_MODE, 0x1, 0),
1988*4882a593Smuzhiyun 	.rotate_270 = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_ROTATE_MODE, 0x1, 1),
1989*4882a593Smuzhiyun 	.xmirror = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_ROTATE_MODE, 0x1, 2),
1990*4882a593Smuzhiyun 	.ymirror = VOP_REG(RK3568_CLUSTER1_WIN0_AFBCD_ROTATE_MODE, 0x1, 3),
1991*4882a593Smuzhiyun };
1992*4882a593Smuzhiyun 
1993*4882a593Smuzhiyun static const struct vop2_scl_regs rk3568_cluster1_win_scl = {
1994*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3568_CLUSTER1_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0),
1995*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3568_CLUSTER1_WIN0_SCL_FACTOR_YRGB, 0xffff, 16),
1996*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL1, 0x3, 14),
1997*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL1, 0x3, 12),
1998*4882a593Smuzhiyun 	.bic_coe_sel = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL1, 0x3, 2),
1999*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL1, 0x1, 28),
2000*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL1, 0x1, 29),
2001*4882a593Smuzhiyun };
2002*4882a593Smuzhiyun 
2003*4882a593Smuzhiyun static const struct vop_afbc rk3588_cluster2_afbc = {
2004*4882a593Smuzhiyun 	.format = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_CTRL, 0x1f, 2),
2005*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_CTRL, 0x1, 9),
2006*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_CTRL, 0x1, 10),
2007*4882a593Smuzhiyun 	.auto_gating_en = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_OUTPUT_CTRL, 0x1, 4),
2008*4882a593Smuzhiyun 	.half_block_en = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_CTRL, 0x1, 7),
2009*4882a593Smuzhiyun 	.block_split_en = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_CTRL, 0x1, 8),
2010*4882a593Smuzhiyun 	.hdr_ptr = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_HDR_PTR, 0xffffffff, 0),
2011*4882a593Smuzhiyun 	.pic_size = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_PIC_SIZE, 0xffffffff, 0),
2012*4882a593Smuzhiyun 	.pic_vir_width = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_VIR_WIDTH, 0xffff, 0),
2013*4882a593Smuzhiyun 	.tile_num = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_VIR_WIDTH, 0xffff, 16),
2014*4882a593Smuzhiyun 	.pic_offset = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_PIC_OFFSET, 0xffffffff, 0),
2015*4882a593Smuzhiyun 	.dsp_offset = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_DSP_OFFSET, 0xffffffff, 0),
2016*4882a593Smuzhiyun 	.transform_offset = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_TRANSFORM_OFFSET, 0xffffffff, 0),
2017*4882a593Smuzhiyun 	.rotate_90 = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_ROTATE_MODE, 0x1, 0),
2018*4882a593Smuzhiyun 	.rotate_270 = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_ROTATE_MODE, 0x1, 1),
2019*4882a593Smuzhiyun 	.xmirror = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_ROTATE_MODE, 0x1, 2),
2020*4882a593Smuzhiyun 	.ymirror = VOP_REG(RK3588_CLUSTER2_WIN0_AFBCD_ROTATE_MODE, 0x1, 3),
2021*4882a593Smuzhiyun };
2022*4882a593Smuzhiyun 
2023*4882a593Smuzhiyun static const struct vop2_scl_regs rk3588_cluster2_win_scl = {
2024*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3588_CLUSTER2_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0),
2025*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3588_CLUSTER2_WIN0_SCL_FACTOR_YRGB, 0xffff, 16),
2026*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL1, 0x3, 14),
2027*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL1, 0x3, 12),
2028*4882a593Smuzhiyun 	.bic_coe_sel = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL1, 0x3, 2),
2029*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL1, 0x1, 28),
2030*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL1, 0x1, 29),
2031*4882a593Smuzhiyun };
2032*4882a593Smuzhiyun 
2033*4882a593Smuzhiyun static const struct vop_afbc rk3588_cluster3_afbc = {
2034*4882a593Smuzhiyun 	.format = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_CTRL, 0x1f, 2),
2035*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_CTRL, 0x1, 9),
2036*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_CTRL, 0x1, 10),
2037*4882a593Smuzhiyun 	.auto_gating_en = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_OUTPUT_CTRL, 0x1, 4),
2038*4882a593Smuzhiyun 	.half_block_en = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_CTRL, 0x1, 7),
2039*4882a593Smuzhiyun 	.block_split_en = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_CTRL, 0x1, 8),
2040*4882a593Smuzhiyun 	.hdr_ptr = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_HDR_PTR, 0xffffffff, 0),
2041*4882a593Smuzhiyun 	.pic_size = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_PIC_SIZE, 0xffffffff, 0),
2042*4882a593Smuzhiyun 	.pic_vir_width = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_VIR_WIDTH, 0xffff, 0),
2043*4882a593Smuzhiyun 	.tile_num = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_VIR_WIDTH, 0xffff, 16),
2044*4882a593Smuzhiyun 	.pic_offset = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_PIC_OFFSET, 0xffffffff, 0),
2045*4882a593Smuzhiyun 	.dsp_offset = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_DSP_OFFSET, 0xffffffff, 0),
2046*4882a593Smuzhiyun 	.transform_offset = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_TRANSFORM_OFFSET, 0xffffffff, 0),
2047*4882a593Smuzhiyun 	.rotate_90 = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_ROTATE_MODE, 0x1, 0),
2048*4882a593Smuzhiyun 	.rotate_270 = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_ROTATE_MODE, 0x1, 1),
2049*4882a593Smuzhiyun 	.xmirror = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_ROTATE_MODE, 0x1, 2),
2050*4882a593Smuzhiyun 	.ymirror = VOP_REG(RK3588_CLUSTER3_WIN0_AFBCD_ROTATE_MODE, 0x1, 3),
2051*4882a593Smuzhiyun };
2052*4882a593Smuzhiyun 
2053*4882a593Smuzhiyun static const struct vop2_scl_regs rk3588_cluster3_win_scl = {
2054*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3588_CLUSTER3_WIN0_SCL_FACTOR_YRGB, 0xffff, 0x0),
2055*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3588_CLUSTER3_WIN0_SCL_FACTOR_YRGB, 0xffff, 16),
2056*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL1, 0x3, 14),
2057*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL1, 0x3, 12),
2058*4882a593Smuzhiyun 	.bic_coe_sel = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL1, 0x3, 2),
2059*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL1, 0x1, 28),
2060*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL1, 0x1, 29),
2061*4882a593Smuzhiyun };
2062*4882a593Smuzhiyun 
2063*4882a593Smuzhiyun static const struct vop2_scl_regs rk3568_esmart_win_scl = {
2064*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3568_ESMART0_REGION0_SCL_FACTOR_YRGB, 0xffff, 0x0),
2065*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3568_ESMART0_REGION0_SCL_FACTOR_YRGB, 0xffff, 16),
2066*4882a593Smuzhiyun 	.scale_cbcr_x = VOP_REG(RK3568_ESMART0_REGION0_SCL_FACTOR_CBR, 0xffff, 0x0),
2067*4882a593Smuzhiyun 	.scale_cbcr_y = VOP_REG(RK3568_ESMART0_REGION0_SCL_FACTOR_CBR, 0xffff, 16),
2068*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 0),
2069*4882a593Smuzhiyun 	.yrgb_hscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 2),
2070*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 4),
2071*4882a593Smuzhiyun 	.yrgb_vscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 6),
2072*4882a593Smuzhiyun 	.cbcr_hor_scl_mode = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 8),
2073*4882a593Smuzhiyun 	.cbcr_hscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 10),
2074*4882a593Smuzhiyun 	.cbcr_ver_scl_mode = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 12),
2075*4882a593Smuzhiyun 	.cbcr_vscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 14),
2076*4882a593Smuzhiyun 	.bic_coe_sel = VOP_REG(RK3568_ESMART0_REGION0_SCL_CTRL, 0x3, 16),
2077*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 8),
2078*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 9),
2079*4882a593Smuzhiyun 	.vsd_cbcr_gt2 = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 10),
2080*4882a593Smuzhiyun 	.vsd_cbcr_gt4 = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 11),
2081*4882a593Smuzhiyun 	.xavg_en = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 20),/* supported from vop3 */
2082*4882a593Smuzhiyun 	.xgt_en = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 21),
2083*4882a593Smuzhiyun 	.xgt_mode = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x3, 22),
2084*4882a593Smuzhiyun };
2085*4882a593Smuzhiyun 
2086*4882a593Smuzhiyun static const struct vop2_scl_regs rk3568_area1_scl = {
2087*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3568_ESMART0_REGION1_SCL_FACTOR_YRGB, 0xffff, 0x0),
2088*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3568_ESMART0_REGION1_SCL_FACTOR_YRGB, 0xffff, 16),
2089*4882a593Smuzhiyun 	.scale_cbcr_x = VOP_REG(RK3568_ESMART0_REGION1_SCL_FACTOR_CBR, 0xffff, 0x0),
2090*4882a593Smuzhiyun 	.scale_cbcr_y = VOP_REG(RK3568_ESMART0_REGION1_SCL_FACTOR_CBR, 0xffff, 16),
2091*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 0),
2092*4882a593Smuzhiyun 	.yrgb_hscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 2),
2093*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 4),
2094*4882a593Smuzhiyun 	.yrgb_vscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 6),
2095*4882a593Smuzhiyun 	.cbcr_hor_scl_mode = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 8),
2096*4882a593Smuzhiyun 	.cbcr_hscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 10),
2097*4882a593Smuzhiyun 	.cbcr_ver_scl_mode = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 12),
2098*4882a593Smuzhiyun 	.cbcr_vscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 14),
2099*4882a593Smuzhiyun 	.bic_coe_sel = VOP_REG(RK3568_ESMART0_REGION1_SCL_CTRL, 0x3, 16),
2100*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 8),
2101*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 9),
2102*4882a593Smuzhiyun 	.vsd_cbcr_gt2 = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 10),
2103*4882a593Smuzhiyun 	.vsd_cbcr_gt4 = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 11),
2104*4882a593Smuzhiyun 	.xavg_en = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 20),/* supported from vop3 */
2105*4882a593Smuzhiyun 	.xgt_en = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 21),
2106*4882a593Smuzhiyun 	.xgt_mode = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x3, 22),
2107*4882a593Smuzhiyun };
2108*4882a593Smuzhiyun 
2109*4882a593Smuzhiyun static const struct vop2_scl_regs rk3568_area2_scl = {
2110*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3568_ESMART0_REGION2_SCL_FACTOR_YRGB, 0xffff, 0x0),
2111*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3568_ESMART0_REGION2_SCL_FACTOR_YRGB, 0xffff, 16),
2112*4882a593Smuzhiyun 	.scale_cbcr_x = VOP_REG(RK3568_ESMART0_REGION2_SCL_FACTOR_CBR, 0xffff, 0x0),
2113*4882a593Smuzhiyun 	.scale_cbcr_y = VOP_REG(RK3568_ESMART0_REGION2_SCL_FACTOR_CBR, 0xffff, 16),
2114*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 0),
2115*4882a593Smuzhiyun 	.yrgb_hscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 2),
2116*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 4),
2117*4882a593Smuzhiyun 	.yrgb_vscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 6),
2118*4882a593Smuzhiyun 	.cbcr_hor_scl_mode = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 8),
2119*4882a593Smuzhiyun 	.cbcr_hscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 10),
2120*4882a593Smuzhiyun 	.cbcr_ver_scl_mode = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 12),
2121*4882a593Smuzhiyun 	.cbcr_vscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 14),
2122*4882a593Smuzhiyun 	.bic_coe_sel = VOP_REG(RK3568_ESMART0_REGION2_SCL_CTRL, 0x3, 16),
2123*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 8),
2124*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 9),
2125*4882a593Smuzhiyun 	.vsd_cbcr_gt2 = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 10),
2126*4882a593Smuzhiyun 	.vsd_cbcr_gt4 = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 11),
2127*4882a593Smuzhiyun 	.xavg_en = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 20),/* supported from vop3 */
2128*4882a593Smuzhiyun 	.xgt_en = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 21),
2129*4882a593Smuzhiyun 	.xgt_mode = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x3, 22),
2130*4882a593Smuzhiyun };
2131*4882a593Smuzhiyun 
2132*4882a593Smuzhiyun static const struct vop2_scl_regs rk3568_area3_scl = {
2133*4882a593Smuzhiyun 	.scale_yrgb_x = VOP_REG(RK3568_ESMART0_REGION3_SCL_FACTOR_YRGB, 0xffff, 0x0),
2134*4882a593Smuzhiyun 	.scale_yrgb_y = VOP_REG(RK3568_ESMART0_REGION3_SCL_FACTOR_YRGB, 0xffff, 16),
2135*4882a593Smuzhiyun 	.scale_cbcr_x = VOP_REG(RK3568_ESMART0_REGION3_SCL_FACTOR_CBR, 0xffff, 0x0),
2136*4882a593Smuzhiyun 	.scale_cbcr_y = VOP_REG(RK3568_ESMART0_REGION3_SCL_FACTOR_CBR, 0xffff, 16),
2137*4882a593Smuzhiyun 	.yrgb_hor_scl_mode = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 0),
2138*4882a593Smuzhiyun 	.yrgb_hscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 2),
2139*4882a593Smuzhiyun 	.yrgb_ver_scl_mode = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 4),
2140*4882a593Smuzhiyun 	.yrgb_vscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 6),
2141*4882a593Smuzhiyun 	.cbcr_hor_scl_mode = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 8),
2142*4882a593Smuzhiyun 	.cbcr_hscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 10),
2143*4882a593Smuzhiyun 	.cbcr_ver_scl_mode = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 12),
2144*4882a593Smuzhiyun 	.cbcr_vscl_filter_mode = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 14),
2145*4882a593Smuzhiyun 	.bic_coe_sel = VOP_REG(RK3568_ESMART0_REGION3_SCL_CTRL, 0x3, 16),
2146*4882a593Smuzhiyun 	.vsd_yrgb_gt2 = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 8),
2147*4882a593Smuzhiyun 	.vsd_yrgb_gt4 = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 9),
2148*4882a593Smuzhiyun 	.vsd_cbcr_gt2 = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 10),
2149*4882a593Smuzhiyun 	.vsd_cbcr_gt4 = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 11),
2150*4882a593Smuzhiyun 	.xavg_en = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 20),/* supported from vop3 */
2151*4882a593Smuzhiyun 	.xgt_en = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 21),
2152*4882a593Smuzhiyun 	.xgt_mode = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x3, 22),
2153*4882a593Smuzhiyun };
2154*4882a593Smuzhiyun 
2155*4882a593Smuzhiyun static const struct vop2_win_regs rk3568_area1_data = {
2156*4882a593Smuzhiyun 	.scl = &rk3568_area1_scl,
2157*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 0),
2158*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1f, 1),
2159*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 14),
2160*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3568_ESMART0_REGION1_CTRL, 0x1, 16),
2161*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3568_ESMART0_REGION1_ACT_INFO, 0x1fff1fff, 0),
2162*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3568_ESMART0_REGION1_DSP_INFO, 0x1fff1fff, 0),
2163*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3568_ESMART0_REGION1_DSP_ST, 0x1fff1fff, 0),
2164*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3568_ESMART0_REGION1_YRGB_MST, 0xffffffff, 0),
2165*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3568_ESMART0_REGION1_CBR_MST, 0xffffffff, 0),
2166*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3568_ESMART0_REGION1_VIR, 0xffff, 0),
2167*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3568_ESMART0_REGION1_VIR, 0xffff, 16),
2168*4882a593Smuzhiyun };
2169*4882a593Smuzhiyun 
2170*4882a593Smuzhiyun static const struct vop2_win_regs rk3568_area2_data = {
2171*4882a593Smuzhiyun 	.scl = &rk3568_area2_scl,
2172*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 0),
2173*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1f, 1),
2174*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 14),
2175*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3568_ESMART0_REGION2_CTRL, 0x1, 16),
2176*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3568_ESMART0_REGION2_ACT_INFO, 0x1fff1fff, 0),
2177*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3568_ESMART0_REGION2_DSP_INFO, 0x0fff0fff, 0),
2178*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3568_ESMART0_REGION2_DSP_ST, 0x1fff1fff, 0),
2179*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3568_ESMART0_REGION2_YRGB_MST, 0xffffffff, 0),
2180*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3568_ESMART0_REGION2_CBR_MST, 0xffffffff, 0),
2181*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3568_ESMART0_REGION2_VIR, 0xffff, 0),
2182*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3568_ESMART0_REGION2_VIR, 0xffff, 16),
2183*4882a593Smuzhiyun };
2184*4882a593Smuzhiyun 
2185*4882a593Smuzhiyun static const struct vop2_win_regs rk3568_area3_data = {
2186*4882a593Smuzhiyun 	.scl = &rk3568_area3_scl,
2187*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 0),
2188*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1f, 1),
2189*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 14),
2190*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3568_ESMART0_REGION3_CTRL, 0x1, 16),
2191*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3568_ESMART0_REGION3_ACT_INFO, 0x1fff1fff, 0),
2192*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3568_ESMART0_REGION3_DSP_INFO, 0x0fff0fff, 0),
2193*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3568_ESMART0_REGION3_DSP_ST, 0x1fff1fff, 0),
2194*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3568_ESMART0_REGION3_YRGB_MST, 0xffffffff, 0),
2195*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3568_ESMART0_REGION3_CBR_MST, 0xffffffff, 0),
2196*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3568_ESMART0_REGION3_VIR, 0xffff, 0),
2197*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3568_ESMART0_REGION3_VIR, 0xffff, 16),
2198*4882a593Smuzhiyun };
2199*4882a593Smuzhiyun 
2200*4882a593Smuzhiyun static const struct vop2_win_regs *rk3568_area_data[] = {
2201*4882a593Smuzhiyun 	&rk3568_area1_data,
2202*4882a593Smuzhiyun 	&rk3568_area2_data,
2203*4882a593Smuzhiyun 	&rk3568_area3_data
2204*4882a593Smuzhiyun };
2205*4882a593Smuzhiyun 
2206*4882a593Smuzhiyun static const struct vop2_win_regs rk3528_cluster0_win_data = {
2207*4882a593Smuzhiyun 	.scl = &rk3528_cluster0_win_scl,
2208*4882a593Smuzhiyun 	.afbc = &rk3568_cluster0_afbc,
2209*4882a593Smuzhiyun 	.cluster = &rk3528_vop_cluster0,
2210*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 0),
2211*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x3f, 1),
2212*4882a593Smuzhiyun 	.tile_mode = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 7),
2213*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 14),
2214*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 17),
2215*4882a593Smuzhiyun 	.dither_up = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 18),
2216*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3568_CLUSTER0_WIN0_ACT_INFO, 0x1fff1fff, 0),
2217*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3568_CLUSTER0_WIN0_DSP_INFO, 0x0fff0fff, 0),
2218*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3568_CLUSTER0_WIN0_DSP_ST, 0x1fff1fff, 0),
2219*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3568_CLUSTER0_WIN0_YRGB_MST, 0xffffffff, 0),
2220*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3568_CLUSTER0_WIN0_CBR_MST, 0xffffffff, 0),
2221*4882a593Smuzhiyun 	.yuv_clip = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 19),
2222*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3568_CLUSTER0_WIN0_VIR, 0xffff, 0),
2223*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3568_CLUSTER0_WIN0_VIR, 0xffff, 16),
2224*4882a593Smuzhiyun 	.y2r_en = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 8),
2225*4882a593Smuzhiyun 	.r2y_en = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 9),
2226*4882a593Smuzhiyun 	.csc_mode = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x7, 10),
2227*4882a593Smuzhiyun 	.axi_yrgb_id = VOP_REG(RK3528_CLUSTER0_WIN0_CTRL2, 0x1f, 0),
2228*4882a593Smuzhiyun 	.axi_uv_id = VOP_REG(RK3528_CLUSTER0_WIN0_CTRL2, 0x1f, 5),
2229*4882a593Smuzhiyun };
2230*4882a593Smuzhiyun 
2231*4882a593Smuzhiyun static const struct vop2_win_regs rk3568_cluster0_win_data = {
2232*4882a593Smuzhiyun 	.scl = &rk3568_cluster0_win_scl,
2233*4882a593Smuzhiyun 	.afbc = &rk3568_cluster0_afbc,
2234*4882a593Smuzhiyun 	.cluster = &rk3568_vop_cluster0,
2235*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 0),
2236*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1f, 1),
2237*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 14),
2238*4882a593Smuzhiyun 	.dither_up = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 18),
2239*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3568_CLUSTER0_WIN0_ACT_INFO, 0x1fff1fff, 0),
2240*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3568_CLUSTER0_WIN0_DSP_INFO, 0x1fff1fff, 0),
2241*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3568_CLUSTER0_WIN0_DSP_ST, 0x1fff1fff, 0),
2242*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3568_CLUSTER0_WIN0_YRGB_MST, 0xffffffff, 0),
2243*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3568_CLUSTER0_WIN0_CBR_MST, 0xffffffff, 0),
2244*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3568_CLUSTER0_WIN0_VIR, 0xffff, 0),
2245*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3568_CLUSTER0_WIN0_VIR, 0xffff, 16),
2246*4882a593Smuzhiyun 	.y2r_en = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 8),
2247*4882a593Smuzhiyun 	.r2y_en = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 9),
2248*4882a593Smuzhiyun 	.csc_mode = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x3, 10),
2249*4882a593Smuzhiyun 	.axi_yrgb_id = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL2, 0x1f, 0),
2250*4882a593Smuzhiyun 	.axi_uv_id = VOP_REG(RK3568_CLUSTER0_WIN0_CTRL2, 0x1f, 5),
2251*4882a593Smuzhiyun 	.axi_id = VOP_REG(RK3568_CLUSTER0_CTRL, 0x1, 13),
2252*4882a593Smuzhiyun };
2253*4882a593Smuzhiyun 
2254*4882a593Smuzhiyun static const struct vop2_win_regs rk3568_cluster1_win_data = {
2255*4882a593Smuzhiyun 	.scl = &rk3568_cluster1_win_scl,
2256*4882a593Smuzhiyun 	.afbc = &rk3568_cluster1_afbc,
2257*4882a593Smuzhiyun 	.cluster = &rk3568_vop_cluster1,
2258*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x1, 0),
2259*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x1f, 1),
2260*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x1, 14),
2261*4882a593Smuzhiyun 	.dither_up = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x1, 18),
2262*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3568_CLUSTER1_WIN0_ACT_INFO, 0x1fff1fff, 0),
2263*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3568_CLUSTER1_WIN0_DSP_INFO, 0x1fff1fff, 0),
2264*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3568_CLUSTER1_WIN0_DSP_ST, 0x1fff1fff, 0),
2265*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3568_CLUSTER1_WIN0_YRGB_MST, 0xffffffff, 0),
2266*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3568_CLUSTER1_WIN0_CBR_MST, 0xffffffff, 0),
2267*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3568_CLUSTER1_WIN0_VIR, 0xffff, 0),
2268*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3568_CLUSTER1_WIN0_VIR, 0xffff, 16),
2269*4882a593Smuzhiyun 	.y2r_en = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x1, 8),
2270*4882a593Smuzhiyun 	.r2y_en = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x1, 9),
2271*4882a593Smuzhiyun 	.csc_mode = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x3, 10),
2272*4882a593Smuzhiyun 	.axi_yrgb_id = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL2, 0x1f, 0),
2273*4882a593Smuzhiyun 	.axi_uv_id = VOP_REG(RK3568_CLUSTER1_WIN0_CTRL2, 0x1f, 5),
2274*4882a593Smuzhiyun 	.axi_id = VOP_REG(RK3568_CLUSTER1_CTRL, 0x1, 13),
2275*4882a593Smuzhiyun };
2276*4882a593Smuzhiyun 
2277*4882a593Smuzhiyun static const struct vop2_win_regs rk3588_cluster2_win_data = {
2278*4882a593Smuzhiyun 	.scl = &rk3588_cluster2_win_scl,
2279*4882a593Smuzhiyun 	.afbc = &rk3588_cluster2_afbc,
2280*4882a593Smuzhiyun 	.cluster = &rk3588_vop_cluster2,
2281*4882a593Smuzhiyun 	.enable = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL0, 0x1, 0),
2282*4882a593Smuzhiyun 	.format = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL0, 0x1f, 1),
2283*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL0, 0x1, 14),
2284*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3588_CLUSTER2_WIN0_ACT_INFO, 0x1fff1fff, 0),
2285*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3588_CLUSTER2_WIN0_DSP_INFO, 0x1fff1fff, 0),
2286*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3588_CLUSTER2_WIN0_DSP_ST, 0x1fff1fff, 0),
2287*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3588_CLUSTER2_WIN0_YRGB_MST, 0xffffffff, 0),
2288*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3588_CLUSTER2_WIN0_CBR_MST, 0xffffffff, 0),
2289*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3588_CLUSTER2_WIN0_VIR, 0xffff, 0),
2290*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3588_CLUSTER2_WIN0_VIR, 0xffff, 16),
2291*4882a593Smuzhiyun 	.y2r_en = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL0, 0x1, 8),
2292*4882a593Smuzhiyun 	.r2y_en = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL0, 0x1, 9),
2293*4882a593Smuzhiyun 	.csc_mode = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL0, 0x3, 10),
2294*4882a593Smuzhiyun 	.axi_yrgb_id = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL2, 0x1f, 0),
2295*4882a593Smuzhiyun 	.axi_uv_id = VOP_REG(RK3588_CLUSTER2_WIN0_CTRL2, 0x1f, 5),
2296*4882a593Smuzhiyun 	.axi_id = VOP_REG(RK3588_CLUSTER2_CTRL, 0x1, 13),
2297*4882a593Smuzhiyun };
2298*4882a593Smuzhiyun 
2299*4882a593Smuzhiyun static const struct vop2_win_regs rk3588_cluster3_win_data = {
2300*4882a593Smuzhiyun 	.scl = &rk3588_cluster3_win_scl,
2301*4882a593Smuzhiyun 	.afbc = &rk3588_cluster3_afbc,
2302*4882a593Smuzhiyun 	.cluster = &rk3588_vop_cluster3,
2303*4882a593Smuzhiyun 	.enable = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL0, 0x1, 0),
2304*4882a593Smuzhiyun 	.format = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL0, 0x1f, 1),
2305*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL0, 0x1, 14),
2306*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3588_CLUSTER3_WIN0_ACT_INFO, 0x1fff1fff, 0),
2307*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3588_CLUSTER3_WIN0_DSP_INFO, 0x1fff1fff, 0),
2308*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3588_CLUSTER3_WIN0_DSP_ST, 0x1fff1fff, 0),
2309*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3588_CLUSTER3_WIN0_YRGB_MST, 0xffffffff, 0),
2310*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3588_CLUSTER3_WIN0_CBR_MST, 0xffffffff, 0),
2311*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3588_CLUSTER3_WIN0_VIR, 0xffff, 0),
2312*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3588_CLUSTER3_WIN0_VIR, 0xffff, 16),
2313*4882a593Smuzhiyun 	.y2r_en = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL0, 0x1, 8),
2314*4882a593Smuzhiyun 	.r2y_en = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL0, 0x1, 9),
2315*4882a593Smuzhiyun 	.csc_mode = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL0, 0x3, 10),
2316*4882a593Smuzhiyun 	.axi_yrgb_id = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL2, 0x1f, 0),
2317*4882a593Smuzhiyun 	.axi_uv_id = VOP_REG(RK3588_CLUSTER3_WIN0_CTRL2, 0x1f, 5),
2318*4882a593Smuzhiyun 	.axi_id = VOP_REG(RK3588_CLUSTER3_CTRL, 0x1, 13),
2319*4882a593Smuzhiyun };
2320*4882a593Smuzhiyun 
2321*4882a593Smuzhiyun static const struct vop2_win_regs rk3568_esmart_win_data = {
2322*4882a593Smuzhiyun 	.scl = &rk3568_esmart_win_scl,
2323*4882a593Smuzhiyun 	.axi_yrgb_id = VOP_REG(RK3568_ESMART0_CTRL1, 0x1f, 4),
2324*4882a593Smuzhiyun 	.axi_uv_id = VOP_REG(RK3568_ESMART0_CTRL1, 0x1f, 12),
2325*4882a593Smuzhiyun 	.axi_id = VOP_REG(RK3568_ESMART0_AXI_CTRL, 0x1, 1),
2326*4882a593Smuzhiyun 	.enable = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 0),
2327*4882a593Smuzhiyun 	.format = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1f, 1),
2328*4882a593Smuzhiyun 	.dither_up = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 12),
2329*4882a593Smuzhiyun 	.rb_swap = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 14),
2330*4882a593Smuzhiyun 	.uv_swap = VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 16),
2331*4882a593Smuzhiyun 	.act_info = VOP_REG(RK3568_ESMART0_REGION0_ACT_INFO, 0x1fff1fff, 0),
2332*4882a593Smuzhiyun 	.dsp_info = VOP_REG(RK3568_ESMART0_REGION0_DSP_INFO, 0x1fff1fff, 0),
2333*4882a593Smuzhiyun 	.dsp_st = VOP_REG(RK3568_ESMART0_REGION0_DSP_ST, 0x1fff1fff, 0),
2334*4882a593Smuzhiyun 	.yrgb_mst = VOP_REG(RK3568_ESMART0_REGION0_YRGB_MST, 0xffffffff, 0),
2335*4882a593Smuzhiyun 	.uv_mst = VOP_REG(RK3568_ESMART0_REGION0_CBR_MST, 0xffffffff, 0),
2336*4882a593Smuzhiyun 	.yrgb_vir = VOP_REG(RK3568_ESMART0_REGION0_VIR, 0xffff, 0),
2337*4882a593Smuzhiyun 	.uv_vir = VOP_REG(RK3568_ESMART0_REGION0_VIR, 0xffff, 16),
2338*4882a593Smuzhiyun 	.y2r_en = VOP_REG(RK3568_ESMART0_CTRL0, 0x1, 0),
2339*4882a593Smuzhiyun 	.r2y_en = VOP_REG(RK3568_ESMART0_CTRL0, 0x1, 1),
2340*4882a593Smuzhiyun 	.csc_mode = VOP_REG(RK3568_ESMART0_CTRL0, 0x3, 2),
2341*4882a593Smuzhiyun 	.csc_13bit_en = VOP_REG(RK3568_ESMART0_CTRL0, 0x1, 16),
2342*4882a593Smuzhiyun 	.ymirror = VOP_REG(RK3568_ESMART0_CTRL1, 0x1, 31),
2343*4882a593Smuzhiyun 	.color_key = VOP_REG(RK3568_ESMART0_COLOR_KEY_CTRL, 0x3fffffff, 0),
2344*4882a593Smuzhiyun 	.color_key_en = VOP_REG(RK3568_ESMART0_COLOR_KEY_CTRL, 0x1, 31),
2345*4882a593Smuzhiyun 	.scale_engine_num = VOP_REG(RK3568_ESMART0_CTRL0, 0x3, 12),/* supported from vop3 */
2346*4882a593Smuzhiyun };
2347*4882a593Smuzhiyun 
2348*4882a593Smuzhiyun /*
2349*4882a593Smuzhiyun  * RK3528 VOP with 1 Cluster win and 4 Esmart win.
2350*4882a593Smuzhiyun  * Every Esmart win support 4 multi-region.
2351*4882a593Smuzhiyun  * VP0 can use Cluster win and Esmart0/1/2
2352*4882a593Smuzhiyun  * VP1 can use Esmart 2/3
2353*4882a593Smuzhiyun  *
2354*4882a593Smuzhiyun  * Scale filter mode:
2355*4882a593Smuzhiyun  *
2356*4882a593Smuzhiyun  * * Cluster:
2357*4882a593Smuzhiyun  * * Support prescale down:
2358*4882a593Smuzhiyun  * * H/V: gt2/avg2 or gt4/avg4
2359*4882a593Smuzhiyun  * * After prescale down:
2360*4882a593Smuzhiyun  *    * nearest-neighbor/bilinear/bicubic for scale up
2361*4882a593Smuzhiyun  *    * nearest-neighbor/bilinear for scale down
2362*4882a593Smuzhiyun  *
2363*4882a593Smuzhiyun  * * Esmart:
2364*4882a593Smuzhiyun  * * Support prescale down:
2365*4882a593Smuzhiyun  * * H: gt2/avg2 or gt4/avg4
2366*4882a593Smuzhiyun  * * V: gt2 or gt4
2367*4882a593Smuzhiyun  * * After prescale down:
2368*4882a593Smuzhiyun  *    * nearest-neighbor/bilinear/bicubic for scale up
2369*4882a593Smuzhiyun  *    * nearest-neighbor/bilinear/average for scale down
2370*4882a593Smuzhiyun  */
2371*4882a593Smuzhiyun static const struct vop2_win_data rk3528_vop_win_data[] = {
2372*4882a593Smuzhiyun 	{
2373*4882a593Smuzhiyun 	  .name = "Esmart0-win0",
2374*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART0,
2375*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
2376*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
2377*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2378*4882a593Smuzhiyun 	  .base = 0x0,
2379*4882a593Smuzhiyun 	  .layer_sel_id = { 1, 0xff, 0xff, 0xff },
2380*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2381*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2382*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2383*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2384*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2385*4882a593Smuzhiyun 	  .hsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_AVG,/* gt or avg */
2386*4882a593Smuzhiyun 	  .vsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_GT,/* gt only */
2387*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2388*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2389*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2390*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
2391*4882a593Smuzhiyun 	  .axi_id = 0,
2392*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x06,
2393*4882a593Smuzhiyun 	  .axi_uv_id = 0x07,
2394*4882a593Smuzhiyun 	  .possible_crtcs = 0x1,/* vp0 only */
2395*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2396*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2397*4882a593Smuzhiyun 	  .dly = { 27, 45, 48 },
2398*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA | WIN_FEATURE_Y2R_13BIT_DEPTH,
2399*4882a593Smuzhiyun 	},
2400*4882a593Smuzhiyun 
2401*4882a593Smuzhiyun 	{
2402*4882a593Smuzhiyun 	  .name = "Esmart1-win0",
2403*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART1,
2404*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
2405*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
2406*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2407*4882a593Smuzhiyun 	  .base = 0x200,
2408*4882a593Smuzhiyun 	  .layer_sel_id = { 2, 0xff, 0xff, 0xff },
2409*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2410*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2411*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2412*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2413*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2414*4882a593Smuzhiyun 	  .hsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_AVG,/* gt or avg */
2415*4882a593Smuzhiyun 	  .vsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_GT,/* gt only */
2416*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2417*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2418*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2419*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2420*4882a593Smuzhiyun 	  .axi_id = 0,
2421*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x08,
2422*4882a593Smuzhiyun 	  .axi_uv_id = 0x09,
2423*4882a593Smuzhiyun 	  .possible_crtcs = 0x1,/* vp0 only */
2424*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2425*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2426*4882a593Smuzhiyun 	  .dly = { 27, 45, 48 },
2427*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2428*4882a593Smuzhiyun 	},
2429*4882a593Smuzhiyun 
2430*4882a593Smuzhiyun 	{
2431*4882a593Smuzhiyun 	  .name = "Esmart2-win0",
2432*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART2,
2433*4882a593Smuzhiyun 	  .base = 0x400,
2434*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
2435*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
2436*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2437*4882a593Smuzhiyun 	  .layer_sel_id = { 3, 0, 0xff, 0xff },
2438*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2439*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2440*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2441*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2442*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2443*4882a593Smuzhiyun 	  .hsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_AVG,/* gt or avg */
2444*4882a593Smuzhiyun 	  .vsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_GT,/* gt only */
2445*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2446*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2447*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2448*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_CURSOR,
2449*4882a593Smuzhiyun 	  .axi_id = 0,
2450*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x0a,
2451*4882a593Smuzhiyun 	  .axi_uv_id = 0x0b,
2452*4882a593Smuzhiyun 	  .possible_crtcs = 0x3,/* vp0 or vp1 */
2453*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2454*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2455*4882a593Smuzhiyun 	  .dly = { 27, 45, 48 },
2456*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2457*4882a593Smuzhiyun 	},
2458*4882a593Smuzhiyun 
2459*4882a593Smuzhiyun 	{
2460*4882a593Smuzhiyun 	  .name = "Esmart3-win0",
2461*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART3,
2462*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
2463*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
2464*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2465*4882a593Smuzhiyun 	  .base = 0x600,
2466*4882a593Smuzhiyun 	  .layer_sel_id = { 0xff, 1, 0xff, 0xff },
2467*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2468*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2469*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2470*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2471*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2472*4882a593Smuzhiyun 	  .hsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_AVG,/* gt or avg */
2473*4882a593Smuzhiyun 	  .vsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_GT,/* gt only */
2474*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2475*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2476*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2477*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
2478*4882a593Smuzhiyun 	  .axi_id = 0,
2479*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x0c,
2480*4882a593Smuzhiyun 	  .axi_uv_id = 0x0d,
2481*4882a593Smuzhiyun 	  .possible_crtcs = 0x2,/* vp1 only */
2482*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2483*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2484*4882a593Smuzhiyun 	  .dly = { 27, 45, 48 },
2485*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2486*4882a593Smuzhiyun 	},
2487*4882a593Smuzhiyun 
2488*4882a593Smuzhiyun 	{
2489*4882a593Smuzhiyun 	  .name = "Cluster0-win0",
2490*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER0,
2491*4882a593Smuzhiyun 	  .base = 0x00,
2492*4882a593Smuzhiyun 	  .formats = formats_for_vop3_cluster,
2493*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_vop3_cluster),
2494*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc_tiled,
2495*4882a593Smuzhiyun 	  .layer_sel_id = { 0, 0xff, 0xff, 0xff },
2496*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
2497*4882a593Smuzhiyun 			   DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
2498*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2499*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2500*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2501*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2502*4882a593Smuzhiyun 	  .hsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_AVG,/* gt or avg */
2503*4882a593Smuzhiyun 	  .vsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_AVG,/* gt or avg */
2504*4882a593Smuzhiyun 	  .regs = &rk3528_cluster0_win_data,
2505*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x02,
2506*4882a593Smuzhiyun 	  .axi_uv_id = 0x03,
2507*4882a593Smuzhiyun 	  .possible_crtcs = 0x1,/* vp0 only */
2508*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2509*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2510*4882a593Smuzhiyun 	  .dly = { 27, 27, 21 },
2511*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2512*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_MAIN | WIN_FEATURE_Y2R_13BIT_DEPTH,
2513*4882a593Smuzhiyun 	},
2514*4882a593Smuzhiyun 
2515*4882a593Smuzhiyun 	{
2516*4882a593Smuzhiyun 	  .name = "Cluster0-win1",
2517*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER0,
2518*4882a593Smuzhiyun 	  .base = 0x80,
2519*4882a593Smuzhiyun 	  .layer_sel_id = { 0, 0xff, 0xff, 0xff },
2520*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
2521*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
2522*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc_tiled,
2523*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
2524*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2525*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2526*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2527*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2528*4882a593Smuzhiyun 	  .hsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_AVG,/* gt or avg */
2529*4882a593Smuzhiyun 	  .vsd_pre_filter_mode = VOP3_PRE_SCALE_DOWN_AVG,/* gt or avg */
2530*4882a593Smuzhiyun 	  .regs = &rk3528_cluster0_win_data,
2531*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x04,
2532*4882a593Smuzhiyun 	  .axi_uv_id = 0x05,
2533*4882a593Smuzhiyun 	  .possible_crtcs = 0x1,/* vp0 only */
2534*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2535*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2536*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2537*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_SUB,
2538*4882a593Smuzhiyun 	},
2539*4882a593Smuzhiyun };
2540*4882a593Smuzhiyun 
2541*4882a593Smuzhiyun /*
2542*4882a593Smuzhiyun  * RK3562 VOP with 4 Esmart win.
2543*4882a593Smuzhiyun  * Every Esmart win support 4 multi-region and each Esmart win can by used by VP0 or VP1
2544*4882a593Smuzhiyun  *
2545*4882a593Smuzhiyun  * Scale filter mode:
2546*4882a593Smuzhiyun  *
2547*4882a593Smuzhiyun  * * Esmart:
2548*4882a593Smuzhiyun  * * Support prescale down:
2549*4882a593Smuzhiyun  * * H: gt2/avg2 or gt4/avg4
2550*4882a593Smuzhiyun  * * V: gt2 or gt4
2551*4882a593Smuzhiyun  * * After prescale down:
2552*4882a593Smuzhiyun  *	* nearest-neighbor/bilinear/bicubic for scale up
2553*4882a593Smuzhiyun  *	* nearest-neighbor/bilinear/average for scale down
2554*4882a593Smuzhiyun  */
2555*4882a593Smuzhiyun static const struct vop2_win_data rk3562_vop_win_data[] = {
2556*4882a593Smuzhiyun 	{
2557*4882a593Smuzhiyun 	  .name = "Esmart0-win0",
2558*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART0,
2559*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
2560*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
2561*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2562*4882a593Smuzhiyun 	  .base = 0x0,
2563*4882a593Smuzhiyun 	  .layer_sel_id = { 0, 0, 0xff, 0xff },
2564*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2565*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2566*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2567*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2568*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2569*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2570*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2571*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2572*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
2573*4882a593Smuzhiyun 	  .axi_id = 0,
2574*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x02,
2575*4882a593Smuzhiyun 	  .axi_uv_id = 0x03,
2576*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2577*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2578*4882a593Smuzhiyun 	  .dly = { 27, 45, 48 },
2579*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2580*4882a593Smuzhiyun 	},
2581*4882a593Smuzhiyun 
2582*4882a593Smuzhiyun 	{
2583*4882a593Smuzhiyun 	  .name = "Esmart1-win0",
2584*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART1,
2585*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
2586*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
2587*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2588*4882a593Smuzhiyun 	  .base = 0x200,
2589*4882a593Smuzhiyun 	  .layer_sel_id = { 1, 1, 0xff, 0xff },
2590*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2591*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2592*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2593*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2594*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2595*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2596*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2597*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2598*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2599*4882a593Smuzhiyun 	  .axi_id = 0,
2600*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x04,
2601*4882a593Smuzhiyun 	  .axi_uv_id = 0x05,
2602*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2603*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2604*4882a593Smuzhiyun 	  .dly = { 27, 45, 48 },
2605*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2606*4882a593Smuzhiyun 	},
2607*4882a593Smuzhiyun 
2608*4882a593Smuzhiyun 	{
2609*4882a593Smuzhiyun 	  .name = "Esmart2-win0",
2610*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART2,
2611*4882a593Smuzhiyun 	  .base = 0x400,
2612*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
2613*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
2614*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2615*4882a593Smuzhiyun 	  .layer_sel_id = { 2, 2, 0xff, 0xff },
2616*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2617*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2618*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2619*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2620*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2621*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2622*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2623*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2624*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
2625*4882a593Smuzhiyun 	  .axi_id = 0,
2626*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x06,
2627*4882a593Smuzhiyun 	  .axi_uv_id = 0x07,
2628*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2629*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2630*4882a593Smuzhiyun 	  .dly = { 27, 45, 48 },
2631*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2632*4882a593Smuzhiyun 	},
2633*4882a593Smuzhiyun 
2634*4882a593Smuzhiyun 	{
2635*4882a593Smuzhiyun 	  .name = "Esmart3-win0",
2636*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART3,
2637*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
2638*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
2639*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2640*4882a593Smuzhiyun 	  .base = 0x600,
2641*4882a593Smuzhiyun 	  .layer_sel_id = { 3, 3, 0xff, 0xff },
2642*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2643*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2644*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2645*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2646*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2647*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2648*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2649*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2650*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2651*4882a593Smuzhiyun 	  .axi_id = 0,
2652*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x08,
2653*4882a593Smuzhiyun 	  .axi_uv_id = 0x0d,
2654*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2655*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2656*4882a593Smuzhiyun 	  .dly = { 27, 45, 48 },
2657*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2658*4882a593Smuzhiyun 	},
2659*4882a593Smuzhiyun };
2660*4882a593Smuzhiyun 
2661*4882a593Smuzhiyun /*
2662*4882a593Smuzhiyun  * rk3568 vop with 2 cluster, 2 esmart win, 2 smart win.
2663*4882a593Smuzhiyun  * Every cluster can work as 4K win or split into two win.
2664*4882a593Smuzhiyun  * All win in cluster support AFBCD.
2665*4882a593Smuzhiyun  *
2666*4882a593Smuzhiyun  * Every esmart win and smart win support 4 Multi-region.
2667*4882a593Smuzhiyun  *
2668*4882a593Smuzhiyun  * Scale filter mode:
2669*4882a593Smuzhiyun  *
2670*4882a593Smuzhiyun  * * Cluster:  bicubic for horizontal scale up, others use bilinear
2671*4882a593Smuzhiyun  * * ESmart:
2672*4882a593Smuzhiyun  *    * nearest-neighbor/bilinear/bicubic for scale up
2673*4882a593Smuzhiyun  *    * nearest-neighbor/bilinear/average for scale down
2674*4882a593Smuzhiyun  *
2675*4882a593Smuzhiyun  *
2676*4882a593Smuzhiyun  * @TODO describe the wind like cpu-map dt nodes;
2677*4882a593Smuzhiyun  */
2678*4882a593Smuzhiyun static const struct vop2_win_data rk3568_vop_win_data[] = {
2679*4882a593Smuzhiyun 	{
2680*4882a593Smuzhiyun 	  .name = "Smart0-win0",
2681*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_SMART0,
2682*4882a593Smuzhiyun 	  .base = 0x400,
2683*4882a593Smuzhiyun 	  .formats = formats_for_smart,
2684*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_smart),
2685*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2686*4882a593Smuzhiyun 	  .layer_sel_id = { 3, 3, 3, 0xff },
2687*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2688*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2689*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2690*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2691*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2692*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2693*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2694*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2695*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
2696*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2697*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2698*4882a593Smuzhiyun 	  .dly = { 20, 47, 41 },
2699*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2700*4882a593Smuzhiyun 	},
2701*4882a593Smuzhiyun 
2702*4882a593Smuzhiyun 	{
2703*4882a593Smuzhiyun 	  .name = "Smart1-win0",
2704*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_SMART1,
2705*4882a593Smuzhiyun 	  .formats = formats_for_smart,
2706*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_smart),
2707*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2708*4882a593Smuzhiyun 	  .base = 0x600,
2709*4882a593Smuzhiyun 	  .layer_sel_id = { 7, 7, 7, 0xff },
2710*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2711*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2712*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2713*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2714*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2715*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2716*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2717*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2718*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
2719*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2720*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2721*4882a593Smuzhiyun 	  .dly = { 20, 47, 41 },
2722*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MIRROR | WIN_FEATURE_MULTI_AREA,
2723*4882a593Smuzhiyun 	},
2724*4882a593Smuzhiyun 
2725*4882a593Smuzhiyun 	{
2726*4882a593Smuzhiyun 	  .name = "Esmart1-win0",
2727*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART1,
2728*4882a593Smuzhiyun 	  .formats = formats_for_rk356x_esmart,
2729*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_rk356x_esmart),
2730*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2731*4882a593Smuzhiyun 	  .base = 0x200,
2732*4882a593Smuzhiyun 	  .layer_sel_id = { 6, 6, 6, 0xff },
2733*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2734*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2735*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2736*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2737*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2738*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2739*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2740*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2741*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
2742*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2743*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2744*4882a593Smuzhiyun 	  .dly = { 20, 47, 41 },
2745*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MIRROR | WIN_FEATURE_MULTI_AREA,
2746*4882a593Smuzhiyun 	},
2747*4882a593Smuzhiyun 
2748*4882a593Smuzhiyun 	{
2749*4882a593Smuzhiyun 	  .name = "Esmart0-win0",
2750*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART0,
2751*4882a593Smuzhiyun 	  .formats = formats_for_rk356x_esmart,
2752*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_rk356x_esmart),
2753*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
2754*4882a593Smuzhiyun 	  .base = 0x0,
2755*4882a593Smuzhiyun 	  .layer_sel_id = { 2, 2, 2, 0xff },
2756*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
2757*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2758*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2759*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2760*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2761*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
2762*4882a593Smuzhiyun 	  .area = rk3568_area_data,
2763*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
2764*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2765*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
2766*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
2767*4882a593Smuzhiyun 	  .dly = { 20, 47, 41 },
2768*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
2769*4882a593Smuzhiyun 	},
2770*4882a593Smuzhiyun 
2771*4882a593Smuzhiyun 	{
2772*4882a593Smuzhiyun 	  .name = "Cluster0-win0",
2773*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER0,
2774*4882a593Smuzhiyun 	  .base = 0x00,
2775*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
2776*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
2777*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc_no_linear_mode,
2778*4882a593Smuzhiyun 	  .layer_sel_id = { 0, 0, 0, 0xff },
2779*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
2780*4882a593Smuzhiyun 				 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
2781*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2782*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2783*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2784*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2785*4882a593Smuzhiyun 	  .regs = &rk3568_cluster0_win_data,
2786*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
2787*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
2788*4882a593Smuzhiyun 	  .dly = { 0, 27, 21 },
2789*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2790*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_MAIN,
2791*4882a593Smuzhiyun 	},
2792*4882a593Smuzhiyun 
2793*4882a593Smuzhiyun 	{
2794*4882a593Smuzhiyun 	  .name = "Cluster0-win1",
2795*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER0,
2796*4882a593Smuzhiyun 	  .base = 0x80,
2797*4882a593Smuzhiyun 	  .layer_sel_id = { 0xff, 0xff, 0xff, 0xff },
2798*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
2799*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
2800*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc_no_linear_mode,
2801*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
2802*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2803*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2804*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2805*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2806*4882a593Smuzhiyun 	  .regs = &rk3568_cluster0_win_data,
2807*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
2808*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
2809*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2810*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_SUB,
2811*4882a593Smuzhiyun 	},
2812*4882a593Smuzhiyun 
2813*4882a593Smuzhiyun 	{
2814*4882a593Smuzhiyun 	  .name = "Cluster1-win0",
2815*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER1,
2816*4882a593Smuzhiyun 	  .base = 0x00,
2817*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
2818*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
2819*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc_no_linear_mode,
2820*4882a593Smuzhiyun 	  .layer_sel_id = { 1, 1, 1, 0xff },
2821*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
2822*4882a593Smuzhiyun 				 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
2823*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2824*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2825*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2826*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2827*4882a593Smuzhiyun 	  .regs = &rk3568_cluster1_win_data,
2828*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2829*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
2830*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
2831*4882a593Smuzhiyun 	  .dly = { 0, 27, 21 },
2832*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_MAIN | WIN_FEATURE_MIRROR,
2833*4882a593Smuzhiyun 	},
2834*4882a593Smuzhiyun 
2835*4882a593Smuzhiyun 	{
2836*4882a593Smuzhiyun 	  .name = "Cluster1-win1",
2837*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER1,
2838*4882a593Smuzhiyun 	  .layer_sel_id = { 0xff, 0xff, 0xff, 0xff },
2839*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
2840*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
2841*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc_no_linear_mode,
2842*4882a593Smuzhiyun 	  .base = 0x80,
2843*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
2844*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
2845*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2846*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
2847*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
2848*4882a593Smuzhiyun 	  .regs = &rk3568_cluster1_win_data,
2849*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
2850*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
2851*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
2852*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_SUB | WIN_FEATURE_MIRROR,
2853*4882a593Smuzhiyun 	},
2854*4882a593Smuzhiyun };
2855*4882a593Smuzhiyun 
2856*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_cluster0_pd_regs = {
2857*4882a593Smuzhiyun 	.pd = VOP_REG(RK3568_SYS_PD_CTRL, 0x1, 0),
2858*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_SYS_STATUS0, 0x1, 8),
2859*4882a593Smuzhiyun 	.pmu_status = VOP_REG(RK3588_PMU_BISR_STATUS5, 0x1, 9),
2860*4882a593Smuzhiyun 	.bisr_en_status = VOP_REG(RK3588_PMU_BISR_CON3, 0x1, 9),
2861*4882a593Smuzhiyun };
2862*4882a593Smuzhiyun 
2863*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_cluster1_pd_regs = {
2864*4882a593Smuzhiyun 	.pd = VOP_REG(RK3568_SYS_PD_CTRL, 0x1, 1),
2865*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_SYS_STATUS0, 0x1, 9),
2866*4882a593Smuzhiyun 	.pmu_status = VOP_REG(RK3588_PMU_BISR_STATUS5, 0x1, 10),
2867*4882a593Smuzhiyun 	.bisr_en_status = VOP_REG(RK3588_PMU_BISR_CON3, 0x1, 10),
2868*4882a593Smuzhiyun };
2869*4882a593Smuzhiyun 
2870*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_cluster2_pd_regs = {
2871*4882a593Smuzhiyun 	.pd = VOP_REG(RK3568_SYS_PD_CTRL, 0x1, 2),
2872*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_SYS_STATUS0, 0x1, 10),
2873*4882a593Smuzhiyun 	.pmu_status = VOP_REG(RK3588_PMU_BISR_STATUS5, 0x1, 11),
2874*4882a593Smuzhiyun 	.bisr_en_status = VOP_REG(RK3588_PMU_BISR_CON3, 0x1, 11),
2875*4882a593Smuzhiyun };
2876*4882a593Smuzhiyun 
2877*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_cluster3_pd_regs = {
2878*4882a593Smuzhiyun 	.pd = VOP_REG(RK3568_SYS_PD_CTRL, 0x1, 3),
2879*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_SYS_STATUS0, 0x1, 11),
2880*4882a593Smuzhiyun 	.pmu_status = VOP_REG(RK3588_PMU_BISR_STATUS5, 0x1, 12),
2881*4882a593Smuzhiyun 	.bisr_en_status = VOP_REG(RK3588_PMU_BISR_CON3, 0x1, 12),
2882*4882a593Smuzhiyun };
2883*4882a593Smuzhiyun 
2884*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_esmart_pd_regs = {
2885*4882a593Smuzhiyun 	.pd = VOP_REG(RK3568_SYS_PD_CTRL, 0x1, 7),
2886*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_SYS_STATUS0, 0x1, 15),
2887*4882a593Smuzhiyun 	.pmu_status = VOP_REG(RK3588_PMU_BISR_STATUS5, 0x1, 15),
2888*4882a593Smuzhiyun 	.bisr_en_status = VOP_REG(RK3588_PMU_BISR_CON3, 0x1, 15),
2889*4882a593Smuzhiyun };
2890*4882a593Smuzhiyun 
2891*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_dsc_8k_pd_regs = {
2892*4882a593Smuzhiyun 	.pd = VOP_REG(RK3568_SYS_PD_CTRL, 0x1, 5),
2893*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_SYS_STATUS0, 0x1, 13),
2894*4882a593Smuzhiyun 	.pmu_status = VOP_REG(RK3588_PMU_BISR_STATUS5, 0x1, 13),
2895*4882a593Smuzhiyun 	.bisr_en_status = VOP_REG(RK3588_PMU_BISR_CON3, 0x1, 13),
2896*4882a593Smuzhiyun };
2897*4882a593Smuzhiyun 
2898*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_dsc_4k_pd_regs = {
2899*4882a593Smuzhiyun 	.pd = VOP_REG(RK3568_SYS_PD_CTRL, 0x1, 6),
2900*4882a593Smuzhiyun 	.status = VOP_REG(RK3568_SYS_STATUS0, 0x1, 14),
2901*4882a593Smuzhiyun 	.pmu_status = VOP_REG(RK3588_PMU_BISR_STATUS5, 0x1, 14),
2902*4882a593Smuzhiyun 	.bisr_en_status = VOP_REG(RK3588_PMU_BISR_CON3, 0x1, 14),
2903*4882a593Smuzhiyun };
2904*4882a593Smuzhiyun 
2905*4882a593Smuzhiyun /*
2906*4882a593Smuzhiyun  * There are 7 internal power domains on rk3588 vop,
2907*4882a593Smuzhiyun  * Cluster0/1/2/3 each have on pd, and PD_CLUSTER0 as parent,
2908*4882a593Smuzhiyun  * that means PD_CLUSTER0 should turn on first before
2909*4882a593Smuzhiyun  * PD_CLUSTER1/2/3 turn on.
2910*4882a593Smuzhiyun  *
2911*4882a593Smuzhiyun  * Esmart1/2/3 share one pd PD_ESMART, and Esmart0 has no PD
2912*4882a593Smuzhiyun  * DSC_8K/DSC_4K each have on pd.
2913*4882a593Smuzhiyun  */
2914*4882a593Smuzhiyun static const struct vop2_power_domain_data rk3588_vop_pd_data[] = {
2915*4882a593Smuzhiyun 	{
2916*4882a593Smuzhiyun 	  .id = VOP2_PD_CLUSTER0,
2917*4882a593Smuzhiyun 	  .module_id_mask = BIT(ROCKCHIP_VOP2_CLUSTER0),
2918*4882a593Smuzhiyun 	  .regs = &rk3588_cluster0_pd_regs,
2919*4882a593Smuzhiyun 	},
2920*4882a593Smuzhiyun 
2921*4882a593Smuzhiyun 	{
2922*4882a593Smuzhiyun 	  .id = VOP2_PD_CLUSTER1,
2923*4882a593Smuzhiyun 	  .module_id_mask = BIT(ROCKCHIP_VOP2_CLUSTER1),
2924*4882a593Smuzhiyun 	  .parent_id = VOP2_PD_CLUSTER0,
2925*4882a593Smuzhiyun 	  .regs = &rk3588_cluster1_pd_regs,
2926*4882a593Smuzhiyun 	},
2927*4882a593Smuzhiyun 
2928*4882a593Smuzhiyun 	{
2929*4882a593Smuzhiyun 	  .id = VOP2_PD_CLUSTER2,
2930*4882a593Smuzhiyun 	  .module_id_mask = BIT(ROCKCHIP_VOP2_CLUSTER2),
2931*4882a593Smuzhiyun 	  .parent_id = VOP2_PD_CLUSTER0,
2932*4882a593Smuzhiyun 	  .regs = &rk3588_cluster2_pd_regs,
2933*4882a593Smuzhiyun 	},
2934*4882a593Smuzhiyun 
2935*4882a593Smuzhiyun 	{
2936*4882a593Smuzhiyun 	  .id = VOP2_PD_CLUSTER3,
2937*4882a593Smuzhiyun 	  .module_id_mask = BIT(ROCKCHIP_VOP2_CLUSTER3),
2938*4882a593Smuzhiyun 	  .parent_id = VOP2_PD_CLUSTER0,
2939*4882a593Smuzhiyun 	  .regs = &rk3588_cluster3_pd_regs,
2940*4882a593Smuzhiyun 	},
2941*4882a593Smuzhiyun 
2942*4882a593Smuzhiyun 	{
2943*4882a593Smuzhiyun 	  .id = VOP2_PD_ESMART,
2944*4882a593Smuzhiyun 	  .module_id_mask = BIT(ROCKCHIP_VOP2_ESMART1) |
2945*4882a593Smuzhiyun 			    BIT(ROCKCHIP_VOP2_ESMART2) |
2946*4882a593Smuzhiyun 			    BIT(ROCKCHIP_VOP2_ESMART3),
2947*4882a593Smuzhiyun 	  .regs = &rk3588_esmart_pd_regs,
2948*4882a593Smuzhiyun 	},
2949*4882a593Smuzhiyun 
2950*4882a593Smuzhiyun 	{
2951*4882a593Smuzhiyun 	  .id = VOP2_PD_DSC_8K,
2952*4882a593Smuzhiyun 	  .module_id_mask = BIT(ROCKCHIP_VOP2_DSC_8K),
2953*4882a593Smuzhiyun 	  .regs = &rk3588_dsc_8k_pd_regs,
2954*4882a593Smuzhiyun 	},
2955*4882a593Smuzhiyun 
2956*4882a593Smuzhiyun 	{
2957*4882a593Smuzhiyun 	  .id = VOP2_PD_DSC_4K,
2958*4882a593Smuzhiyun 	  .module_id_mask = BIT(ROCKCHIP_VOP2_DSC_4K),
2959*4882a593Smuzhiyun 	  .regs = &rk3588_dsc_4k_pd_regs,
2960*4882a593Smuzhiyun 	},
2961*4882a593Smuzhiyun };
2962*4882a593Smuzhiyun 
2963*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_mem_pg_vp0_regs = {
2964*4882a593Smuzhiyun 	.pd = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_CON1, 0x1, 15),
2965*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_STATUS, 0x1, 19),
2966*4882a593Smuzhiyun };
2967*4882a593Smuzhiyun 
2968*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_mem_pg_vp1_regs = {
2969*4882a593Smuzhiyun 	.pd = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_CON2, 0x1, 0),
2970*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_STATUS, 0x1, 20),
2971*4882a593Smuzhiyun };
2972*4882a593Smuzhiyun 
2973*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_mem_pg_vp2_regs = {
2974*4882a593Smuzhiyun 	.pd = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_CON2, 0x1, 1),
2975*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_STATUS, 0x1, 21),
2976*4882a593Smuzhiyun };
2977*4882a593Smuzhiyun 
2978*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_mem_pg_vp3_regs = {
2979*4882a593Smuzhiyun 	.pd = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_CON2, 0x1, 2),
2980*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_STATUS, 0x1, 22),
2981*4882a593Smuzhiyun };
2982*4882a593Smuzhiyun 
2983*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_mem_pg_db0_regs = {
2984*4882a593Smuzhiyun 	.pd = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_CON2, 0x1, 3),
2985*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_STATUS, 0x1, 23),
2986*4882a593Smuzhiyun };
2987*4882a593Smuzhiyun 
2988*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_mem_pg_db1_regs = {
2989*4882a593Smuzhiyun 	.pd = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_CON2, 0x1, 4),
2990*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_STATUS, 0x1, 24),
2991*4882a593Smuzhiyun };
2992*4882a593Smuzhiyun 
2993*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_mem_pg_db2_regs = {
2994*4882a593Smuzhiyun 	.pd = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_CON2, 0x1, 5),
2995*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_STATUS, 0x1, 25),
2996*4882a593Smuzhiyun };
2997*4882a593Smuzhiyun 
2998*4882a593Smuzhiyun const struct vop2_power_domain_regs rk3588_mem_pg_wb_regs = {
2999*4882a593Smuzhiyun 	.pd = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_CON2, 0x1, 6),
3000*4882a593Smuzhiyun 	.status = VOP_REG(RK3588_PMU_SUBMEM_PWR_GATE_STATUS, 0x1, 26),
3001*4882a593Smuzhiyun };
3002*4882a593Smuzhiyun 
3003*4882a593Smuzhiyun /*
3004*4882a593Smuzhiyun  * All power gates will power on when PD_VOP is turn on.
3005*4882a593Smuzhiyun  * Corresponding mem_pwr_ack_bypass bit should be enabled
3006*4882a593Smuzhiyun  * if power gate powe down before PD_VOP.
3007*4882a593Smuzhiyun  * power gates take effect immediately, this means there
3008*4882a593Smuzhiyun  * is no synchronization between vop frame scanout, so
3009*4882a593Smuzhiyun  * we can only enable a power gate before we enable
3010*4882a593Smuzhiyun  * a module, and turn off power gate after the module
3011*4882a593Smuzhiyun  * is actually disabled.
3012*4882a593Smuzhiyun  */
3013*4882a593Smuzhiyun static const struct vop2_power_domain_data rk3588_vop_mem_pg_data[] = {
3014*4882a593Smuzhiyun 	{
3015*4882a593Smuzhiyun 	  .id = VOP2_MEM_PG_VP0,
3016*4882a593Smuzhiyun 	  .regs = &rk3588_mem_pg_vp0_regs,
3017*4882a593Smuzhiyun 	},
3018*4882a593Smuzhiyun 
3019*4882a593Smuzhiyun 	{
3020*4882a593Smuzhiyun 	  .id = VOP2_MEM_PG_VP1,
3021*4882a593Smuzhiyun 	  .regs = &rk3588_mem_pg_vp1_regs,
3022*4882a593Smuzhiyun 	},
3023*4882a593Smuzhiyun 
3024*4882a593Smuzhiyun 	{
3025*4882a593Smuzhiyun 	  .id = VOP2_MEM_PG_VP2,
3026*4882a593Smuzhiyun 	  .regs = &rk3588_mem_pg_vp2_regs,
3027*4882a593Smuzhiyun 	},
3028*4882a593Smuzhiyun 
3029*4882a593Smuzhiyun 	{
3030*4882a593Smuzhiyun 	  .id = VOP2_MEM_PG_VP3,
3031*4882a593Smuzhiyun 	  .regs = &rk3588_mem_pg_vp3_regs,
3032*4882a593Smuzhiyun 	},
3033*4882a593Smuzhiyun 
3034*4882a593Smuzhiyun 	{
3035*4882a593Smuzhiyun 	  .id = VOP2_MEM_PG_DB0,
3036*4882a593Smuzhiyun 	  .regs = &rk3588_mem_pg_db0_regs,
3037*4882a593Smuzhiyun 	},
3038*4882a593Smuzhiyun 
3039*4882a593Smuzhiyun 	{
3040*4882a593Smuzhiyun 	  .id = VOP2_MEM_PG_DB1,
3041*4882a593Smuzhiyun 	  .regs = &rk3588_mem_pg_db1_regs,
3042*4882a593Smuzhiyun 	},
3043*4882a593Smuzhiyun 
3044*4882a593Smuzhiyun 	{
3045*4882a593Smuzhiyun 	  .id = VOP2_MEM_PG_DB2,
3046*4882a593Smuzhiyun 	  .regs = &rk3588_mem_pg_db2_regs,
3047*4882a593Smuzhiyun 	},
3048*4882a593Smuzhiyun 
3049*4882a593Smuzhiyun 	{
3050*4882a593Smuzhiyun 	  .id = VOP2_MEM_PG_WB,
3051*4882a593Smuzhiyun 	  .regs = &rk3588_mem_pg_wb_regs,
3052*4882a593Smuzhiyun 	},
3053*4882a593Smuzhiyun };
3054*4882a593Smuzhiyun 
3055*4882a593Smuzhiyun /*
3056*4882a593Smuzhiyun  * rk3588 vop with 4 cluster, 4 esmart win.
3057*4882a593Smuzhiyun  * Every cluster can work as 4K win or split into two win.
3058*4882a593Smuzhiyun  * All win in cluster support AFBCD.
3059*4882a593Smuzhiyun  *
3060*4882a593Smuzhiyun  * Every esmart win and smart win support 4 Multi-region.
3061*4882a593Smuzhiyun  *
3062*4882a593Smuzhiyun  * Scale filter mode:
3063*4882a593Smuzhiyun  *
3064*4882a593Smuzhiyun  * * Cluster:  bicubic for horizontal scale up, others use bilinear
3065*4882a593Smuzhiyun  * * ESmart:
3066*4882a593Smuzhiyun  *    * nearest-neighbor/bilinear/bicubic for scale up
3067*4882a593Smuzhiyun  *    * nearest-neighbor/bilinear/average for scale down
3068*4882a593Smuzhiyun  *
3069*4882a593Smuzhiyun  * AXI Read ID assignment:
3070*4882a593Smuzhiyun  * Two AXI bus:
3071*4882a593Smuzhiyun  * AXI0 is a read/write bus with a higher performance.
3072*4882a593Smuzhiyun  * AXI1 is a read only bus.
3073*4882a593Smuzhiyun  *
3074*4882a593Smuzhiyun  * Every window on a AXI bus must assigned two unique
3075*4882a593Smuzhiyun  * read id(yrgb_id/uv_id, valid id are 0x1~0xe).
3076*4882a593Smuzhiyun  *
3077*4882a593Smuzhiyun  * AXI0:
3078*4882a593Smuzhiyun  * Cluster0/1, Esmart0/1, WriteBack
3079*4882a593Smuzhiyun  *
3080*4882a593Smuzhiyun  * AXI 1:
3081*4882a593Smuzhiyun  * Cluster2/3, Esmart2/3
3082*4882a593Smuzhiyun  *
3083*4882a593Smuzhiyun  * @TODO describe the wind like cpu-map dt nodes;
3084*4882a593Smuzhiyun  */
3085*4882a593Smuzhiyun static const struct vop2_win_data rk3588_vop_win_data[] = {
3086*4882a593Smuzhiyun 	{
3087*4882a593Smuzhiyun 	  .name = "Cluster0-win0",
3088*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER0,
3089*4882a593Smuzhiyun 	  .splice_win_id = ROCKCHIP_VOP2_CLUSTER1,
3090*4882a593Smuzhiyun 	  .base = 0x00,
3091*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
3092*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
3093*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc,
3094*4882a593Smuzhiyun 	  .layer_sel_id = { 0, 0, 0, 0 },
3095*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
3096*4882a593Smuzhiyun 				 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
3097*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3098*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3099*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3100*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3101*4882a593Smuzhiyun 	  .regs = &rk3568_cluster0_win_data,
3102*4882a593Smuzhiyun 	  .pd_id = VOP2_PD_CLUSTER0,
3103*4882a593Smuzhiyun 	  .axi_id = 0,
3104*4882a593Smuzhiyun 	  .axi_yrgb_id = 2,
3105*4882a593Smuzhiyun 	  .axi_uv_id = 3,
3106*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
3107*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
3108*4882a593Smuzhiyun 	  .dly = { 4, 26, 29 },
3109*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
3110*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_MAIN | WIN_FEATURE_SPLICE_LEFT,
3111*4882a593Smuzhiyun 	},
3112*4882a593Smuzhiyun 
3113*4882a593Smuzhiyun 	{
3114*4882a593Smuzhiyun 	  .name = "Cluster0-win1",
3115*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER0,
3116*4882a593Smuzhiyun 	  .base = 0x80,
3117*4882a593Smuzhiyun 	  .layer_sel_id = { 0xff, 0xff, 0xff, 0xff },
3118*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
3119*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
3120*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc,
3121*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
3122*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3123*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3124*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3125*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3126*4882a593Smuzhiyun 	  .regs = &rk3568_cluster0_win_data,
3127*4882a593Smuzhiyun 	  .axi_id = 0,
3128*4882a593Smuzhiyun 	  .axi_yrgb_id = 4,
3129*4882a593Smuzhiyun 	  .axi_uv_id = 5,
3130*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
3131*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
3132*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
3133*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_SUB,
3134*4882a593Smuzhiyun 	},
3135*4882a593Smuzhiyun 
3136*4882a593Smuzhiyun 	{
3137*4882a593Smuzhiyun 	  .name = "Cluster1-win0",
3138*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER1,
3139*4882a593Smuzhiyun 	  .base = 0x00,
3140*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
3141*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
3142*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc,
3143*4882a593Smuzhiyun 	  .layer_sel_id = { 1, 1, 1, 1 },
3144*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
3145*4882a593Smuzhiyun 				 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
3146*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3147*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3148*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3149*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3150*4882a593Smuzhiyun 	  .regs = &rk3568_cluster1_win_data,
3151*4882a593Smuzhiyun 	  .pd_id = VOP2_PD_CLUSTER1,
3152*4882a593Smuzhiyun 	  .axi_id = 0,
3153*4882a593Smuzhiyun 	  .axi_yrgb_id = 6,
3154*4882a593Smuzhiyun 	  .axi_uv_id = 7,
3155*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
3156*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
3157*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
3158*4882a593Smuzhiyun 	  .dly = { 4, 26, 29 },
3159*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_MAIN,
3160*4882a593Smuzhiyun 	},
3161*4882a593Smuzhiyun 
3162*4882a593Smuzhiyun 	{
3163*4882a593Smuzhiyun 	  .name = "Cluster1-win1",
3164*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER1,
3165*4882a593Smuzhiyun 	  .layer_sel_id = { 0xff, 0xff, 0xff, 0xff },
3166*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
3167*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
3168*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc,
3169*4882a593Smuzhiyun 	  .base = 0x80,
3170*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
3171*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3172*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3173*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3174*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3175*4882a593Smuzhiyun 	  .regs = &rk3568_cluster1_win_data,
3176*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
3177*4882a593Smuzhiyun 	  .axi_id = 0,
3178*4882a593Smuzhiyun 	  .axi_yrgb_id = 8,
3179*4882a593Smuzhiyun 	  .axi_uv_id = 9,
3180*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
3181*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
3182*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_SUB,
3183*4882a593Smuzhiyun 	},
3184*4882a593Smuzhiyun 
3185*4882a593Smuzhiyun 	{
3186*4882a593Smuzhiyun 	  .name = "Cluster2-win0",
3187*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER2,
3188*4882a593Smuzhiyun 	  .pd_id = VOP2_PD_CLUSTER2,
3189*4882a593Smuzhiyun 	  .splice_win_id = ROCKCHIP_VOP2_CLUSTER3,
3190*4882a593Smuzhiyun 	  .base = 0x00,
3191*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
3192*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
3193*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc,
3194*4882a593Smuzhiyun 	  .layer_sel_id = { 4, 4, 4, 4 },
3195*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
3196*4882a593Smuzhiyun 				 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
3197*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3198*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3199*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3200*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3201*4882a593Smuzhiyun 	  .regs = &rk3588_cluster2_win_data,
3202*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
3203*4882a593Smuzhiyun 	  .axi_id = 1,
3204*4882a593Smuzhiyun 	  .axi_yrgb_id = 2,
3205*4882a593Smuzhiyun 	  .axi_uv_id = 3,
3206*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
3207*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
3208*4882a593Smuzhiyun 	  .dly = { 4, 26, 29 },
3209*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_MAIN | WIN_FEATURE_SPLICE_LEFT,
3210*4882a593Smuzhiyun 	},
3211*4882a593Smuzhiyun 
3212*4882a593Smuzhiyun 	{
3213*4882a593Smuzhiyun 	  .name = "Cluster2-win1",
3214*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER2,
3215*4882a593Smuzhiyun 	  .layer_sel_id = { 0xff, 0xff, 0xff, 0xff },
3216*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
3217*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
3218*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc,
3219*4882a593Smuzhiyun 	  .base = 0x80,
3220*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
3221*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3222*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3223*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3224*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3225*4882a593Smuzhiyun 	  .regs = &rk3588_cluster2_win_data,
3226*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
3227*4882a593Smuzhiyun 	  .axi_id = 1,
3228*4882a593Smuzhiyun 	  .axi_yrgb_id = 4,
3229*4882a593Smuzhiyun 	  .axi_uv_id = 5,
3230*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
3231*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
3232*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_SUB,
3233*4882a593Smuzhiyun 	},
3234*4882a593Smuzhiyun 
3235*4882a593Smuzhiyun 	{
3236*4882a593Smuzhiyun 	  .name = "Cluster3-win0",
3237*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER3,
3238*4882a593Smuzhiyun 	  .pd_id = VOP2_PD_CLUSTER3,
3239*4882a593Smuzhiyun 	  .base = 0x00,
3240*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
3241*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
3242*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc,
3243*4882a593Smuzhiyun 	  .layer_sel_id = { 5, 5, 5, 5 },
3244*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_ROTATE_90 | DRM_MODE_ROTATE_270 |
3245*4882a593Smuzhiyun 				 DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
3246*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3247*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3248*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3249*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3250*4882a593Smuzhiyun 	  .regs = &rk3588_cluster3_win_data,
3251*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
3252*4882a593Smuzhiyun 	  .axi_id = 1,
3253*4882a593Smuzhiyun 	  .axi_yrgb_id = 6,
3254*4882a593Smuzhiyun 	  .axi_uv_id = 7,
3255*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
3256*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
3257*4882a593Smuzhiyun 	  .dly = { 4, 26, 29 },
3258*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_MAIN,
3259*4882a593Smuzhiyun 	},
3260*4882a593Smuzhiyun 
3261*4882a593Smuzhiyun 	{
3262*4882a593Smuzhiyun 	  .name = "Cluster3-win1",
3263*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_CLUSTER3,
3264*4882a593Smuzhiyun 	  .layer_sel_id = { 0xff, 0xff, 0xff, 0xff },
3265*4882a593Smuzhiyun 	  .formats = formats_for_cluster,
3266*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_cluster),
3267*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers_afbc,
3268*4882a593Smuzhiyun 	  .base = 0x80,
3269*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y,
3270*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3271*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3272*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3273*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3274*4882a593Smuzhiyun 	  .regs = &rk3588_cluster3_win_data,
3275*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_OVERLAY,
3276*4882a593Smuzhiyun 	  .axi_id = 1,
3277*4882a593Smuzhiyun 	  .axi_yrgb_id = 8,
3278*4882a593Smuzhiyun 	  .axi_uv_id = 9,
3279*4882a593Smuzhiyun 	  .max_upscale_factor = 4,
3280*4882a593Smuzhiyun 	  .max_downscale_factor = 4,
3281*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_AFBDC | WIN_FEATURE_CLUSTER_SUB,
3282*4882a593Smuzhiyun 	},
3283*4882a593Smuzhiyun 
3284*4882a593Smuzhiyun 	{
3285*4882a593Smuzhiyun 	  .name = "Esmart0-win0",
3286*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART0,
3287*4882a593Smuzhiyun 	  .splice_win_id = ROCKCHIP_VOP2_ESMART1,
3288*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
3289*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
3290*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
3291*4882a593Smuzhiyun 	  .base = 0x0,
3292*4882a593Smuzhiyun 	  .layer_sel_id = { 2, 2, 2, 2 },
3293*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
3294*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3295*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3296*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3297*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3298*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
3299*4882a593Smuzhiyun 	  .area = rk3568_area_data,
3300*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
3301*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
3302*4882a593Smuzhiyun 	  .axi_id = 0,
3303*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x0a,
3304*4882a593Smuzhiyun 	  .axi_uv_id = 0x0b,
3305*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
3306*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
3307*4882a593Smuzhiyun 	  .dly = { 23, 45, 48 },
3308*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_SPLICE_LEFT | WIN_FEATURE_MULTI_AREA,
3309*4882a593Smuzhiyun 	},
3310*4882a593Smuzhiyun 
3311*4882a593Smuzhiyun 	{
3312*4882a593Smuzhiyun 	  .name = "Esmart2-win0",
3313*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART2,
3314*4882a593Smuzhiyun 	  .pd_id = VOP2_PD_ESMART,
3315*4882a593Smuzhiyun 	  .splice_win_id = ROCKCHIP_VOP2_ESMART3,
3316*4882a593Smuzhiyun 	  .base = 0x400,
3317*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
3318*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
3319*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
3320*4882a593Smuzhiyun 	  .layer_sel_id = { 6, 6, 6, 6 },
3321*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
3322*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3323*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3324*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3325*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3326*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
3327*4882a593Smuzhiyun 	  .area = rk3568_area_data,
3328*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
3329*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
3330*4882a593Smuzhiyun 	  .axi_id = 1,
3331*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x0a,
3332*4882a593Smuzhiyun 	  .axi_uv_id = 0x0b,
3333*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
3334*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
3335*4882a593Smuzhiyun 	  .dly = { 23, 45, 48 },
3336*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_SPLICE_LEFT | WIN_FEATURE_MULTI_AREA,
3337*4882a593Smuzhiyun 	},
3338*4882a593Smuzhiyun 
3339*4882a593Smuzhiyun 	{
3340*4882a593Smuzhiyun 	  .name = "Esmart1-win0",
3341*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART1,
3342*4882a593Smuzhiyun 	  .pd_id = VOP2_PD_ESMART,
3343*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
3344*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
3345*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
3346*4882a593Smuzhiyun 	  .base = 0x200,
3347*4882a593Smuzhiyun 	  .layer_sel_id = { 3, 3, 3, 3 },
3348*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
3349*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3350*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3351*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3352*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3353*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
3354*4882a593Smuzhiyun 	  .area = rk3568_area_data,
3355*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
3356*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
3357*4882a593Smuzhiyun 	  .axi_id = 0,
3358*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x0c,
3359*4882a593Smuzhiyun 	  .axi_uv_id = 0x01,
3360*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
3361*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
3362*4882a593Smuzhiyun 	  .dly = { 23, 45, 48 },
3363*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
3364*4882a593Smuzhiyun 	},
3365*4882a593Smuzhiyun 
3366*4882a593Smuzhiyun 	{
3367*4882a593Smuzhiyun 	  .name = "Esmart3-win0",
3368*4882a593Smuzhiyun 	  .phys_id = ROCKCHIP_VOP2_ESMART3,
3369*4882a593Smuzhiyun 	  .pd_id = VOP2_PD_ESMART,
3370*4882a593Smuzhiyun 	  .formats = formats_for_esmart,
3371*4882a593Smuzhiyun 	  .nformats = ARRAY_SIZE(formats_for_esmart),
3372*4882a593Smuzhiyun 	  .format_modifiers = format_modifiers,
3373*4882a593Smuzhiyun 	  .base = 0x600,
3374*4882a593Smuzhiyun 	  .layer_sel_id = { 7, 7, 7, 7 },
3375*4882a593Smuzhiyun 	  .supported_rotations = DRM_MODE_REFLECT_Y,
3376*4882a593Smuzhiyun 	  .hsu_filter_mode = VOP2_SCALE_UP_BIC,
3377*4882a593Smuzhiyun 	  .hsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3378*4882a593Smuzhiyun 	  .vsu_filter_mode = VOP2_SCALE_UP_BIL,
3379*4882a593Smuzhiyun 	  .vsd_filter_mode = VOP2_SCALE_DOWN_BIL,
3380*4882a593Smuzhiyun 	  .regs = &rk3568_esmart_win_data,
3381*4882a593Smuzhiyun 	  .area = rk3568_area_data,
3382*4882a593Smuzhiyun 	  .area_size = ARRAY_SIZE(rk3568_area_data),
3383*4882a593Smuzhiyun 	  .type = DRM_PLANE_TYPE_PRIMARY,
3384*4882a593Smuzhiyun 	  .axi_id = 1,
3385*4882a593Smuzhiyun 	  .axi_yrgb_id = 0x0c,
3386*4882a593Smuzhiyun 	  .axi_uv_id = 0x0d,
3387*4882a593Smuzhiyun 	  .max_upscale_factor = 8,
3388*4882a593Smuzhiyun 	  .max_downscale_factor = 8,
3389*4882a593Smuzhiyun 	  .dly = { 23, 45, 48 },
3390*4882a593Smuzhiyun 	  .feature = WIN_FEATURE_MULTI_AREA,
3391*4882a593Smuzhiyun 	},
3392*4882a593Smuzhiyun };
3393*4882a593Smuzhiyun 
3394*4882a593Smuzhiyun static const struct vop2_ctrl rk3528_vop_ctrl = {
3395*4882a593Smuzhiyun 	.cfg_done_en = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 15),
3396*4882a593Smuzhiyun 	.wb_cfg_done = VOP_REG_MASK(RK3568_REG_CFG_DONE, 0x1, 14),
3397*4882a593Smuzhiyun 	.auto_gating_en = VOP_REG(RK3568_SYS_AUTO_GATING_CTRL, 0x1, 31),
3398*4882a593Smuzhiyun 	.aclk_pre_auto_gating_en = VOP_REG(RK3568_SYS_AUTO_GATING_CTRL, 0x1, 7),
3399*4882a593Smuzhiyun 	.if_ctrl_cfg_done_imd = VOP_REG(RK3568_DSP_IF_POL, 0x1, 28),
3400*4882a593Smuzhiyun 	.version = VOP_REG(RK3568_VERSION_INFO, 0xffff, 16),
3401*4882a593Smuzhiyun 	.lut_dma_en = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0x1, 0),
3402*4882a593Smuzhiyun 	.dsp_vs_t_sel = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0x1, 16),
3403*4882a593Smuzhiyun 	.rgb_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 0),
3404*4882a593Smuzhiyun 	.hdmi0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 1),
3405*4882a593Smuzhiyun 	.bt656_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 7),
3406*4882a593Smuzhiyun 	.rgb_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 8),
3407*4882a593Smuzhiyun 	.hdmi0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 10),
3408*4882a593Smuzhiyun 	.bt656_yc_swap = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 5),
3409*4882a593Smuzhiyun 	.bt656_dclk_pol = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 6),
3410*4882a593Smuzhiyun 	.hdmi_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 4),
3411*4882a593Smuzhiyun 	.hdmi_dclk_pol = VOP_REG(RK3568_DSP_IF_POL, 0x1, 7),
3412*4882a593Smuzhiyun 	.esmart_lb_mode = VOP_REG(RK3568_LUT_PORT_SEL, 0x3, 26),
3413*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_CLUSTER0] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 0),
3414*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART0] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 16),
3415*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART1] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 20),
3416*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART2] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 24),
3417*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART3] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 28),
3418*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_CLUSTER0] = VOP_REG(RK3528_OVL_SYS_CLUSTER0_CTRL, 0xffff, 0),
3419*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART0] = VOP_REG(RK3528_OVL_SYS_ESMART0_CTRL, 0xff, 0),
3420*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART1] = VOP_REG(RK3528_OVL_SYS_ESMART1_CTRL, 0xff, 0),
3421*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART2] = VOP_REG(RK3528_OVL_SYS_ESMART2_CTRL, 0xff, 0),
3422*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART3] = VOP_REG(RK3528_OVL_SYS_ESMART3_CTRL, 0xff, 0),
3423*4882a593Smuzhiyun };
3424*4882a593Smuzhiyun 
3425*4882a593Smuzhiyun static const struct vop_grf_ctrl rk3562_sys_grf_ctrl = {
3426*4882a593Smuzhiyun 	.grf_bt656_clk_inv = VOP_REG(RK3562_GRF_IOC_VO_IO_CON, 0x1, 3),
3427*4882a593Smuzhiyun 	.grf_bt1120_clk_inv = VOP_REG(RK3562_GRF_IOC_VO_IO_CON, 0x1, 3),
3428*4882a593Smuzhiyun 	.grf_dclk_inv = VOP_REG(RK3562_GRF_IOC_VO_IO_CON, 0x1, 3),
3429*4882a593Smuzhiyun };
3430*4882a593Smuzhiyun 
3431*4882a593Smuzhiyun static const struct vop2_ctrl rk3562_vop_ctrl = {
3432*4882a593Smuzhiyun 	.cfg_done_en = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 15),
3433*4882a593Smuzhiyun 	.wb_cfg_done = VOP_REG_MASK(RK3568_REG_CFG_DONE, 0x1, 14),
3434*4882a593Smuzhiyun 	.auto_gating_en = VOP_REG(RK3568_SYS_AUTO_GATING_CTRL, 0x1, 31),
3435*4882a593Smuzhiyun 	.aclk_pre_auto_gating_en = VOP_REG(RK3568_SYS_AUTO_GATING_CTRL, 0x1, 7),
3436*4882a593Smuzhiyun 	.if_ctrl_cfg_done_imd = VOP_REG(RK3568_DSP_IF_POL, 0x1, 28),
3437*4882a593Smuzhiyun 	.version = VOP_REG(RK3568_VERSION_INFO, 0xffff, 16),
3438*4882a593Smuzhiyun 	.lut_dma_en = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0x1, 0),
3439*4882a593Smuzhiyun 	.rgb_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 0),
3440*4882a593Smuzhiyun 	.mipi0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 4),
3441*4882a593Smuzhiyun 	.lvds0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 5),
3442*4882a593Smuzhiyun 	.bt1120_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 6),
3443*4882a593Smuzhiyun 	.bt656_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 7),
3444*4882a593Smuzhiyun 	.rgb_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 8),
3445*4882a593Smuzhiyun 	.mipi0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 16),
3446*4882a593Smuzhiyun 	.lvds0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 18),
3447*4882a593Smuzhiyun 	.bt656_yc_swap = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 5),
3448*4882a593Smuzhiyun 	.bt656_dclk_pol = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 6),
3449*4882a593Smuzhiyun 	.bt1120_yc_swap = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 9),
3450*4882a593Smuzhiyun 	.bt1120_dclk_pol = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 10),
3451*4882a593Smuzhiyun 	.rgb_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 0),
3452*4882a593Smuzhiyun 	.lvds_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 0),
3453*4882a593Smuzhiyun 	.lvds_dclk_pol = VOP_REG(RK3568_DSP_IF_POL, 0x1, 3),
3454*4882a593Smuzhiyun 	.mipi_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 12),
3455*4882a593Smuzhiyun 	.mipi_dclk_pol = VOP_REG(RK3568_DSP_IF_POL, 0x1, 15),
3456*4882a593Smuzhiyun 	.gamma_port_sel = VOP_REG(RK3568_LUT_PORT_SEL, 0x3, 12),
3457*4882a593Smuzhiyun 	.esmart_lb_mode = VOP_REG(RK3568_LUT_PORT_SEL, 0x3, 26),
3458*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART0] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 16),
3459*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART1] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 20),
3460*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART2] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 24),
3461*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART3] = VOP_REG(RK3528_OVL_SYS_PORT_SEL_IMD, 0x3, 28),
3462*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART0] = VOP_REG(RK3528_OVL_SYS_ESMART0_CTRL, 0xff, 0),
3463*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART1] = VOP_REG(RK3528_OVL_SYS_ESMART1_CTRL, 0xff, 0),
3464*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART2] = VOP_REG(RK3528_OVL_SYS_ESMART2_CTRL, 0xff, 0),
3465*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART3] = VOP_REG(RK3528_OVL_SYS_ESMART3_CTRL, 0xff, 0),
3466*4882a593Smuzhiyun };
3467*4882a593Smuzhiyun 
3468*4882a593Smuzhiyun static const struct vop_grf_ctrl rk3568_sys_grf_ctrl = {
3469*4882a593Smuzhiyun 	.grf_bt656_clk_inv = VOP_REG(RK3568_GRF_VO_CON1, 0x1, 1),
3470*4882a593Smuzhiyun 	.grf_bt1120_clk_inv = VOP_REG(RK3568_GRF_VO_CON1, 0x1, 2),
3471*4882a593Smuzhiyun 	.grf_dclk_inv = VOP_REG(RK3568_GRF_VO_CON1, 0x1, 3),
3472*4882a593Smuzhiyun };
3473*4882a593Smuzhiyun 
3474*4882a593Smuzhiyun static const struct vop2_ctrl rk3568_vop_ctrl = {
3475*4882a593Smuzhiyun 	.cfg_done_en = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 15),
3476*4882a593Smuzhiyun 	.wb_cfg_done = VOP_REG_MASK(RK3568_REG_CFG_DONE, 0x1, 14),
3477*4882a593Smuzhiyun 	.auto_gating_en = VOP_REG(RK3568_SYS_AUTO_GATING_CTRL, 0x1, 31),
3478*4882a593Smuzhiyun 	.ovl_cfg_done_port = VOP_REG(RK3568_OVL_CTRL, 0x3, 30),
3479*4882a593Smuzhiyun 	.ovl_port_mux_cfg_done_imd = VOP_REG(RK3568_OVL_CTRL, 0x1, 28),
3480*4882a593Smuzhiyun 	.ovl_port_mux_cfg = VOP_REG(RK3568_OVL_PORT_SEL, 0xffff, 0),
3481*4882a593Smuzhiyun 	.if_ctrl_cfg_done_imd = VOP_REG(RK3568_DSP_IF_POL, 0x1, 28),
3482*4882a593Smuzhiyun 	.version = VOP_REG(RK3568_VERSION_INFO, 0xffff, 16),
3483*4882a593Smuzhiyun 	.lut_dma_en = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0x1, 0),
3484*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3568_MIX0_SRC_COLOR_CTRL, 0xffffffff, 0),
3485*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3568_MIX0_DST_COLOR_CTRL, 0xffffffff, 0),
3486*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3568_MIX0_SRC_ALPHA_CTRL, 0xffffffff, 0),
3487*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3568_MIX0_DST_ALPHA_CTRL, 0xffffffff, 0),
3488*4882a593Smuzhiyun 	.rgb_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 0),
3489*4882a593Smuzhiyun 	.hdmi0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 1),
3490*4882a593Smuzhiyun 	.edp0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 3),
3491*4882a593Smuzhiyun 	.mipi0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 4),
3492*4882a593Smuzhiyun 	.mipi1_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 20),
3493*4882a593Smuzhiyun 	.lvds0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 5),
3494*4882a593Smuzhiyun 	.lvds1_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 24),
3495*4882a593Smuzhiyun 	.bt1120_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 6),
3496*4882a593Smuzhiyun 	.bt656_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 7),
3497*4882a593Smuzhiyun 	.rgb_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 8),
3498*4882a593Smuzhiyun 	.hdmi0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 10),
3499*4882a593Smuzhiyun 	.edp0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 14),
3500*4882a593Smuzhiyun 	.mipi0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 16),
3501*4882a593Smuzhiyun 	.mipi1_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 21),
3502*4882a593Smuzhiyun 	.lvds0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 18),
3503*4882a593Smuzhiyun 	.lvds1_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 25),
3504*4882a593Smuzhiyun 	.lvds_dual_en = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 0),
3505*4882a593Smuzhiyun 	.lvds_dual_mode = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 1),
3506*4882a593Smuzhiyun 	.lvds_dual_channel_swap = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 2),
3507*4882a593Smuzhiyun 	.bt656_yc_swap = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 5),
3508*4882a593Smuzhiyun 	.bt1120_yc_swap = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 9),
3509*4882a593Smuzhiyun 	.gamma_port_sel = VOP_REG(RK3568_LUT_PORT_SEL, 0x3, 0),
3510*4882a593Smuzhiyun 	.rgb_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 0),
3511*4882a593Smuzhiyun 	.lvds_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 0),
3512*4882a593Smuzhiyun 	.lvds_dclk_pol = VOP_REG(RK3568_DSP_IF_POL, 0x1, 3),
3513*4882a593Smuzhiyun 	.hdmi_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 4),
3514*4882a593Smuzhiyun 	.hdmi_dclk_pol = VOP_REG(RK3568_DSP_IF_POL, 0x1, 7),
3515*4882a593Smuzhiyun 	.edp_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x3, 12),
3516*4882a593Smuzhiyun 	.edp_dclk_pol = VOP_REG(RK3568_DSP_IF_POL, 0x1, 15),
3517*4882a593Smuzhiyun 	.mipi_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 16),
3518*4882a593Smuzhiyun 	.mipi_dclk_pol = VOP_REG(RK3568_DSP_IF_POL, 0x1, 19),
3519*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_CLUSTER0] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 16),
3520*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_CLUSTER1] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 18),
3521*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART0] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 24),
3522*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART1] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 26),
3523*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_SMART0] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 28),
3524*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_SMART1] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 30),
3525*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_CLUSTER0] = VOP_REG(RK3568_CLUSTER_DLY_NUM, 0xffff, 0),
3526*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_CLUSTER1] = VOP_REG(RK3568_CLUSTER_DLY_NUM, 0xffff, 16),
3527*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART0] = VOP_REG(RK3568_SMART_DLY_NUM, 0xff, 0),
3528*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART1] = VOP_REG(RK3568_SMART_DLY_NUM, 0xff, 8),
3529*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_SMART0] = VOP_REG(RK3568_SMART_DLY_NUM, 0xff, 16),
3530*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_SMART1] = VOP_REG(RK3568_SMART_DLY_NUM, 0xff, 24),
3531*4882a593Smuzhiyun 	.otp_en = VOP_REG(RK3568_OTP_WIN_EN, 0x1, 0),
3532*4882a593Smuzhiyun };
3533*4882a593Smuzhiyun 
3534*4882a593Smuzhiyun static const struct vop_grf_ctrl rk3588_sys_grf_ctrl = {
3535*4882a593Smuzhiyun 	.grf_bt656_clk_inv = VOP_REG(RK3588_GRF_SOC_CON1, 0x1, 14),
3536*4882a593Smuzhiyun 	.grf_bt1120_clk_inv = VOP_REG(RK3588_GRF_SOC_CON1, 0x1, 14),
3537*4882a593Smuzhiyun 	.grf_dclk_inv = VOP_REG(RK3588_GRF_SOC_CON1, 0x1, 14),
3538*4882a593Smuzhiyun };
3539*4882a593Smuzhiyun 
3540*4882a593Smuzhiyun static const struct vop_grf_ctrl rk3588_vop_grf_ctrl = {
3541*4882a593Smuzhiyun 	.grf_edp0_en = VOP_REG(RK3588_GRF_VOP_CON2, 0x1, 0),
3542*4882a593Smuzhiyun 	.grf_hdmi0_en = VOP_REG(RK3588_GRF_VOP_CON2, 0x1, 1),
3543*4882a593Smuzhiyun 	.grf_hdmi0_dsc_en = VOP_REG(RK3588_GRF_VOP_CON2, 0x1, 2),
3544*4882a593Smuzhiyun 	.grf_edp1_en = VOP_REG(RK3588_GRF_VOP_CON2, 0x1, 3),
3545*4882a593Smuzhiyun 	.grf_hdmi1_en = VOP_REG(RK3588_GRF_VOP_CON2, 0x1, 4),
3546*4882a593Smuzhiyun 	.grf_hdmi1_dsc_en = VOP_REG(RK3588_GRF_VOP_CON2, 0x1, 4),
3547*4882a593Smuzhiyun };
3548*4882a593Smuzhiyun 
3549*4882a593Smuzhiyun static const struct vop_grf_ctrl rk3588_vo1_grf_ctrl = {
3550*4882a593Smuzhiyun 	.grf_hdmi0_pin_pol = VOP_REG(RK3588_GRF_VO1_CON0, 0x3, 5),
3551*4882a593Smuzhiyun 	.grf_hdmi1_pin_pol = VOP_REG(RK3588_GRF_VO1_CON0, 0x3, 7),
3552*4882a593Smuzhiyun };
3553*4882a593Smuzhiyun 
3554*4882a593Smuzhiyun static const struct vop2_ctrl rk3588_vop_ctrl = {
3555*4882a593Smuzhiyun 	.cfg_done_en = VOP_REG(RK3568_REG_CFG_DONE, 0x1, 15),
3556*4882a593Smuzhiyun 	.wb_cfg_done = VOP_REG_MASK(RK3568_REG_CFG_DONE, 0x1, 14),
3557*4882a593Smuzhiyun 	.auto_gating_en = VOP_REG(RK3568_SYS_AUTO_GATING_CTRL, 0x1, 31),
3558*4882a593Smuzhiyun 	.dma_finish_mode = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x3, 0),
3559*4882a593Smuzhiyun 	.axi_dma_finish_and_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 2),
3560*4882a593Smuzhiyun 	.wb_dma_finish_and_en = VOP_REG(RK3588_SYS_VAR_FREQ_CTRL, 0x1, 3),
3561*4882a593Smuzhiyun 	.ovl_cfg_done_port = VOP_REG(RK3568_OVL_CTRL, 0x3, 30),
3562*4882a593Smuzhiyun 	.ovl_port_mux_cfg_done_imd = VOP_REG(RK3568_OVL_CTRL, 0x1, 28),
3563*4882a593Smuzhiyun 	.ovl_port_mux_cfg = VOP_REG(RK3568_OVL_PORT_SEL, 0xffff, 0),
3564*4882a593Smuzhiyun 	.if_ctrl_cfg_done_imd = VOP_REG(RK3568_DSP_IF_POL, 0x1, 28),
3565*4882a593Smuzhiyun 	.version = VOP_REG(RK3568_VERSION_INFO, 0xffff, 16),
3566*4882a593Smuzhiyun 	.lut_dma_en = VOP_REG(RK3568_SYS_AXI_LUT_CTRL, 0x1, 0),
3567*4882a593Smuzhiyun 	.src_color_ctrl = VOP_REG(RK3568_MIX0_SRC_COLOR_CTRL, 0xffffffff, 0),
3568*4882a593Smuzhiyun 	.dst_color_ctrl = VOP_REG(RK3568_MIX0_DST_COLOR_CTRL, 0xffffffff, 0),
3569*4882a593Smuzhiyun 	.src_alpha_ctrl = VOP_REG(RK3568_MIX0_SRC_ALPHA_CTRL, 0xffffffff, 0),
3570*4882a593Smuzhiyun 	.dst_alpha_ctrl = VOP_REG(RK3568_MIX0_DST_ALPHA_CTRL, 0xffffffff, 0),
3571*4882a593Smuzhiyun 	.dp0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 0),
3572*4882a593Smuzhiyun 	.dp1_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 1),
3573*4882a593Smuzhiyun 	.edp0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 2),
3574*4882a593Smuzhiyun 	.hdmi0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 3),
3575*4882a593Smuzhiyun 	.edp1_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 4),
3576*4882a593Smuzhiyun 	.hdmi1_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 5),
3577*4882a593Smuzhiyun 	.mipi0_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 6),
3578*4882a593Smuzhiyun 	.mipi1_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 7),
3579*4882a593Smuzhiyun 	.bt1120_en = VOP_REG(RK3568_DSP_IF_EN, 0x3, 8),
3580*4882a593Smuzhiyun 	.bt656_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 9),
3581*4882a593Smuzhiyun 	.rgb_en = VOP_REG(RK3568_DSP_IF_EN, 0x1, 10),
3582*4882a593Smuzhiyun 	.dp0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 12),
3583*4882a593Smuzhiyun 	.dp1_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 14),
3584*4882a593Smuzhiyun 	.hdmi0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 16),
3585*4882a593Smuzhiyun 	.edp0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 16),
3586*4882a593Smuzhiyun 	.hdmi1_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 18),
3587*4882a593Smuzhiyun 	.edp1_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 18),
3588*4882a593Smuzhiyun 	.mipi0_mux = VOP_REG(RK3568_DSP_IF_EN, 0x1, 20),
3589*4882a593Smuzhiyun 	.mipi1_mux = VOP_REG(RK3568_DSP_IF_EN, 0x3, 21),
3590*4882a593Smuzhiyun 	.bt656_yc_swap = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 1),
3591*4882a593Smuzhiyun 	.bt1120_yc_swap = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 5),
3592*4882a593Smuzhiyun 	.hdmi_dual_en = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 8),
3593*4882a593Smuzhiyun 	.edp_dual_en = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 8),
3594*4882a593Smuzhiyun 	.dp_dual_en = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 9),
3595*4882a593Smuzhiyun 	.mipi_dual_en = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 10),
3596*4882a593Smuzhiyun 	.mipi0_ds_mode = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 11),
3597*4882a593Smuzhiyun 	.mipi1_ds_mode = VOP_REG(RK3568_DSP_IF_CTRL, 0x1, 12),
3598*4882a593Smuzhiyun 	.hdmi0_dclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 16),
3599*4882a593Smuzhiyun 	.hdmi0_pixclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 18),
3600*4882a593Smuzhiyun 	.hdmi1_dclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 20),
3601*4882a593Smuzhiyun 	.hdmi1_pixclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 22),
3602*4882a593Smuzhiyun 	.edp0_dclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 16),
3603*4882a593Smuzhiyun 	.edp0_pixclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 18),
3604*4882a593Smuzhiyun 	.edp1_dclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 20),
3605*4882a593Smuzhiyun 	.edp1_pixclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 22),
3606*4882a593Smuzhiyun 
3607*4882a593Smuzhiyun 	.mipi0_pixclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 24),
3608*4882a593Smuzhiyun 	.mipi1_pixclk_div = VOP_REG(RK3568_DSP_IF_CTRL, 0x3, 26),
3609*4882a593Smuzhiyun 	/* HDMI pol control by GRF_VO1_CON0
3610*4882a593Smuzhiyun 	 * DP0/1 clk pol is fixed
3611*4882a593Smuzhiyun 	 * MIPI/eDP pol is fixed
3612*4882a593Smuzhiyun 	 */
3613*4882a593Smuzhiyun 	.rgb_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 0),
3614*4882a593Smuzhiyun 	.rgb_dclk_pol = VOP_REG(RK3568_DSP_IF_POL, 0x1, 3),
3615*4882a593Smuzhiyun 	.dp0_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 8),
3616*4882a593Smuzhiyun 	.dp1_pin_pol = VOP_REG(RK3568_DSP_IF_POL, 0x7, 12),
3617*4882a593Smuzhiyun 	.gamma_port_sel = VOP_REG(RK3568_LUT_PORT_SEL, 0x3, 12),
3618*4882a593Smuzhiyun 	.pd_off_imd = VOP_REG(RK3568_SYS_PD_CTRL, 0x1, 31),
3619*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_CLUSTER0] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 16),
3620*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_CLUSTER1] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 18),
3621*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_CLUSTER2] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 20),
3622*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_CLUSTER3] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 22),
3623*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART0] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 24),
3624*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART1] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 26),
3625*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART2] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 28),
3626*4882a593Smuzhiyun 	.win_vp_id[ROCKCHIP_VOP2_ESMART3] = VOP_REG(RK3568_OVL_PORT_SEL, 0x3, 30),
3627*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_CLUSTER0] = VOP_REG(RK3568_CLUSTER_DLY_NUM, 0xffff, 0),
3628*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_CLUSTER1] = VOP_REG(RK3568_CLUSTER_DLY_NUM, 0xffff, 16),
3629*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_CLUSTER2] = VOP_REG(RK3568_CLUSTER_DLY_NUM1, 0xffff, 0),
3630*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_CLUSTER3] = VOP_REG(RK3568_CLUSTER_DLY_NUM1, 0xffff, 16),
3631*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART0] = VOP_REG(RK3568_SMART_DLY_NUM, 0xff, 0),
3632*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART1] = VOP_REG(RK3568_SMART_DLY_NUM, 0xff, 8),
3633*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART2] = VOP_REG(RK3568_SMART_DLY_NUM, 0xff, 16),
3634*4882a593Smuzhiyun 	.win_dly[ROCKCHIP_VOP2_ESMART3] = VOP_REG(RK3568_SMART_DLY_NUM, 0xff, 24),
3635*4882a593Smuzhiyun };
3636*4882a593Smuzhiyun 
3637*4882a593Smuzhiyun static const struct vop_dump_regs rk3528_dump_regs[] = {
3638*4882a593Smuzhiyun 	{ RK3568_REG_CFG_DONE, "SYS", {0}, 0 },
3639*4882a593Smuzhiyun 	{ RK3528_OVL_SYS, "OVL_SYS", {0}, 0 },
3640*4882a593Smuzhiyun 	{ RK3528_OVL_PORT0_CTRL, "OVL_VP0", VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31), 0 },
3641*4882a593Smuzhiyun 	{ RK3528_OVL_PORT1_CTRL, "OVL_VP1", VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31), 0 },
3642*4882a593Smuzhiyun 	{ RK3568_VP0_DSP_CTRL, "VP0", VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31), 0 },
3643*4882a593Smuzhiyun 	{ RK3568_VP1_DSP_CTRL, "VP1", VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31), 0 },
3644*4882a593Smuzhiyun 	{ RK3568_CLUSTER0_WIN0_CTRL0, "Cluster0", VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 0), 1 },
3645*4882a593Smuzhiyun 	{ RK3568_ESMART0_CTRL0, "Esmart0", VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 0), 1 },
3646*4882a593Smuzhiyun 	{ RK3568_ESMART1_CTRL0, "Esmart1", VOP_REG(RK3568_ESMART1_REGION0_CTRL, 0x1, 0), 1 },
3647*4882a593Smuzhiyun 	{ RK3568_SMART0_CTRL0, "Esmart2", VOP_REG(RK3568_SMART0_CTRL0, 0x1, 0), 1 },
3648*4882a593Smuzhiyun 	{ RK3568_SMART1_CTRL0, "Esmart3", VOP_REG(RK3568_SMART1_CTRL0, 0x1, 0), 1 },
3649*4882a593Smuzhiyun 	{ RK3528_HDR_LUT_CTRL, "HDR", {0}, 0 },
3650*4882a593Smuzhiyun };
3651*4882a593Smuzhiyun 
3652*4882a593Smuzhiyun static const struct vop_dump_regs rk3562_dump_regs[] = {
3653*4882a593Smuzhiyun 	{ RK3568_REG_CFG_DONE, "SYS", {0}, 0 },
3654*4882a593Smuzhiyun 	{ RK3528_OVL_SYS, "OVL_SYS", {0}, 0 },
3655*4882a593Smuzhiyun 	{ RK3528_OVL_PORT0_CTRL, "OVL_VP0", VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31), 0 },
3656*4882a593Smuzhiyun 	{ RK3528_OVL_PORT1_CTRL, "OVL_VP1", VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31), 0 },
3657*4882a593Smuzhiyun 	{ RK3568_VP0_DSP_CTRL, "VP0", VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31), 0 },
3658*4882a593Smuzhiyun 	{ RK3568_VP1_DSP_CTRL, "VP1", VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31), 0 },
3659*4882a593Smuzhiyun 	{ RK3568_ESMART0_CTRL0, "Esmart0", VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 0), 1 },
3660*4882a593Smuzhiyun 	{ RK3568_ESMART1_CTRL0, "Esmart1", VOP_REG(RK3568_ESMART1_REGION0_CTRL, 0x1, 0), 1 },
3661*4882a593Smuzhiyun 	{ RK3568_SMART0_CTRL0, "Esmart2", VOP_REG(RK3568_SMART0_CTRL0, 0x1, 0), 1 },
3662*4882a593Smuzhiyun 	{ RK3568_SMART1_CTRL0, "Esmart3", VOP_REG(RK3568_SMART1_CTRL0, 0x1, 0), 1 },
3663*4882a593Smuzhiyun };
3664*4882a593Smuzhiyun 
3665*4882a593Smuzhiyun static const struct vop_dump_regs rk3568_dump_regs[] = {
3666*4882a593Smuzhiyun 	{ RK3568_REG_CFG_DONE, "SYS", {0}, 0 },
3667*4882a593Smuzhiyun 	{ RK3568_OVL_CTRL, "OVL", {0}, 0 },
3668*4882a593Smuzhiyun 	{ RK3568_VP0_DSP_CTRL, "VP0", VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31), 0 },
3669*4882a593Smuzhiyun 	{ RK3568_VP1_DSP_CTRL, "VP1", VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31), 0 },
3670*4882a593Smuzhiyun 	{ RK3568_VP2_DSP_CTRL, "VP2", VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 31), 0 },
3671*4882a593Smuzhiyun 	{ RK3568_CLUSTER0_WIN0_CTRL0, "Cluster0", VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 0), 1 },
3672*4882a593Smuzhiyun 	{ RK3568_CLUSTER1_WIN0_CTRL0, "Cluster1", VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x1, 0), 1 },
3673*4882a593Smuzhiyun 	{ RK3568_ESMART0_CTRL0, "Esmart0", VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 0), 1 },
3674*4882a593Smuzhiyun 	{ RK3568_ESMART1_CTRL0, "Esmart1", VOP_REG(RK3568_ESMART1_REGION0_CTRL, 0x1, 0), 1 },
3675*4882a593Smuzhiyun 	{ RK3568_SMART0_CTRL0, "Smart0", VOP_REG(RK3568_SMART0_REGION0_CTRL, 0x1, 0), 1 },
3676*4882a593Smuzhiyun 	{ RK3568_SMART1_CTRL0, "Smart1", VOP_REG(RK3568_SMART1_REGION0_CTRL, 0x1, 0), 1 },
3677*4882a593Smuzhiyun 	{ RK3568_HDR_LUT_CTRL, "HDR", {0}, 0 },
3678*4882a593Smuzhiyun };
3679*4882a593Smuzhiyun 
3680*4882a593Smuzhiyun static const struct vop_dump_regs rk3588_dump_regs[] = {
3681*4882a593Smuzhiyun 	{ RK3568_REG_CFG_DONE, "SYS", {0}, 0 },
3682*4882a593Smuzhiyun 	{ RK3568_OVL_CTRL, "OVL", {0}, 0 },
3683*4882a593Smuzhiyun 	{ RK3568_VP0_DSP_CTRL, "VP0", VOP_REG(RK3568_VP0_DSP_CTRL, 0x1, 31), 0 },
3684*4882a593Smuzhiyun 	{ RK3568_VP1_DSP_CTRL, "VP1", VOP_REG(RK3568_VP1_DSP_CTRL, 0x1, 31), 0 },
3685*4882a593Smuzhiyun 	{ RK3568_VP2_DSP_CTRL, "VP2", VOP_REG(RK3568_VP2_DSP_CTRL, 0x1, 31), 0 },
3686*4882a593Smuzhiyun 	{ RK3588_VP3_DSP_CTRL, "VP3", VOP_REG(RK3588_VP3_DSP_CTRL, 0x1, 31), 0 },
3687*4882a593Smuzhiyun 	{ RK3568_CLUSTER0_WIN0_CTRL0, "Cluster0", VOP_REG(RK3568_CLUSTER0_WIN0_CTRL0, 0x1, 0), 1 },
3688*4882a593Smuzhiyun 	{ RK3568_CLUSTER1_WIN0_CTRL0, "Cluster1", VOP_REG(RK3568_CLUSTER1_WIN0_CTRL0, 0x1, 0), 1 },
3689*4882a593Smuzhiyun 	{ RK3588_CLUSTER2_WIN0_CTRL0, "Cluster2", VOP_REG(RK3588_CLUSTER2_WIN0_CTRL0, 0x1, 0), 1 },
3690*4882a593Smuzhiyun 	{ RK3588_CLUSTER3_WIN0_CTRL0, "Cluster3", VOP_REG(RK3588_CLUSTER3_WIN0_CTRL0, 0x1, 0), 1 },
3691*4882a593Smuzhiyun 	{ RK3568_ESMART0_CTRL0, "Esmart0", VOP_REG(RK3568_ESMART0_REGION0_CTRL, 0x1, 0), 1 },
3692*4882a593Smuzhiyun 	{ RK3568_ESMART1_CTRL0, "Esmart1", VOP_REG(RK3568_ESMART1_REGION0_CTRL, 0x1, 0), 1 },
3693*4882a593Smuzhiyun 	{ RK3568_SMART0_CTRL0, "Esmart2", VOP_REG(RK3568_SMART0_REGION0_CTRL, 0x1, 0), 1 },
3694*4882a593Smuzhiyun 	{ RK3568_SMART1_CTRL0, "Esmart3", VOP_REG(RK3568_SMART1_REGION0_CTRL, 0x1, 0), 1 },
3695*4882a593Smuzhiyun 	{ RK3568_HDR_LUT_CTRL, "HDR", {0}, 0 },
3696*4882a593Smuzhiyun };
3697*4882a593Smuzhiyun 
3698*4882a593Smuzhiyun #define RK3568_PLANE_MASK_BASE \
3699*4882a593Smuzhiyun 	(BIT(ROCKCHIP_VOP2_CLUSTER0) | BIT(ROCKCHIP_VOP2_CLUSTER1) | \
3700*4882a593Smuzhiyun 	 BIT(ROCKCHIP_VOP2_ESMART0)  | BIT(ROCKCHIP_VOP2_ESMART1)  | \
3701*4882a593Smuzhiyun 	 BIT(ROCKCHIP_VOP2_SMART0)   | BIT(ROCKCHIP_VOP2_SMART1))
3702*4882a593Smuzhiyun 
3703*4882a593Smuzhiyun #define RK3588_PLANE_MASK_BASE \
3704*4882a593Smuzhiyun 	(BIT(ROCKCHIP_VOP2_CLUSTER0) | BIT(ROCKCHIP_VOP2_CLUSTER1) | \
3705*4882a593Smuzhiyun 	 BIT(ROCKCHIP_VOP2_CLUSTER2) | BIT(ROCKCHIP_VOP2_CLUSTER3) | \
3706*4882a593Smuzhiyun 	 BIT(ROCKCHIP_VOP2_ESMART0)  | BIT(ROCKCHIP_VOP2_ESMART1)  | \
3707*4882a593Smuzhiyun 	 BIT(ROCKCHIP_VOP2_ESMART2)  | BIT(ROCKCHIP_VOP2_ESMART3))
3708*4882a593Smuzhiyun 
3709*4882a593Smuzhiyun static struct vop2_vp_plane_mask rk3568_vp_plane_mask[ROCKCHIP_MAX_CRTC][ROCKCHIP_MAX_CRTC] = {
3710*4882a593Smuzhiyun 	{ /* one display policy */
3711*4882a593Smuzhiyun 		{/* main display */
3712*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_SMART0,
3713*4882a593Smuzhiyun 			.attached_layers_nr = 6,
3714*4882a593Smuzhiyun 			.attached_layers = {
3715*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER0, ROCKCHIP_VOP2_ESMART0, ROCKCHIP_VOP2_SMART0,
3716*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER1, ROCKCHIP_VOP2_ESMART1, ROCKCHIP_VOP2_SMART1
3717*4882a593Smuzhiyun 				},
3718*4882a593Smuzhiyun 		},
3719*4882a593Smuzhiyun 		{/* second display */},
3720*4882a593Smuzhiyun 		{/* third  display */},
3721*4882a593Smuzhiyun 		{/* fourth display */},
3722*4882a593Smuzhiyun 	},
3723*4882a593Smuzhiyun 
3724*4882a593Smuzhiyun 	{ /* two display policy */
3725*4882a593Smuzhiyun 		{/* main display */
3726*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_SMART0,
3727*4882a593Smuzhiyun 			.attached_layers_nr = 3,
3728*4882a593Smuzhiyun 			.attached_layers = {
3729*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER0, ROCKCHIP_VOP2_ESMART0, ROCKCHIP_VOP2_SMART0
3730*4882a593Smuzhiyun 				},
3731*4882a593Smuzhiyun 		},
3732*4882a593Smuzhiyun 
3733*4882a593Smuzhiyun 		{/* second display */
3734*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_SMART1,
3735*4882a593Smuzhiyun 			.attached_layers_nr = 3,
3736*4882a593Smuzhiyun 			.attached_layers = {
3737*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER1, ROCKCHIP_VOP2_ESMART1, ROCKCHIP_VOP2_SMART1
3738*4882a593Smuzhiyun 				},
3739*4882a593Smuzhiyun 		},
3740*4882a593Smuzhiyun 		{/* third  display */},
3741*4882a593Smuzhiyun 		{/* fourth display */},
3742*4882a593Smuzhiyun 	},
3743*4882a593Smuzhiyun 
3744*4882a593Smuzhiyun 	{ /* three display policy */
3745*4882a593Smuzhiyun 		{/* main display */
3746*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_SMART0,
3747*4882a593Smuzhiyun 			.attached_layers_nr = 3,
3748*4882a593Smuzhiyun 			.attached_layers = {
3749*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER0, ROCKCHIP_VOP2_ESMART0, ROCKCHIP_VOP2_SMART0
3750*4882a593Smuzhiyun 				},
3751*4882a593Smuzhiyun 		},
3752*4882a593Smuzhiyun 
3753*4882a593Smuzhiyun 		{/* second display */
3754*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_SMART1,
3755*4882a593Smuzhiyun 			.attached_layers_nr = 2,
3756*4882a593Smuzhiyun 			.attached_layers = {
3757*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER1, ROCKCHIP_VOP2_SMART1
3758*4882a593Smuzhiyun 				},
3759*4882a593Smuzhiyun 		},
3760*4882a593Smuzhiyun 
3761*4882a593Smuzhiyun 		{/* third  display */
3762*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART1,
3763*4882a593Smuzhiyun 			.attached_layers_nr = 1,
3764*4882a593Smuzhiyun 			.attached_layers = { ROCKCHIP_VOP2_ESMART1 },
3765*4882a593Smuzhiyun 		},
3766*4882a593Smuzhiyun 
3767*4882a593Smuzhiyun 		{/* fourth display */},
3768*4882a593Smuzhiyun 	},
3769*4882a593Smuzhiyun 
3770*4882a593Smuzhiyun 	{/* reserved for four display policy */},
3771*4882a593Smuzhiyun };
3772*4882a593Smuzhiyun 
3773*4882a593Smuzhiyun static struct vop2_vp_plane_mask rk3588_vp_plane_mask[ROCKCHIP_MAX_CRTC][ROCKCHIP_MAX_CRTC] = {
3774*4882a593Smuzhiyun 	{ /* one display policy */
3775*4882a593Smuzhiyun 		{/* main display */
3776*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART0,
3777*4882a593Smuzhiyun 			.attached_layers_nr = 8,
3778*4882a593Smuzhiyun 			.attached_layers = {
3779*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER0, ROCKCHIP_VOP2_ESMART0, ROCKCHIP_VOP2_ESMART2,
3780*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER1, ROCKCHIP_VOP2_ESMART1, ROCKCHIP_VOP2_ESMART3,
3781*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER2, ROCKCHIP_VOP2_CLUSTER3
3782*4882a593Smuzhiyun 			},
3783*4882a593Smuzhiyun 		},
3784*4882a593Smuzhiyun 		{/* second display */},
3785*4882a593Smuzhiyun 		{/* third  display */},
3786*4882a593Smuzhiyun 		{/* fourth display */},
3787*4882a593Smuzhiyun 	},
3788*4882a593Smuzhiyun 
3789*4882a593Smuzhiyun 	{ /* two display policy */
3790*4882a593Smuzhiyun 		{/* main display */
3791*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART0,
3792*4882a593Smuzhiyun 			.attached_layers_nr = 4,
3793*4882a593Smuzhiyun 			.attached_layers = {
3794*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER0, ROCKCHIP_VOP2_ESMART0,
3795*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER1, ROCKCHIP_VOP2_ESMART1
3796*4882a593Smuzhiyun 			},
3797*4882a593Smuzhiyun 		},
3798*4882a593Smuzhiyun 
3799*4882a593Smuzhiyun 		{/* second display */
3800*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART2,
3801*4882a593Smuzhiyun 			.attached_layers_nr = 4,
3802*4882a593Smuzhiyun 			.attached_layers = {
3803*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER2, ROCKCHIP_VOP2_ESMART2,
3804*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER3, ROCKCHIP_VOP2_ESMART3
3805*4882a593Smuzhiyun 			},
3806*4882a593Smuzhiyun 		},
3807*4882a593Smuzhiyun 		{/* third  display */},
3808*4882a593Smuzhiyun 		{/* fourth display */},
3809*4882a593Smuzhiyun 	},
3810*4882a593Smuzhiyun 
3811*4882a593Smuzhiyun 	{ /* three display policy */
3812*4882a593Smuzhiyun 		{/* main display */
3813*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART0,
3814*4882a593Smuzhiyun 			.attached_layers_nr = 3,
3815*4882a593Smuzhiyun 			.attached_layers = {
3816*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER0, ROCKCHIP_VOP2_CLUSTER1, ROCKCHIP_VOP2_ESMART0
3817*4882a593Smuzhiyun 			},
3818*4882a593Smuzhiyun 		},
3819*4882a593Smuzhiyun 
3820*4882a593Smuzhiyun 		{/* second display */
3821*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART1,
3822*4882a593Smuzhiyun 			.attached_layers_nr = 3,
3823*4882a593Smuzhiyun 			.attached_layers = {
3824*4882a593Smuzhiyun 				  ROCKCHIP_VOP2_CLUSTER2, ROCKCHIP_VOP2_CLUSTER3, ROCKCHIP_VOP2_ESMART1
3825*4882a593Smuzhiyun 			},
3826*4882a593Smuzhiyun 		},
3827*4882a593Smuzhiyun 
3828*4882a593Smuzhiyun 		{/* third  display */
3829*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART2,
3830*4882a593Smuzhiyun 			.attached_layers_nr = 2,
3831*4882a593Smuzhiyun 			.attached_layers = { ROCKCHIP_VOP2_ESMART2, ROCKCHIP_VOP2_ESMART3 },
3832*4882a593Smuzhiyun 		},
3833*4882a593Smuzhiyun 
3834*4882a593Smuzhiyun 		{/* fourth display */},
3835*4882a593Smuzhiyun 	},
3836*4882a593Smuzhiyun 
3837*4882a593Smuzhiyun 	{ /* four display policy */
3838*4882a593Smuzhiyun 		{/* main display */
3839*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART0,
3840*4882a593Smuzhiyun 			.attached_layers_nr = 2,
3841*4882a593Smuzhiyun 			.attached_layers = { ROCKCHIP_VOP2_CLUSTER0, ROCKCHIP_VOP2_ESMART0 },
3842*4882a593Smuzhiyun 		},
3843*4882a593Smuzhiyun 
3844*4882a593Smuzhiyun 		{/* second display */
3845*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART1,
3846*4882a593Smuzhiyun 			.attached_layers_nr = 2,
3847*4882a593Smuzhiyun 			.attached_layers = { ROCKCHIP_VOP2_CLUSTER1, ROCKCHIP_VOP2_ESMART1 },
3848*4882a593Smuzhiyun 		},
3849*4882a593Smuzhiyun 
3850*4882a593Smuzhiyun 		{/* third  display */
3851*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART2,
3852*4882a593Smuzhiyun 			.attached_layers_nr = 2,
3853*4882a593Smuzhiyun 			.attached_layers = { ROCKCHIP_VOP2_CLUSTER2, ROCKCHIP_VOP2_ESMART2 },
3854*4882a593Smuzhiyun 		},
3855*4882a593Smuzhiyun 
3856*4882a593Smuzhiyun 		{/* fourth display */
3857*4882a593Smuzhiyun 			.primary_plane_id = ROCKCHIP_VOP2_ESMART3,
3858*4882a593Smuzhiyun 			.attached_layers_nr = 2,
3859*4882a593Smuzhiyun 			.attached_layers = { ROCKCHIP_VOP2_CLUSTER3, ROCKCHIP_VOP2_ESMART3 },
3860*4882a593Smuzhiyun 		},
3861*4882a593Smuzhiyun 	},
3862*4882a593Smuzhiyun 
3863*4882a593Smuzhiyun };
3864*4882a593Smuzhiyun 
3865*4882a593Smuzhiyun static const struct vop2_data rk3528_vop = {
3866*4882a593Smuzhiyun 	.version = VOP_VERSION_RK3528,
3867*4882a593Smuzhiyun 	.nr_vps = 2,
3868*4882a593Smuzhiyun 	.nr_mixers = 4,
3869*4882a593Smuzhiyun 	.nr_layers = 4,
3870*4882a593Smuzhiyun 	.nr_gammas = 2,
3871*4882a593Smuzhiyun 	.esmart_lb_mode = VOP3_ESMART_4K_2K_2K_MODE,
3872*4882a593Smuzhiyun 	.max_input = { 4096, 4096 },
3873*4882a593Smuzhiyun 	.max_output = { 4096, 4096 },
3874*4882a593Smuzhiyun 	.ctrl = &rk3528_vop_ctrl,
3875*4882a593Smuzhiyun 	.axi_intr = rk3528_vop_axi_intr,
3876*4882a593Smuzhiyun 	.nr_axi_intr = ARRAY_SIZE(rk3528_vop_axi_intr),
3877*4882a593Smuzhiyun 	.vp = rk3528_vop_video_ports,
3878*4882a593Smuzhiyun 	.wb = &rk3568_vop_wb_data,
3879*4882a593Smuzhiyun 	.win = rk3528_vop_win_data,
3880*4882a593Smuzhiyun 	.win_size = ARRAY_SIZE(rk3528_vop_win_data),
3881*4882a593Smuzhiyun 	.dump_regs = rk3528_dump_regs,
3882*4882a593Smuzhiyun 	.dump_regs_size = ARRAY_SIZE(rk3528_dump_regs),
3883*4882a593Smuzhiyun };
3884*4882a593Smuzhiyun 
3885*4882a593Smuzhiyun static const struct vop2_data rk3562_vop = {
3886*4882a593Smuzhiyun 	.version = VOP_VERSION_RK3562,
3887*4882a593Smuzhiyun 	.nr_vps = ARRAY_SIZE(rk3562_vop_video_ports),
3888*4882a593Smuzhiyun 	.nr_mixers = 3,
3889*4882a593Smuzhiyun 	.nr_layers = 4,
3890*4882a593Smuzhiyun 	.nr_gammas = 2,
3891*4882a593Smuzhiyun 	.esmart_lb_mode = VOP3_ESMART_2K_2K_2K_2K_MODE,
3892*4882a593Smuzhiyun 	.max_input = { 4096, 4096 },
3893*4882a593Smuzhiyun 	.max_output = { 4096, 4096 },
3894*4882a593Smuzhiyun 	.ctrl = &rk3562_vop_ctrl,
3895*4882a593Smuzhiyun 	.sys_grf = &rk3562_sys_grf_ctrl,
3896*4882a593Smuzhiyun 	.axi_intr = rk3528_vop_axi_intr,
3897*4882a593Smuzhiyun 	.nr_axi_intr = ARRAY_SIZE(rk3528_vop_axi_intr),
3898*4882a593Smuzhiyun 	.vp = rk3562_vop_video_ports,
3899*4882a593Smuzhiyun 	.wb = &rk3568_vop_wb_data,
3900*4882a593Smuzhiyun 	.win = rk3562_vop_win_data,
3901*4882a593Smuzhiyun 	.win_size = ARRAY_SIZE(rk3562_vop_win_data),
3902*4882a593Smuzhiyun 	.dump_regs = rk3562_dump_regs,
3903*4882a593Smuzhiyun 	.dump_regs_size = ARRAY_SIZE(rk3562_dump_regs),
3904*4882a593Smuzhiyun };
3905*4882a593Smuzhiyun 
3906*4882a593Smuzhiyun static const struct vop2_data rk3568_vop = {
3907*4882a593Smuzhiyun 	.version = VOP_VERSION_RK3568,
3908*4882a593Smuzhiyun 	.nr_vps = 3,
3909*4882a593Smuzhiyun 	.nr_mixers = 5,
3910*4882a593Smuzhiyun 	.nr_layers = 6,
3911*4882a593Smuzhiyun 	.nr_gammas = 1,
3912*4882a593Smuzhiyun 	.max_input = { 4096, 2304 },
3913*4882a593Smuzhiyun 	.max_output = { 4096, 2304 },
3914*4882a593Smuzhiyun 	.ctrl = &rk3568_vop_ctrl,
3915*4882a593Smuzhiyun 	.sys_grf = &rk3568_sys_grf_ctrl,
3916*4882a593Smuzhiyun 	.axi_intr = rk3568_vop_axi_intr,
3917*4882a593Smuzhiyun 	.nr_axi_intr = ARRAY_SIZE(rk3568_vop_axi_intr),
3918*4882a593Smuzhiyun 	.vp = rk3568_vop_video_ports,
3919*4882a593Smuzhiyun 	.wb = &rk3568_vop_wb_data,
3920*4882a593Smuzhiyun 	.layer = rk3568_vop_layers,
3921*4882a593Smuzhiyun 	.win = rk3568_vop_win_data,
3922*4882a593Smuzhiyun 	.win_size = ARRAY_SIZE(rk3568_vop_win_data),
3923*4882a593Smuzhiyun 	.dump_regs = rk3568_dump_regs,
3924*4882a593Smuzhiyun 	.dump_regs_size = ARRAY_SIZE(rk3568_dump_regs),
3925*4882a593Smuzhiyun 	.plane_mask = rk3568_vp_plane_mask[0],
3926*4882a593Smuzhiyun 	.plane_mask_base = RK3568_PLANE_MASK_BASE,
3927*4882a593Smuzhiyun };
3928*4882a593Smuzhiyun 
3929*4882a593Smuzhiyun static const struct vop2_data rk3588_vop = {
3930*4882a593Smuzhiyun 	.version = VOP_VERSION_RK3588,
3931*4882a593Smuzhiyun 	.feature = VOP_FEATURE_SPLICE,
3932*4882a593Smuzhiyun 	.nr_dscs = 2,
3933*4882a593Smuzhiyun 	.nr_dsc_ecw = ARRAY_SIZE(dsc_ecw),
3934*4882a593Smuzhiyun 	.nr_dsc_buffer_flow = ARRAY_SIZE(dsc_buffer_flow),
3935*4882a593Smuzhiyun 	.nr_vps = 4,
3936*4882a593Smuzhiyun 	.nr_mixers = 7,
3937*4882a593Smuzhiyun 	.nr_layers = 8,
3938*4882a593Smuzhiyun 	.nr_gammas = 4,
3939*4882a593Smuzhiyun 	.max_input = { 4096, 4320 },
3940*4882a593Smuzhiyun 	.max_output = { 4096, 4320 },
3941*4882a593Smuzhiyun 	.ctrl = &rk3588_vop_ctrl,
3942*4882a593Smuzhiyun 	.grf = &rk3588_vop_grf_ctrl,
3943*4882a593Smuzhiyun 	.sys_grf = &rk3588_sys_grf_ctrl,
3944*4882a593Smuzhiyun 	.vo1_grf = &rk3588_vo1_grf_ctrl,
3945*4882a593Smuzhiyun 	.axi_intr = rk3568_vop_axi_intr,
3946*4882a593Smuzhiyun 	.nr_axi_intr = ARRAY_SIZE(rk3568_vop_axi_intr),
3947*4882a593Smuzhiyun 	.dsc = rk3588_vop_dsc_data,
3948*4882a593Smuzhiyun 	.dsc_error_ecw = dsc_ecw,
3949*4882a593Smuzhiyun 	.dsc_error_buffer_flow = dsc_buffer_flow,
3950*4882a593Smuzhiyun 	.vp = rk3588_vop_video_ports,
3951*4882a593Smuzhiyun 	.conn = rk3588_conn_if_data,
3952*4882a593Smuzhiyun 	.nr_conns = ARRAY_SIZE(rk3588_conn_if_data),
3953*4882a593Smuzhiyun 	.wb = &rk3568_vop_wb_data,
3954*4882a593Smuzhiyun 	.layer = rk3568_vop_layers,
3955*4882a593Smuzhiyun 	.win = rk3588_vop_win_data,
3956*4882a593Smuzhiyun 	.win_size = ARRAY_SIZE(rk3588_vop_win_data),
3957*4882a593Smuzhiyun 	.pd = rk3588_vop_pd_data,
3958*4882a593Smuzhiyun 	.nr_pds = ARRAY_SIZE(rk3588_vop_pd_data),
3959*4882a593Smuzhiyun 	.mem_pg = rk3588_vop_mem_pg_data,
3960*4882a593Smuzhiyun 	.nr_mem_pgs = ARRAY_SIZE(rk3588_vop_mem_pg_data),
3961*4882a593Smuzhiyun 	.dump_regs = rk3588_dump_regs,
3962*4882a593Smuzhiyun 	.dump_regs_size = ARRAY_SIZE(rk3588_dump_regs),
3963*4882a593Smuzhiyun 	.plane_mask = rk3588_vp_plane_mask[0],
3964*4882a593Smuzhiyun 	.plane_mask_base = RK3588_PLANE_MASK_BASE,
3965*4882a593Smuzhiyun };
3966*4882a593Smuzhiyun 
3967*4882a593Smuzhiyun static const struct of_device_id vop2_dt_match[] = {
3968*4882a593Smuzhiyun 	{ .compatible = "rockchip,rk3528-vop",
3969*4882a593Smuzhiyun 	  .data = &rk3528_vop },
3970*4882a593Smuzhiyun 	{ .compatible = "rockchip,rk3562-vop",
3971*4882a593Smuzhiyun 	  .data = &rk3562_vop },
3972*4882a593Smuzhiyun 	{ .compatible = "rockchip,rk3568-vop",
3973*4882a593Smuzhiyun 	  .data = &rk3568_vop },
3974*4882a593Smuzhiyun 	{ .compatible = "rockchip,rk3588-vop",
3975*4882a593Smuzhiyun 	  .data = &rk3588_vop },
3976*4882a593Smuzhiyun 
3977*4882a593Smuzhiyun 	{},
3978*4882a593Smuzhiyun };
3979*4882a593Smuzhiyun MODULE_DEVICE_TABLE(of, vop2_dt_match);
3980*4882a593Smuzhiyun 
vop2_probe(struct platform_device * pdev)3981*4882a593Smuzhiyun static int vop2_probe(struct platform_device *pdev)
3982*4882a593Smuzhiyun {
3983*4882a593Smuzhiyun 	struct device *dev = &pdev->dev;
3984*4882a593Smuzhiyun 
3985*4882a593Smuzhiyun 	if (!dev->of_node) {
3986*4882a593Smuzhiyun 		DRM_DEV_ERROR(dev, "can't find vop2 devices\n");
3987*4882a593Smuzhiyun 		return -ENODEV;
3988*4882a593Smuzhiyun 	}
3989*4882a593Smuzhiyun 	return component_add(dev, &vop2_component_ops);
3990*4882a593Smuzhiyun }
3991*4882a593Smuzhiyun 
vop2_remove(struct platform_device * pdev)3992*4882a593Smuzhiyun static int vop2_remove(struct platform_device *pdev)
3993*4882a593Smuzhiyun {
3994*4882a593Smuzhiyun 	component_del(&pdev->dev, &vop2_component_ops);
3995*4882a593Smuzhiyun 
3996*4882a593Smuzhiyun 	return 0;
3997*4882a593Smuzhiyun }
3998*4882a593Smuzhiyun 
3999*4882a593Smuzhiyun struct platform_driver vop2_platform_driver = {
4000*4882a593Smuzhiyun 	.probe = vop2_probe,
4001*4882a593Smuzhiyun 	.remove = vop2_remove,
4002*4882a593Smuzhiyun 	.driver = {
4003*4882a593Smuzhiyun 		.name = "rockchip-vop2",
4004*4882a593Smuzhiyun 		.of_match_table = of_match_ptr(vop2_dt_match),
4005*4882a593Smuzhiyun 	},
4006*4882a593Smuzhiyun };
4007