xref: /OK3568_Linux_fs/kernel/drivers/media/i2c/rk628/rk628.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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