1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (c) 2020 Rockchip Electronics Co. Ltd.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Author: Shunqing Chen <csq@rock-chips.com>
6*4882a593Smuzhiyun */
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun #ifndef _RK628_H
9*4882a593Smuzhiyun #define _RK628_H
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun #include <linux/module.h>
12*4882a593Smuzhiyun #include <linux/i2c.h>
13*4882a593Smuzhiyun #include <linux/regmap.h>
14*4882a593Smuzhiyun #include <linux/version.h>
15*4882a593Smuzhiyun #include <video/videomode.h>
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun #define UPDATE(x, h, l) (((x) << (l)) & GENMASK((h), (l)))
18*4882a593Smuzhiyun #define HIWORD_UPDATE(v, h, l) (((v) << (l)) | (GENMASK((h), (l)) << 16))
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun #define GRF_SYSTEM_CON0 0x0000
21*4882a593Smuzhiyun #define SW_VSYNC_POL_MASK BIT(26)
22*4882a593Smuzhiyun #define SW_VSYNC_POL(x) UPDATE(x, 26, 26)
23*4882a593Smuzhiyun #define SW_HSYNC_POL_MASK BIT(25)
24*4882a593Smuzhiyun #define SW_HSYNC_POL(x) UPDATE(x, 25, 25)
25*4882a593Smuzhiyun #define SW_ADAPTER_I2CSLADR_MASK GENMASK(24, 22)
26*4882a593Smuzhiyun #define SW_ADAPTER_I2CSLADR(x) UPDATE(x, 24, 22)
27*4882a593Smuzhiyun #define SW_EDID_MODE_MASK BIT(21)
28*4882a593Smuzhiyun #define SW_EDID_MODE(x) UPDATE(x, 21, 21)
29*4882a593Smuzhiyun #define SW_I2S_DATA_OEN_MASK BIT(10)
30*4882a593Smuzhiyun #define SW_I2S_DATA_OEN(x) UPDATE(x, 10, 10)
31*4882a593Smuzhiyun #define SW_BT_DATA_OEN_MASK BIT(9)
32*4882a593Smuzhiyun #define SW_BT_DATA_OEN BIT(9)
33*4882a593Smuzhiyun #define SW_EFUSE_HDCP_EN_MASK BIT(8)
34*4882a593Smuzhiyun #define SW_EFUSE_HDCP_EN(x) UPDATE(x, 8, 8)
35*4882a593Smuzhiyun #define SW_OUTPUT_MODE_MASK GENMASK(7, 3)
36*4882a593Smuzhiyun #define SW_OUTPUT_MODE(x) UPDATE(x, 7, 3)
37*4882a593Smuzhiyun #define SW_INPUT_MODE_MASK GENMASK(2, 0)
38*4882a593Smuzhiyun #define SW_INPUT_MODE(x) UPDATE(x, 2, 0)
39*4882a593Smuzhiyun #define GRF_SYSTEM_CON1 0x0004
40*4882a593Smuzhiyun #define GRF_SYSTEM_CON2 0x0008
41*4882a593Smuzhiyun #define GRF_SYSTEM_CON3 0x000c
42*4882a593Smuzhiyun #define GRF_GPIO_RX_CEC_SEL_MASK BIT(7)
43*4882a593Smuzhiyun #define GRF_GPIO_RX_CEC_SEL(x) UPDATE(x, 7, 7)
44*4882a593Smuzhiyun #define GRF_GPIO_RXDDC_SDA_SEL_MASK BIT(6)
45*4882a593Smuzhiyun #define GRF_GPIO_RXDDC_SDA_SEL(x) UPDATE(x, 6, 6)
46*4882a593Smuzhiyun #define GRF_GPIO_RXDDC_SCL_SEL_MASK BIT(5)
47*4882a593Smuzhiyun #define GRF_GPIO_RXDDC_SCL_SEL(x) UPDATE(x, 5, 5)
48*4882a593Smuzhiyun #define GRF_SCALER_CON0 0x0010
49*4882a593Smuzhiyun #define SCL_VER_DOWN_MODE(x) HIWORD_UPDATE(x, 8, 8)
50*4882a593Smuzhiyun #define SCL_HOR_DOWN_MODE(x) HIWORD_UPDATE(x, 7, 7)
51*4882a593Smuzhiyun #define SCL_BIC_COE_SEL(x) HIWORD_UPDATE(x, 6, 5)
52*4882a593Smuzhiyun #define SCL_VER_MODE(x) HIWORD_UPDATE(x, 4, 3)
53*4882a593Smuzhiyun #define SCL_HOR_MODE(x) HIWORD_UPDATE(x, 2, 1)
54*4882a593Smuzhiyun #define SCL_EN(x) HIWORD_UPDATE(x, 0, 0)
55*4882a593Smuzhiyun #define GRF_SCALER_CON1 0x0014
56*4882a593Smuzhiyun #define SCL_V_FACTOR(x) UPDATE(x, 31, 16)
57*4882a593Smuzhiyun #define SCL_H_FACTOR(x) UPDATE(x, 15, 0)
58*4882a593Smuzhiyun #define GRF_SCALER_CON2 0x0018
59*4882a593Smuzhiyun #define DSP_FRAME_VST(x) UPDATE(x, 28, 16)
60*4882a593Smuzhiyun #define DSP_FRAME_HST(x) UPDATE(x, 12, 0)
61*4882a593Smuzhiyun #define GRF_SCALER_CON3 0x001c
62*4882a593Smuzhiyun #define DSP_HS_END(x) UPDATE(x, 23, 16)
63*4882a593Smuzhiyun #define DSP_HTOTAL(x) UPDATE(x, 12, 0)
64*4882a593Smuzhiyun #define GRF_SCALER_CON4 0x0020
65*4882a593Smuzhiyun #define DSP_HACT_ST(x) UPDATE(x, 28, 16)
66*4882a593Smuzhiyun #define DSP_HACT_END(x) UPDATE(x, 12, 0)
67*4882a593Smuzhiyun #define GRF_SCALER_CON5 0x0024
68*4882a593Smuzhiyun #define DSP_VS_END(x) UPDATE(x, 23, 16)
69*4882a593Smuzhiyun #define DSP_VTOTAL(x) UPDATE(x, 12, 0)
70*4882a593Smuzhiyun #define GRF_SCALER_CON6 0x0028
71*4882a593Smuzhiyun #define DSP_VACT_ST(x) UPDATE(x, 28, 16)
72*4882a593Smuzhiyun #define DSP_VACT_END(x) UPDATE(x, 12, 0)
73*4882a593Smuzhiyun #define GRF_SCALER_CON7 0x002c
74*4882a593Smuzhiyun #define DSP_HBOR_ST(x) UPDATE(x, 28, 16)
75*4882a593Smuzhiyun #define DSP_HBOR_END(x) UPDATE(x, 12, 0)
76*4882a593Smuzhiyun #define GRF_SCALER_CON8 0x0030
77*4882a593Smuzhiyun #define DSP_VBOR_ST(x) UPDATE(x, 28, 16)
78*4882a593Smuzhiyun #define DSP_VBOR_END(x) UPDATE(x, 12, 0)
79*4882a593Smuzhiyun #define GRF_POST_PROC_CON 0x0034
80*4882a593Smuzhiyun #define SW_DCLK_OUT_INV_EN BIT(9)
81*4882a593Smuzhiyun #define SW_DCLK_IN_INV_EN BIT(8)
82*4882a593Smuzhiyun #define SW_TXPHY_REFCLK_SEL_MASK GENMASK(6, 5)
83*4882a593Smuzhiyun #define SW_TXPHY_REFCLK_SEL(x) UPDATE(x, 6, 5)
84*4882a593Smuzhiyun #define SW_HDMITX_VCLK_PLLREF_SEL_MASK BIT(4)
85*4882a593Smuzhiyun #define SW_HDMITX_VCLK_PLLREF_SEL(x) UPDATE(x, 4, 4)
86*4882a593Smuzhiyun #define SW_HDMITX_DCLK_INV_EN BIT(3)
87*4882a593Smuzhiyun #define SW_SPLIT_MODE(x) UPDATE(x, 1, 1)
88*4882a593Smuzhiyun #define SW_SPLIT_EN BIT(0)
89*4882a593Smuzhiyun #define GRF_CSC_CTRL_CON 0x0038
90*4882a593Smuzhiyun #define SW_YUV2VYU_SWP(x) HIWORD_UPDATE(x, 8, 8)
91*4882a593Smuzhiyun #define SW_R2Y_EN(x) HIWORD_UPDATE(x, 4, 4)
92*4882a593Smuzhiyun #define SW_Y2R_EN(x) HIWORD_UPDATE(x, 0, 0)
93*4882a593Smuzhiyun #define GRF_LVDS_TX_CON 0x003c
94*4882a593Smuzhiyun #define SW_LVDS_CON_DUAL_SEL(x) HIWORD_UPDATE(x, 12, 12)
95*4882a593Smuzhiyun #define SW_LVDS_CON_DEN_POLARITY(x) HIWORD_UPDATE(x, 11, 11)
96*4882a593Smuzhiyun #define SW_LVDS_CON_HS_POLARITY(x) HIWORD_UPDATE(x, 10, 10)
97*4882a593Smuzhiyun #define SW_LVDS_CON_CLKINV(x) HIWORD_UPDATE(x, 9, 9)
98*4882a593Smuzhiyun #define SW_LVDS_STARTPHASE(x) HIWORD_UPDATE(x, 8, 8)
99*4882a593Smuzhiyun #define SW_LVDS_CON_STARTSEL(x) HIWORD_UPDATE(x, 7, 7)
100*4882a593Smuzhiyun #define SW_LVDS_CON_CHASEL(x) HIWORD_UPDATE(x, 6, 6)
101*4882a593Smuzhiyun #define SW_LVDS_TIE_VSYNC_VALUE(x) HIWORD_UPDATE(x, 5, 5)
102*4882a593Smuzhiyun #define SW_LVDS_TIE_HSYNC_VALUE(x) HIWORD_UPDATE(x, 4, 4)
103*4882a593Smuzhiyun #define SW_LVDS_TIE_DEN_ONLY(x) HIWORD_UPDATE(x, 3, 3)
104*4882a593Smuzhiyun #define SW_LVDS_CON_MSBSEL(x) HIWORD_UPDATE(x, 2, 2)
105*4882a593Smuzhiyun #define SW_LVDS_CON_SELECT(x) HIWORD_UPDATE(x, 1, 0)
106*4882a593Smuzhiyun #define GRF_RGB_DEC_CON0 0x0040
107*4882a593Smuzhiyun #define SW_HRES_MASK GENMASK(28, 16)
108*4882a593Smuzhiyun #define SW_HRES(x) UPDATE(x, 28, 16)
109*4882a593Smuzhiyun #define DUAL_DATA_SWAP BIT(6)
110*4882a593Smuzhiyun #define DEC_DUALEDGE_EN BIT(5)
111*4882a593Smuzhiyun #define SW_PROGRESS_EN BIT(4)
112*4882a593Smuzhiyun #define SW_YC_SWAP BIT(3)
113*4882a593Smuzhiyun #define SW_CAP_EN_ASYNC BIT(1)
114*4882a593Smuzhiyun #define SW_CAP_EN_PSYNC BIT(0)
115*4882a593Smuzhiyun #define GRF_RGB_DEC_CON1 0x0044
116*4882a593Smuzhiyun #define SW_SET_X_MASK GENMASK(28, 16)
117*4882a593Smuzhiyun #define SW_SET_X(x) HIWORD_UPDATE(x, 28, 16)
118*4882a593Smuzhiyun #define SW_SET_Y_MASK GENMASK(28, 16)
119*4882a593Smuzhiyun #define SW_SET_Y(x) HIWORD_UPDATE(x, 28, 16)
120*4882a593Smuzhiyun #define GRF_RGB_DEC_CON2 0x0048
121*4882a593Smuzhiyun #define GRF_RGB_ENC_CON 0x004c
122*4882a593Smuzhiyun #define BT1120_UV_SWAP(x) HIWORD_UPDATE(x, 5, 5)
123*4882a593Smuzhiyun #define ENC_DUALEDGE_EN(x) HIWORD_UPDATE(x, 3, 3)
124*4882a593Smuzhiyun #define GRF_MIPI_LANE_DELAY_CON0 0x0050
125*4882a593Smuzhiyun #define GRF_MIPI_LANE_DELAY_CON1 0x0054
126*4882a593Smuzhiyun #define GRF_BT1120_DCLK_DELAY_CON0 0x0058
127*4882a593Smuzhiyun #define GRF_BT1120_DCLK_DELAY_CON1 0x005c
128*4882a593Smuzhiyun #define GRF_MIPI_TX0_CON 0x0060
129*4882a593Smuzhiyun #define DPIUPDATECFG BIT(26)
130*4882a593Smuzhiyun #define DPICOLORM BIT(25)
131*4882a593Smuzhiyun #define DPISHUTDN BIT(24)
132*4882a593Smuzhiyun #define CSI_PHYRSTZ BIT(21)
133*4882a593Smuzhiyun #define CSI_PHYSHUTDOWNZ BIT(20)
134*4882a593Smuzhiyun #define FORCETXSTOPMODE_MASK GENMASK(19, 16)
135*4882a593Smuzhiyun #define FORCETXSTOPMODE(x) UPDATE(x, 19, 16)
136*4882a593Smuzhiyun #define FORCERXMODE_MASK GENMASK(15, 12)
137*4882a593Smuzhiyun #define FORCERXMODE(x) UPDATE(x, 15, 12)
138*4882a593Smuzhiyun #define PHY_TESTCLR BIT(10)
139*4882a593Smuzhiyun #define PHY_TESTCLK BIT(9)
140*4882a593Smuzhiyun #define PHY_TESTEN BIT(8)
141*4882a593Smuzhiyun #define PHY_TESTDIN_MASK GENMASK(7, 0)
142*4882a593Smuzhiyun #define PHY_TESTDIN(x) UPDATE(x, 7, 0)
143*4882a593Smuzhiyun #define GRF_DPHY0_STATUS 0x0064
144*4882a593Smuzhiyun #define DPHY_PHYLOCK BIT(24)
145*4882a593Smuzhiyun #define PHY_TESTDOUT_SHIFT 8
146*4882a593Smuzhiyun #define GRF_MIPI_TX1_CON 0x0068
147*4882a593Smuzhiyun #define GRF_DPHY1_STATUS 0x006c
148*4882a593Smuzhiyun #define GRF_GPIO0AB_SEL_CON 0x0070
149*4882a593Smuzhiyun #define GRF_GPIO1AB_SEL_CON 0x0074
150*4882a593Smuzhiyun #define GRF_GPIO2AB_SEL_CON 0x0078
151*4882a593Smuzhiyun #define GRF_GPIO2C_SEL_CON 0x007c
152*4882a593Smuzhiyun #define GRF_GPIO3AB_SEL_CON 0x0080
153*4882a593Smuzhiyun #define GRF_GPIO2A_SMT 0x0090
154*4882a593Smuzhiyun #define GRF_GPIO2B_SMT 0x0094
155*4882a593Smuzhiyun #define GRF_GPIO2C_SMT 0x0098
156*4882a593Smuzhiyun #define GRF_GPIO3AB_SMT 0x009c
157*4882a593Smuzhiyun #define GRF_GPIO0A_P_CON 0x00a0
158*4882a593Smuzhiyun #define GRF_GPIO1A_P_CON 0x00a4
159*4882a593Smuzhiyun #define GRF_GPIO2A_P_CON 0x00a8
160*4882a593Smuzhiyun #define GRF_GPIO2B_P_CON 0x00ac
161*4882a593Smuzhiyun #define GRF_GPIO2C_P_CON 0x00b0
162*4882a593Smuzhiyun #define GRF_GPIO3A_P_CON 0x00b4
163*4882a593Smuzhiyun #define GRF_GPIO3B_P_CON 0x00b8
164*4882a593Smuzhiyun #define GRF_GPIO0B_D_CON 0x00c0
165*4882a593Smuzhiyun #define GRF_GPIO1B_D_CON 0x00c4
166*4882a593Smuzhiyun #define GRF_GPIO2A_D0_CON 0x00c8
167*4882a593Smuzhiyun #define GRF_GPIO2A_D1_CON 0x00cc
168*4882a593Smuzhiyun #define GRF_GPIO2B_D0_CON 0x00d0
169*4882a593Smuzhiyun #define GRF_GPIO2B_D1_CON 0x00d4
170*4882a593Smuzhiyun #define GRF_GPIO2C_D0_CON 0x00d8
171*4882a593Smuzhiyun #define GRF_GPIO2C_D1_CON 0x00dc
172*4882a593Smuzhiyun #define GRF_GPIO3A_D0_CON 0x00e0
173*4882a593Smuzhiyun #define GRF_GPIO3A_D1_CON 0x00e4
174*4882a593Smuzhiyun #define GRF_GPIO3B_D_CON 0x00e8
175*4882a593Smuzhiyun #define GRF_GPIO_SR_CON 0x00ec
176*4882a593Smuzhiyun #define GRF_INTR0_EN 0x0100
177*4882a593Smuzhiyun #define GRF_INTR0_CLR_EN 0x0104
178*4882a593Smuzhiyun #define GRF_INTR0_STATUS 0x0108
179*4882a593Smuzhiyun #define GRF_INTR0_RAW_STATUS 0x010c
180*4882a593Smuzhiyun #define GRF_INTR1_EN 0x0110
181*4882a593Smuzhiyun #define GRF_INTR1_CLR_EN 0x0114
182*4882a593Smuzhiyun #define GRF_INTR1_STATUS 0x0118
183*4882a593Smuzhiyun #define GRF_INTR1_RAW_STATUS 0x011c
184*4882a593Smuzhiyun #define GRF_SYSTEM_STATUS0 0x0120
185*4882a593Smuzhiyun /* 0: i2c mode and mcu mode; 1: i2c mode only */
186*4882a593Smuzhiyun #define I2C_ONLY_FLAG BIT(6)
187*4882a593Smuzhiyun #define GRF_SYSTEM_STATUS3 0x012c
188*4882a593Smuzhiyun #define GRF_SYSTEM_STATUS4 0x0130
189*4882a593Smuzhiyun #define GRF_OS_REG0 0x0140
190*4882a593Smuzhiyun #define GRF_OS_REG1 0x0144
191*4882a593Smuzhiyun #define GRF_OS_REG2 0x0148
192*4882a593Smuzhiyun #define GRF_OS_REG3 0x014c
193*4882a593Smuzhiyun #define GRF_SOC_VERSION 0x0150
194*4882a593Smuzhiyun #define GRF_MAX_REGISTER GRF_SOC_VERSION
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun enum {
197*4882a593Smuzhiyun COMBTXPHY_MODULEA_EN = BIT(0),
198*4882a593Smuzhiyun COMBTXPHY_MODULEB_EN = BIT(1),
199*4882a593Smuzhiyun };
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun enum {
202*4882a593Smuzhiyun OUTPUT_MODE_GVI = 1,
203*4882a593Smuzhiyun OUTPUT_MODE_LVDS,
204*4882a593Smuzhiyun OUTPUT_MODE_HDMI,
205*4882a593Smuzhiyun OUTPUT_MODE_CSI,
206*4882a593Smuzhiyun OUTPUT_MODE_DSI,
207*4882a593Smuzhiyun OUTPUT_MODE_BT1120 = 8,
208*4882a593Smuzhiyun OUTPUT_MODE_RGB = 16,
209*4882a593Smuzhiyun OUTPUT_MODE_YUV = 24,
210*4882a593Smuzhiyun };
211*4882a593Smuzhiyun
212*4882a593Smuzhiyun enum {
213*4882a593Smuzhiyun INPUT_MODE_HDMI,
214*4882a593Smuzhiyun INPUT_MODE_BT1120 = 2,
215*4882a593Smuzhiyun INPUT_MODE_RGB,
216*4882a593Smuzhiyun INPUT_MODE_YUV,
217*4882a593Smuzhiyun };
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun enum {
220*4882a593Smuzhiyun RK628_DEV_GRF,
221*4882a593Smuzhiyun RK628_DEV_COMBRXPHY,
222*4882a593Smuzhiyun RK628_DEV_HDMIRX = 3,
223*4882a593Smuzhiyun RK628_DEV_CSI,
224*4882a593Smuzhiyun RK628_DEV_DSI0,
225*4882a593Smuzhiyun RK628_DEV_DSI1,
226*4882a593Smuzhiyun RK628_DEV_HDMITX,
227*4882a593Smuzhiyun RK628_DEV_GVI,
228*4882a593Smuzhiyun RK628_DEV_COMBTXPHY,
229*4882a593Smuzhiyun RK628_DEV_ADAPTER,
230*4882a593Smuzhiyun RK628_DEV_EFUSE,
231*4882a593Smuzhiyun RK628_DEV_CRU,
232*4882a593Smuzhiyun RK628_DEV_GPIO0,
233*4882a593Smuzhiyun RK628_DEV_GPIO1,
234*4882a593Smuzhiyun RK628_DEV_GPIO2,
235*4882a593Smuzhiyun RK628_DEV_GPIO3,
236*4882a593Smuzhiyun RK628_DEV_MAX,
237*4882a593Smuzhiyun };
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun struct rk628 {
240*4882a593Smuzhiyun struct device *dev;
241*4882a593Smuzhiyun struct i2c_client *client;
242*4882a593Smuzhiyun struct regmap *regmap[RK628_DEV_MAX];
243*4882a593Smuzhiyun void *txphy;
244*4882a593Smuzhiyun };
245*4882a593Smuzhiyun
rk628_i2c_write(struct rk628 * rk628,u32 reg,u32 val)246*4882a593Smuzhiyun static inline int rk628_i2c_write(struct rk628 *rk628, u32 reg, u32 val)
247*4882a593Smuzhiyun {
248*4882a593Smuzhiyun int region = (reg >> 16) & 0xff;
249*4882a593Smuzhiyun int ret = 0;
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun ret = regmap_write(rk628->regmap[region], reg, val);
252*4882a593Smuzhiyun if (ret < 0)
253*4882a593Smuzhiyun pr_info("%s: i2c err reg=0x%x, val=0x%x, ret=%d\n", __func__, reg, val, ret);
254*4882a593Smuzhiyun
255*4882a593Smuzhiyun return ret;
256*4882a593Smuzhiyun }
257*4882a593Smuzhiyun
rk628_i2c_read(struct rk628 * rk628,u32 reg,u32 * val)258*4882a593Smuzhiyun static inline int rk628_i2c_read(struct rk628 *rk628, u32 reg, u32 *val)
259*4882a593Smuzhiyun {
260*4882a593Smuzhiyun int region = (reg >> 16) & 0xff;
261*4882a593Smuzhiyun int ret = 0;
262*4882a593Smuzhiyun
263*4882a593Smuzhiyun ret = regmap_read(rk628->regmap[region], reg, val);
264*4882a593Smuzhiyun if (ret < 0)
265*4882a593Smuzhiyun pr_info("%s: i2c err reg=0x%x, val=0x%x ret=%d\n", __func__, reg, *val, ret);
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun return ret;
268*4882a593Smuzhiyun }
269*4882a593Smuzhiyun
rk628_i2c_update_bits(struct rk628 * rk628,u32 reg,u32 mask,u32 val)270*4882a593Smuzhiyun static inline int rk628_i2c_update_bits(struct rk628 *rk628, u32 reg, u32 mask,
271*4882a593Smuzhiyun u32 val)
272*4882a593Smuzhiyun {
273*4882a593Smuzhiyun int region = (reg >> 16) & 0xff;
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun return regmap_update_bits(rk628->regmap[region], reg, mask, val);
276*4882a593Smuzhiyun }
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun struct rk628 *rk628_i2c_register(struct i2c_client *client);
279*4882a593Smuzhiyun void rk628_post_process_en(struct rk628 *rk628,
280*4882a593Smuzhiyun struct videomode *src,
281*4882a593Smuzhiyun struct videomode *dst,
282*4882a593Smuzhiyun u64 *dst_pclk);
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun #endif
285