xref: /OK3568_Linux_fs/kernel/include/linux/mfd/rk806.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef __LINUX_REGULATOR_RK806_H
7*4882a593Smuzhiyun #define __LINUX_REGULATOR_RK806_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/regmap.h>
10*4882a593Smuzhiyun #include <linux/regulator/driver.h>
11*4882a593Smuzhiyun #include <linux/regulator/machine.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define RK806_POWER_EN0			0x0
14*4882a593Smuzhiyun #define RK806_POWER_EN1			0x1
15*4882a593Smuzhiyun #define RK806_POWER_EN2			0x2
16*4882a593Smuzhiyun #define RK806_POWER_EN3			0x3
17*4882a593Smuzhiyun #define RK806_POWER_EN4			0x4
18*4882a593Smuzhiyun #define RK806_POWER_EN5			0x5
19*4882a593Smuzhiyun #define RK806_POWER_SLP_EN0		0x6
20*4882a593Smuzhiyun #define RK806_POWER_SLP_EN1		0x7
21*4882a593Smuzhiyun #define RK806_POWER_SLP_EN2		0x8
22*4882a593Smuzhiyun #define RK806_POWER_DISCHRG_EN0		0x9
23*4882a593Smuzhiyun #define RK806_POWER_DISCHRG_EN1		0xA
24*4882a593Smuzhiyun #define RK806_POWER_DISCHRG_EN2		0xB
25*4882a593Smuzhiyun #define RK806_BUCK_FB_CONFIG		0xC
26*4882a593Smuzhiyun #define RK806_SLP_LP_CONFIG		0xD
27*4882a593Smuzhiyun #define RK806_POWER_FPWM_EN0		0xE
28*4882a593Smuzhiyun #define RK806_POWER_FPWM_EN1		0xF
29*4882a593Smuzhiyun #define RK806_BUCK1_CONFIG		0x10
30*4882a593Smuzhiyun #define RK806_BUCK2_CONFIG		0x11
31*4882a593Smuzhiyun #define RK806_BUCK3_CONFIG		0x12
32*4882a593Smuzhiyun #define RK806_BUCK4_CONFIG		0x13
33*4882a593Smuzhiyun #define RK806_BUCK5_CONFIG		0x14
34*4882a593Smuzhiyun #define RK806_BUCK6_CONFIG		0x15
35*4882a593Smuzhiyun #define RK806_BUCK7_CONFIG		0x16
36*4882a593Smuzhiyun #define RK806_BUCK8_CONFIG		0x17
37*4882a593Smuzhiyun #define RK806_BUCK9_CONFIG		0x18
38*4882a593Smuzhiyun #define RK806_BUCK10_CONFIG		0x19
39*4882a593Smuzhiyun #define RK806_BUCK1_ON_VSEL		0x1A
40*4882a593Smuzhiyun #define RK806_BUCK2_ON_VSEL		0x1B
41*4882a593Smuzhiyun #define RK806_BUCK3_ON_VSEL		0x1C
42*4882a593Smuzhiyun #define RK806_BUCK4_ON_VSEL		0x1D
43*4882a593Smuzhiyun #define RK806_BUCK5_ON_VSEL		0x1E
44*4882a593Smuzhiyun #define RK806_BUCK6_ON_VSEL		0x1F
45*4882a593Smuzhiyun #define RK806_BUCK7_ON_VSEL		0x20
46*4882a593Smuzhiyun #define RK806_BUCK8_ON_VSEL		0x21
47*4882a593Smuzhiyun #define RK806_BUCK9_ON_VSEL		0x22
48*4882a593Smuzhiyun #define RK806_BUCK10_ON_VSEL		0x23
49*4882a593Smuzhiyun #define RK806_BUCK1_SLP_VSEL		0x24
50*4882a593Smuzhiyun #define RK806_BUCK2_SLP_VSEL		0x25
51*4882a593Smuzhiyun #define RK806_BUCK3_SLP_VSEL		0x26
52*4882a593Smuzhiyun #define RK806_BUCK4_SLP_VSEL		0x27
53*4882a593Smuzhiyun #define RK806_BUCK5_SLP_VSEL		0x28
54*4882a593Smuzhiyun #define RK806_BUCK6_SLP_VSEL		0x29
55*4882a593Smuzhiyun #define RK806_BUCK7_SLP_VSEL		0x2A
56*4882a593Smuzhiyun #define RK806_BUCK8_SLP_VSEL		0x2B
57*4882a593Smuzhiyun #define RK806_BUCK9_SLP_VSEL		0x2D
58*4882a593Smuzhiyun #define RK806_BUCK10_SLP_VSEL		0x2E
59*4882a593Smuzhiyun #define RK806_BUCK_DEBUG1		0x30
60*4882a593Smuzhiyun #define RK806_BUCK_DEBUG2		0x31
61*4882a593Smuzhiyun #define RK806_BUCK_DEBUG3		0x32
62*4882a593Smuzhiyun #define RK806_BUCK_DEBUG4		0x33
63*4882a593Smuzhiyun #define RK806_BUCK_DEBUG5		0x34
64*4882a593Smuzhiyun #define RK806_BUCK_DEBUG6		0x35
65*4882a593Smuzhiyun #define RK806_BUCK_DEBUG7		0x36
66*4882a593Smuzhiyun #define RK806_BUCK_DEBUG8		0x37
67*4882a593Smuzhiyun #define RK806_BUCK_DEBUG9		0x38
68*4882a593Smuzhiyun #define RK806_BUCK_DEBUG10		0x39
69*4882a593Smuzhiyun #define RK806_BUCK_DEBUG11		0x3A
70*4882a593Smuzhiyun #define RK806_BUCK_DEBUG12		0x3B
71*4882a593Smuzhiyun #define RK806_BUCK_DEBUG13		0x3C
72*4882a593Smuzhiyun #define RK806_BUCK_DEBUG14		0x3D
73*4882a593Smuzhiyun #define RK806_BUCK_DEBUG15		0x3E
74*4882a593Smuzhiyun #define RK806_BUCK_DEBUG16		0x3F
75*4882a593Smuzhiyun #define RK806_BUCK_DEBUG17		0x40
76*4882a593Smuzhiyun #define RK806_BUCK_DEBUG18		0x41
77*4882a593Smuzhiyun #define RK806_NLDO_IMAX			0x42
78*4882a593Smuzhiyun #define RK806_NLDO1_ON_VSEL		0x43
79*4882a593Smuzhiyun #define RK806_NLDO2_ON_VSEL		0x44
80*4882a593Smuzhiyun #define RK806_NLDO3_ON_VSEL		0x45
81*4882a593Smuzhiyun #define RK806_NLDO4_ON_VSEL		0x46
82*4882a593Smuzhiyun #define RK806_NLDO5_ON_VSEL		0x47
83*4882a593Smuzhiyun #define RK806_NLDO1_SLP_VSEL		0x48
84*4882a593Smuzhiyun #define RK806_NLDO2_SLP_VSEL		0x49
85*4882a593Smuzhiyun #define RK806_NLDO3_SLP_VSEL		0x4A
86*4882a593Smuzhiyun #define RK806_NLDO4_SLP_VSEL		0x4B
87*4882a593Smuzhiyun #define RK806_NLDO5_SLP_VSEL		0x4C
88*4882a593Smuzhiyun #define RK806_PLDO_IMAX			0x4D
89*4882a593Smuzhiyun #define RK806_PLDO1_ON_VSEL		0x4E
90*4882a593Smuzhiyun #define RK806_PLDO2_ON_VSEL		0x4F
91*4882a593Smuzhiyun #define RK806_PLDO3_ON_VSEL		0x50
92*4882a593Smuzhiyun #define RK806_PLDO4_ON_VSEL		0x51
93*4882a593Smuzhiyun #define RK806_PLDO5_ON_VSEL		0x52
94*4882a593Smuzhiyun #define RK806_PLDO6_ON_VSEL		0x53
95*4882a593Smuzhiyun #define RK806_PLDO1_SLP_VSEL		0x54
96*4882a593Smuzhiyun #define RK806_PLDO2_SLP_VSEL		0x55
97*4882a593Smuzhiyun #define RK806_PLDO3_SLP_VSEL		0x56
98*4882a593Smuzhiyun #define RK806_PLDO4_SLP_VSEL		0x57
99*4882a593Smuzhiyun #define RK806_PLDO5_SLP_VSEL		0x58
100*4882a593Smuzhiyun #define RK806_PLDO6_SLP_VSEL		0x59
101*4882a593Smuzhiyun #define RK806_CHIP_NAME			0x5A
102*4882a593Smuzhiyun #define RK806_CHIP_VER			0x5B
103*4882a593Smuzhiyun #define RK806_OTP_VER			0x5C
104*4882a593Smuzhiyun #define RK806_SYS_STS			0x5D
105*4882a593Smuzhiyun #define RK806_SYS_CFG0			0x5E
106*4882a593Smuzhiyun #define RK806_SYS_CFG1			0x5F
107*4882a593Smuzhiyun #define RK806_SYS_OPTION		0x61
108*4882a593Smuzhiyun #define RK806_SLEEP_CONFIG0		0x62
109*4882a593Smuzhiyun #define RK806_SLEEP_CONFIG1		0x63
110*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL0		0x64
111*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL1		0x65
112*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL2		0x66
113*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL3		0x67
114*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL4		0x68
115*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL5		0x69
116*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL0		0x6A
117*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL1		0x6B
118*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL2		0x6C
119*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL3		0x6D
120*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL4		0x6E
121*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL5		0x6F
122*4882a593Smuzhiyun #define RK806_DVS_START_CTRL		0x70
123*4882a593Smuzhiyun #define RK806_SLEEP_GPIO		0x71
124*4882a593Smuzhiyun #define RK806_SYS_CFG3			0x72
125*4882a593Smuzhiyun #define RK806_ON_SOURCE			0x74
126*4882a593Smuzhiyun #define RK806_OFF_SOURCE		0x75
127*4882a593Smuzhiyun #define RK806_PWRON_KEY			0x76
128*4882a593Smuzhiyun #define RK806_INT_STS0			0x77
129*4882a593Smuzhiyun #define RK806_INT_MSK0			0x78
130*4882a593Smuzhiyun #define RK806_INT_STS1			0x79
131*4882a593Smuzhiyun #define RK806_INT_MSK1			0x7A
132*4882a593Smuzhiyun #define RK806_GPIO_INT_CONFIG		0x7B
133*4882a593Smuzhiyun #define RK806_DATA_REG0			0x7C
134*4882a593Smuzhiyun #define RK806_DATA_REG1			0x7D
135*4882a593Smuzhiyun #define RK806_DATA_REG2			0x7E
136*4882a593Smuzhiyun #define RK806_DATA_REG3			0x7F
137*4882a593Smuzhiyun #define RK806_DATA_REG4			0x80
138*4882a593Smuzhiyun #define RK806_DATA_REG5			0x81
139*4882a593Smuzhiyun #define RK806_DATA_REG6			0x82
140*4882a593Smuzhiyun #define RK806_DATA_REG7			0x83
141*4882a593Smuzhiyun #define RK806_DATA_REG8			0x84
142*4882a593Smuzhiyun #define RK806_DATA_REG9			0x85
143*4882a593Smuzhiyun #define RK806_DATA_REG10		0x86
144*4882a593Smuzhiyun #define RK806_DATA_REG11		0x87
145*4882a593Smuzhiyun #define RK806_DATA_REG12		0x88
146*4882a593Smuzhiyun #define RK806_DATA_REG13		0x89
147*4882a593Smuzhiyun #define RK806_DATA_REG14		0x8A
148*4882a593Smuzhiyun #define RK806_DATA_REG15		0x8B
149*4882a593Smuzhiyun #define RK806_TM_REG			0x8C
150*4882a593Smuzhiyun #define RK806_OTP_EN_REG		0x8D
151*4882a593Smuzhiyun #define RK806_FUNC_OTP_EN_REG		0x8E
152*4882a593Smuzhiyun #define RK806_TEST_REG1			0x8F
153*4882a593Smuzhiyun #define RK806_TEST_REG2			0x90
154*4882a593Smuzhiyun #define RK806_TEST_REG3			0x91
155*4882a593Smuzhiyun #define RK806_TEST_REG4			0x92
156*4882a593Smuzhiyun #define RK806_TEST_REG5			0x93
157*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG0	0x94
158*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG1	0x95
159*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG2	0x96
160*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG3	0x97
161*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG4	0x98
162*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG5	0x99
163*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG6	0x9A
164*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG7	0x9B
165*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG8	0x9C
166*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG9	0x9D
167*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG0	0x9E
168*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG1	0x9F
169*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG2	0xA0
170*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG3	0xA1
171*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG4	0xA2
172*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG0	0xA3
173*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG1	0xA4
174*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG2	0xA5
175*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG3	0xA6
176*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG4	0xA7
177*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG5	0xA8
178*4882a593Smuzhiyun #define RK806_BUCK_EN_OTP_REG1		0xA9
179*4882a593Smuzhiyun #define RK806_NLDO_EN_OTP_REG1		0xAA
180*4882a593Smuzhiyun #define RK806_PLDO_EN_OTP_REG1		0xAB
181*4882a593Smuzhiyun #define RK806_BUCK_FB_RES_OTP_REG1	0xAC
182*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG0		0xAD
183*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG1		0xAE
184*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG2		0xAF
185*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG3		0xB0
186*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG4		0xB1
187*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG0		0xB2
188*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG1		0xB3
189*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG2		0xB4
190*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG3		0xB5
191*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG4		0xB6
192*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG5		0xB7
193*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG6		0xB8
194*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG7		0xB9
195*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG8		0xBA
196*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG9		0xBB
197*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG10		0xBC
198*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG11		0xBD
199*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG12		0xBE
200*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG13		0xBF
201*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG14		0xC0
202*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG15		0xC1
203*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG16		0xC2
204*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG17		0xC3
205*4882a593Smuzhiyun #define RK806_HK_TRIM_REG1		0xC4
206*4882a593Smuzhiyun #define RK806_HK_TRIM_REG2		0xC5
207*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG1	0xC6
208*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG2	0xC7
209*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG3	0xC8
210*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG4	0xC9
211*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG5	0xCA
212*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG1	0xCB
213*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG2	0xCC
214*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG3	0xCD
215*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG4	0xCE
216*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG5	0xCF
217*4882a593Smuzhiyun #define RK806_BUCK_TRIM_ZCDIOS_REG1	0xD0
218*4882a593Smuzhiyun #define RK806_BUCK_TRIM_ZCDIOS_REG2	0xD1
219*4882a593Smuzhiyun #define RK806_NLDO_TRIM_REG1		0xD2
220*4882a593Smuzhiyun #define RK806_NLDO_TRIM_REG2		0xD3
221*4882a593Smuzhiyun #define RK806_NLDO_TRIM_REG3		0xD4
222*4882a593Smuzhiyun #define RK806_PLDO_TRIM_REG1		0xD5
223*4882a593Smuzhiyun #define RK806_PLDO_TRIM_REG2		0xD6
224*4882a593Smuzhiyun #define RK806_PLDO_TRIM_REG3		0xD7
225*4882a593Smuzhiyun #define RK806_TRIM_ICOMP_REG1		0xD8
226*4882a593Smuzhiyun #define RK806_TRIM_ICOMP_REG2		0xD9
227*4882a593Smuzhiyun #define RK806_EFUSE_CONTROL_REGH	0xDA
228*4882a593Smuzhiyun #define RK806_FUSE_PROG_REG		0xDB
229*4882a593Smuzhiyun #define RK806_MAIN_FSM_STS_REG		0xDD
230*4882a593Smuzhiyun #define RK806_FSM_REG			0xDE
231*4882a593Smuzhiyun #define RK806_TOP_RESEV_OFFR		0xEC
232*4882a593Smuzhiyun #define RK806_TOP_RESEV_POR		0xED
233*4882a593Smuzhiyun #define RK806_BUCK_VRSN_REG1		0xEE
234*4882a593Smuzhiyun #define RK806_BUCK_VRSN_REG2		0xEF
235*4882a593Smuzhiyun #define RK806_NLDO_RLOAD_SEL_REG1	0xF0
236*4882a593Smuzhiyun #define RK806_PLDO_RLOAD_SEL_REG1	0xF1
237*4882a593Smuzhiyun #define RK806_PLDO_RLOAD_SEL_REG2	0xF2
238*4882a593Smuzhiyun #define RK806_BUCK_CMIN_MX_REG1		0xF3
239*4882a593Smuzhiyun #define RK806_BUCK_CMIN_MX_REG2		0xF4
240*4882a593Smuzhiyun #define RK806_BUCK_FREQ_SET_REG1	0xF5
241*4882a593Smuzhiyun #define RK806_BUCK_FREQ_SET_REG2	0xF6
242*4882a593Smuzhiyun #define RK806_BUCK_RS_MEABS_REG1	0xF7
243*4882a593Smuzhiyun #define RK806_BUCK_RS_MEABS_REG2	0xF8
244*4882a593Smuzhiyun #define RK806_BUCK_RS_ZDLEB_REG1	0xF9
245*4882a593Smuzhiyun #define RK806_BUCK_RS_ZDLEB_REG2	0xFA
246*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG1		0xFB
247*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG2		0xFC
248*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG3		0xFD
249*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG4		0xFE
250*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG5		0xFF
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun /* INT_STS Register field definitions */
253*4882a593Smuzhiyun #define RK806_INT_STS_PWRON_FALL	BIT(0)
254*4882a593Smuzhiyun #define RK806_INT_STS_PWRON_RISE	BIT(1)
255*4882a593Smuzhiyun #define RK806_INT_STS_PWRON		BIT(2)
256*4882a593Smuzhiyun #define RK806_INT_STS_PWRON_LP		BIT(3)
257*4882a593Smuzhiyun #define RK806_INT_STS_HOTDIE		BIT(4)
258*4882a593Smuzhiyun #define RK806_INT_STS_VDC_RISE		BIT(5)
259*4882a593Smuzhiyun #define RK806_INT_STS_VDC_FALL		BIT(6)
260*4882a593Smuzhiyun #define RK806_INT_STS_VB_LO		BIT(7)
261*4882a593Smuzhiyun #define RK806_INT_STS_REV0		BIT(0)
262*4882a593Smuzhiyun #define RK806_INT_STS_REV1		BIT(1)
263*4882a593Smuzhiyun #define RK806_INT_STS_REV2		BIT(2)
264*4882a593Smuzhiyun #define RK806_INT_STS_CRC_ERROR		BIT(3)
265*4882a593Smuzhiyun #define RK806_INT_STS_SLP3_GPIO		BIT(4)
266*4882a593Smuzhiyun #define RK806_INT_STS_SLP2_GPIO		BIT(5)
267*4882a593Smuzhiyun #define RK806_INT_STS_SLP1_GPIO		BIT(6)
268*4882a593Smuzhiyun #define RK806_INT_STS_WDT		BIT(7)
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun /* spi command */
271*4882a593Smuzhiyun #define RK806_CMD_READ			0
272*4882a593Smuzhiyun #define RK806_CMD_WRITE			BIT(7)
273*4882a593Smuzhiyun #define RK806_CMD_CRC_EN		BIT(6)
274*4882a593Smuzhiyun #define RK806_CMD_CRC_DIS		0
275*4882a593Smuzhiyun #define RK806_CMD_LEN_MSK		0x0f
276*4882a593Smuzhiyun #define RK806_REG_H			0x00
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun #define VERSION_AB		0x01
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun enum rk806_reg_id {
281*4882a593Smuzhiyun 	RK806_ID_DCDC1 = 0,
282*4882a593Smuzhiyun 	RK806_ID_DCDC2,
283*4882a593Smuzhiyun 	RK806_ID_DCDC3,
284*4882a593Smuzhiyun 	RK806_ID_DCDC4,
285*4882a593Smuzhiyun 	RK806_ID_DCDC5,
286*4882a593Smuzhiyun 	RK806_ID_DCDC6,
287*4882a593Smuzhiyun 	RK806_ID_DCDC7,
288*4882a593Smuzhiyun 	RK806_ID_DCDC8,
289*4882a593Smuzhiyun 	RK806_ID_DCDC9,
290*4882a593Smuzhiyun 	RK806_ID_DCDC10,
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun 	RK806_ID_NLDO1,
293*4882a593Smuzhiyun 	RK806_ID_NLDO2,
294*4882a593Smuzhiyun 	RK806_ID_NLDO3,
295*4882a593Smuzhiyun 	RK806_ID_NLDO4,
296*4882a593Smuzhiyun 	RK806_ID_NLDO5,
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun 	RK806_ID_PLDO1,
299*4882a593Smuzhiyun 	RK806_ID_PLDO2,
300*4882a593Smuzhiyun 	RK806_ID_PLDO3,
301*4882a593Smuzhiyun 	RK806_ID_PLDO4,
302*4882a593Smuzhiyun 	RK806_ID_PLDO5,
303*4882a593Smuzhiyun 	RK806_ID_PLDO6,
304*4882a593Smuzhiyun 	RK806_ID_END,
305*4882a593Smuzhiyun };
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun /* Define the rk806 IRQ numbers */
308*4882a593Smuzhiyun enum rk806_irqs {
309*4882a593Smuzhiyun 	/* INT_STS0 registers */
310*4882a593Smuzhiyun 	RK806_IRQ_PWRON_FALL,
311*4882a593Smuzhiyun 	RK806_IRQ_PWRON_RISE,
312*4882a593Smuzhiyun 	RK806_IRQ_PWRON,
313*4882a593Smuzhiyun 	RK806_IRQ_PWRON_LP,
314*4882a593Smuzhiyun 	RK806_IRQ_HOTDIE,
315*4882a593Smuzhiyun 	RK806_IRQ_VDC_RISE,
316*4882a593Smuzhiyun 	RK806_IRQ_VDC_FALL,
317*4882a593Smuzhiyun 	RK806_IRQ_VB_LO,
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun 	/* INT_STS0 registers */
320*4882a593Smuzhiyun 	RK806_IRQ_REV0,
321*4882a593Smuzhiyun 	RK806_IRQ_REV1,
322*4882a593Smuzhiyun 	RK806_IRQ_REV2,
323*4882a593Smuzhiyun 	RK806_IRQ_CRC_ERROR,
324*4882a593Smuzhiyun 	RK806_IRQ_SLP3_GPIO,
325*4882a593Smuzhiyun 	RK806_IRQ_SLP2_GPIO,
326*4882a593Smuzhiyun 	RK806_IRQ_SLP1_GPIO,
327*4882a593Smuzhiyun 	RK806_IRQ_WDT,
328*4882a593Smuzhiyun };
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun /* VCC1 low voltage threshold */
331*4882a593Smuzhiyun enum rk806_lv_sel {
332*4882a593Smuzhiyun 	VB_LO_SEL_2800,
333*4882a593Smuzhiyun 	VB_LO_SEL_2900,
334*4882a593Smuzhiyun 	VB_LO_SEL_3000,
335*4882a593Smuzhiyun 	VB_LO_SEL_3100,
336*4882a593Smuzhiyun 	VB_LO_SEL_3200,
337*4882a593Smuzhiyun 	VB_LO_SEL_3300,
338*4882a593Smuzhiyun 	VB_LO_SEL_3400,
339*4882a593Smuzhiyun 	VB_LO_SEL_3500,
340*4882a593Smuzhiyun };
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun /* system shut down voltage select */
343*4882a593Smuzhiyun enum rk806_uv_sel {
344*4882a593Smuzhiyun 	VB_UV_SEL_2700,
345*4882a593Smuzhiyun 	VB_UV_SEL_2800,
346*4882a593Smuzhiyun 	VB_UV_SEL_2900,
347*4882a593Smuzhiyun 	VB_UV_SEL_3000,
348*4882a593Smuzhiyun 	VB_UV_SEL_3100,
349*4882a593Smuzhiyun 	VB_UV_SEL_3200,
350*4882a593Smuzhiyun 	VB_UV_SEL_3300,
351*4882a593Smuzhiyun 	VB_UV_SEL_3400,
352*4882a593Smuzhiyun };
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun /* pin function */
355*4882a593Smuzhiyun enum rk806_pwrctrl_fun {
356*4882a593Smuzhiyun 	PWRCTRL_NULL_FUN,
357*4882a593Smuzhiyun 	PWRCTRL_SLP_FUN,
358*4882a593Smuzhiyun 	PWRCTRL_POWOFF_FUN,
359*4882a593Smuzhiyun 	PWRCTRL_RST_FUN,
360*4882a593Smuzhiyun 	PWRCTRL_DVS_FUN,
361*4882a593Smuzhiyun 	PWRCTRL_GPIO_FUN,
362*4882a593Smuzhiyun };
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun /* pin pol */
365*4882a593Smuzhiyun enum rk806_pin_level {
366*4882a593Smuzhiyun 	POL_LOW,
367*4882a593Smuzhiyun 	POL_HIGH,
368*4882a593Smuzhiyun };
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun enum rk806_vsel_ctr_sel {
371*4882a593Smuzhiyun 	CTR_BY_NO_EFFECT,
372*4882a593Smuzhiyun 	CTR_BY_PWRCTRL1,
373*4882a593Smuzhiyun 	CTR_BY_PWRCTRL2,
374*4882a593Smuzhiyun 	CTR_BY_PWRCTRL3,
375*4882a593Smuzhiyun };
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun enum rk806_dvs_ctr_sel {
378*4882a593Smuzhiyun 	CTR_SEL_NO_EFFECT,
379*4882a593Smuzhiyun 	CTR_SEL_DVS_START1,
380*4882a593Smuzhiyun 	CTR_SEL_DVS_START2,
381*4882a593Smuzhiyun 	CTR_SEL_DVS_START3,
382*4882a593Smuzhiyun };
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun enum rk806_pin_dr_sel {
385*4882a593Smuzhiyun 	RK806_PIN_INPUT,
386*4882a593Smuzhiyun 	RK806_PIN_OUTPUT,
387*4882a593Smuzhiyun };
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun enum rk806_int_pol {
390*4882a593Smuzhiyun 	RK806_INT_POL_LOW,
391*4882a593Smuzhiyun 	RK806_INT_POL_HIGH,
392*4882a593Smuzhiyun };
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun enum rk806_int_fun {
395*4882a593Smuzhiyun 	RK806_INT_ONLY,
396*4882a593Smuzhiyun 	RK806_INT_ADN_WKUP,
397*4882a593Smuzhiyun };
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun enum rk806_dvs_mode {
400*4882a593Smuzhiyun 	RK806_DVS_NOT_SUPPORT,
401*4882a593Smuzhiyun 	RK806_DVS_START1,
402*4882a593Smuzhiyun 	RK806_DVS_START2,
403*4882a593Smuzhiyun 	RK806_DVS_START3,
404*4882a593Smuzhiyun 	RK806_DVS_PWRCTRL1,
405*4882a593Smuzhiyun 	RK806_DVS_PWRCTRL2,
406*4882a593Smuzhiyun 	RK806_DVS_PWRCTRL3,
407*4882a593Smuzhiyun 	RK806_DVS_START_PWRCTR1,
408*4882a593Smuzhiyun 	RK806_DVS_START_PWRCTR2,
409*4882a593Smuzhiyun 	RK806_DVS_START_PWRCTR3,
410*4882a593Smuzhiyun 	RK806_DVS_END,
411*4882a593Smuzhiyun };
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun enum rk806_fields {
414*4882a593Smuzhiyun 	CHIP_NAME_H, CHIP_NAME_L, CHIP_VER, OTP_VER,
415*4882a593Smuzhiyun 	POWER_EN0, POWER_EN1, POWER_EN2, POWER_EN3, POWER_EN4, POWER_EN5,
416*4882a593Smuzhiyun 	BUCK4_EN_MASK, BUCK3_EN_MASK, BUCK2_EN_MASK, BUCK1_EN_MASK,
417*4882a593Smuzhiyun 	BUCK4_EN, BUCK3_EN, BUCK2_EN, BUCK1_EN,
418*4882a593Smuzhiyun 	BUCK8_EN_MASK, BUCK7_EN_MASK, BUCK6_EN_MASK, BUCK5_EN_MASK,
419*4882a593Smuzhiyun 	BUCK8_EN, BUCK7_EN, BUCK6_EN, BUCK5_EN,
420*4882a593Smuzhiyun 	BUCK10_EN_MASK, BUCK9_EN_MASK, BUCK10_EN, BUCK9_EN,
421*4882a593Smuzhiyun 	NLDO4_EN_MASK, NLDO3_EN_MASK, NLDO2_EN_MASK, NLDO1_EN_MASK,
422*4882a593Smuzhiyun 	NLDO4_EN, NLDO3_EN, NLDO2_EN, NLDO1_EN,
423*4882a593Smuzhiyun 	PLDO4_EN_MASK, PLDO3_EN_MASK, PLDO2_EN_MASK, PLDO1_EN_MASK,
424*4882a593Smuzhiyun 	PLDO4_EN, PLDO3_EN, PLDO2_EN, PLDO1_EN,
425*4882a593Smuzhiyun 	NLDO5_EN_MASK, PLDO6_EN_MASK, PLDO5_EN_MASK,
426*4882a593Smuzhiyun 	NLDO5_EN, PLDO6_EN, PLDO5_EN,
427*4882a593Smuzhiyun 	BUCK8_SLP_EN, BUCK7_SLP_EN, BUCK6_SLP_EN, BUCK5_SLP_EN, BUCK4_SLP_EN,
428*4882a593Smuzhiyun 	BUCK3_SLP_EN, BUCK2_SLP_EN, BUCK1_SLP_EN,
429*4882a593Smuzhiyun 	BUCK10_SLP_EN, BUCK9_SLP_EN, NLDO5_SLP_EN, NLDO4_SLP_EN, NLDO3_SLP_EN,
430*4882a593Smuzhiyun 	NLDO2_SLP_EN, NLDO1_SLP_EN,
431*4882a593Smuzhiyun 	PLDO6_SLP_EN, PLDO5_SLP_EN, PLDO4_SLP_EN, PLDO3_SLP_EN,
432*4882a593Smuzhiyun 	PLDO2_SLP_EN, PLDO1_SLP_EN,
433*4882a593Smuzhiyun 	BUCK1_ON_VSEL, BUCK2_ON_VSEL, BUCK3_ON_VSEL, BUCK4_ON_VSEL, BUCK5_ON_VSEL,
434*4882a593Smuzhiyun 	BUCK6_ON_VSEL, BUCK7_ON_VSEL, BUCK8_ON_VSEL, BUCK9_ON_VSEL, BUCK10_ON_VSEL,
435*4882a593Smuzhiyun 	BUCK1_SLP_VSEL, BUCK2_SLP_VSEL, BUCK3_SLP_VSEL, BUCK4_SLP_VSEL, BUCK5_SLP_VSEL,
436*4882a593Smuzhiyun 	BUCK6_SLP_VSEL, BUCK7_SLP_VSEL, BUCK8_SLP_VSEL, BUCK9_SLP_VSEL, BUCK10_SLP_VSEL,
437*4882a593Smuzhiyun 	NLDO1_ON_VSEL, NLDO2_ON_VSEL, NLDO3_ON_VSEL, NLDO4_ON_VSEL, NLDO5_ON_VSEL,
438*4882a593Smuzhiyun 	NLDO1_SLP_VSEL, NLDO2_SLP_VSEL, NLDO3_SLP_VSEL, NLDO4_SLP_VSEL, NLDO5_SLP_VSEL,
439*4882a593Smuzhiyun 	PLDO1_ON_VSEL, PLDO2_ON_VSEL, PLDO3_ON_VSEL, PLDO4_ON_VSEL, PLDO5_ON_VSEL,
440*4882a593Smuzhiyun 	PLDO6_ON_VSEL,
441*4882a593Smuzhiyun 	PLDO1_SLP_VSEL, PLDO2_SLP_VSEL, PLDO3_SLP_VSEL, PLDO4_SLP_VSEL, PLDO5_SLP_VSEL,
442*4882a593Smuzhiyun 	PLDO6_SLP_VSEL,
443*4882a593Smuzhiyun 	BUCK1_RATE, BUCK2_RATE, BUCK3_RATE, BUCK4_RATE, BUCK5_RATE, BUCK6_RATE,
444*4882a593Smuzhiyun 	BUCK7_RATE, BUCK8_RATE, BUCK9_RATE, BUCK10_RATE,
445*4882a593Smuzhiyun 	PWRON_STS, VDC_STS, VB_UV_STSS, VB_LO_STS, HOTDIE_STS, TSD_STS, VB_OV_STS,
446*4882a593Smuzhiyun 	VB_UV_DLY, VB_UV_SEL, VB_LO_ACT, VB_LO_SEL,
447*4882a593Smuzhiyun 	ABNORDET_EN, TSD_TEMP, HOTDIE_TMP, SYS_OV_SD_EN, SYS_OV_SD_DLY_SEL, DLY_ABN_SHORT,
448*4882a593Smuzhiyun 	VCCXDET_DIS, OSC_TC, ENB2_2M, ENB_32K,
449*4882a593Smuzhiyun 	PWRCTRL1_FUN, PWRCTRL2_FUN, PWRCTRL3_FUN,
450*4882a593Smuzhiyun 	PWRCTRL1_POL, PWRCTRL2_POL, PWRCTRL3_POL,
451*4882a593Smuzhiyun 	BUCK1_VSEL_CTR_SEL, BUCK2_VSEL_CTR_SEL, BUCK3_VSEL_CTR_SEL, BUCK4_VSEL_CTR_SEL,
452*4882a593Smuzhiyun 	BUCK5_VSEL_CTR_SEL, BUCK6_VSEL_CTR_SEL, BUCK7_VSEL_CTR_SEL, BUCK8_VSEL_CTR_SEL,
453*4882a593Smuzhiyun 	BUCK9_VSEL_CTR_SEL, BUCK10_VSEL_CTR_SEL,
454*4882a593Smuzhiyun 	NLDO1_VSEL_CTR_SEL, NLDO2_VSEL_CTR_SEL, NLDO3_VSEL_CTR_SEL, NLDO4_VSEL_CTR_SEL,
455*4882a593Smuzhiyun 	NLDO5_VSEL_CTR_SEL,
456*4882a593Smuzhiyun 	PLDO1_VSEL_CTR_SEL, PLDO2_VSEL_CTR_SEL, PLDO3_VSEL_CTR_SEL, PLDO4_VSEL_CTR_SEL,
457*4882a593Smuzhiyun 	PLDO5_VSEL_CTR_SEL, PLDO6_VSEL_CTR_SEL,
458*4882a593Smuzhiyun 	BUCK1_DVS_CTR_SEL, BUCK2_DVS_CTR_SEL, BUCK3_DVS_CTR_SEL, BUCK4_DVS_CTR_SEL,
459*4882a593Smuzhiyun 	BUCK5_DVS_CTR_SEL, BUCK6_DVS_CTR_SEL, BUCK7_DVS_CTR_SEL, BUCK8_DVS_CTR_SEL,
460*4882a593Smuzhiyun 	BUCK9_DVS_CTR_SEL, BUCK10_DVS_CTR_SEL,
461*4882a593Smuzhiyun 	NLDO1_DVS_CTR_SEL, NLDO2_DVS_CTR_SEL, NLDO3_DVS_CTR_SEL, NLDO4_DVS_CTR_SEL,
462*4882a593Smuzhiyun 	NLDO5_DVS_CTR_SEL,
463*4882a593Smuzhiyun 	PLDO1_DVS_CTR_SEL, PLDO2_DVS_CTR_SEL, PLDO3_DVS_CTR_SEL, PLDO4_DVS_CTR_SEL,
464*4882a593Smuzhiyun 	PLDO5_DVS_CTR_SEL, PLDO6_DVS_CTR_SEL,
465*4882a593Smuzhiyun 	DVS_START1, DVS_START2, DVS_START3,
466*4882a593Smuzhiyun 	SLP3_DATA, SLP2_DATA, SLP1_DATA, SLP3_DR, SLP2_DR, SLP1_DR,
467*4882a593Smuzhiyun 
468*4882a593Smuzhiyun 	RST_FUN, DEV_RST, DEV_SLP, SLAVE_RESTART_FUN, DEV_OFF,
469*4882a593Smuzhiyun 	WDT_CLR, WDT_EN, WDT_SET, ON_SOURCE, OFF_SOURCE,
470*4882a593Smuzhiyun 	ON_PWRON, ON_VDC, RESTART_RESETB, RESTART_PWRON_LP, RESTART_SLP,
471*4882a593Smuzhiyun 	RESTART_DEV_RST, RESTART_WDT,
472*4882a593Smuzhiyun 	OFF_SLP, VB_SYS_OV, OFF_TSD, OFF_DEV_OFF, OFF_PWRON_LP, OFF_VB_LO,
473*4882a593Smuzhiyun 	PWRON_ON_TIME, PWRON_LP_ACT, PWRON_LP_OFF_TIME, PWRON_LP_TM_SEL, PWRON_DB_SEL,
474*4882a593Smuzhiyun 	VB_LO_INT, VDC_FALL_INT, VDC_RISE_INT, HOTDIE_INT, PWRON_LP_INT, PWRON_INT,
475*4882a593Smuzhiyun 	PWRON_RISE_INT, PWRON_FALL_INT,
476*4882a593Smuzhiyun 	VB_LO_IM, VDC_FALL_INT_IM, VDC_RISE_IM, HOTDIE_IM, PWRON_LP_IM,
477*4882a593Smuzhiyun 	PWRON_IM, PWRON_RISE_INT_IM, PWRON_FALL_INT_IM,
478*4882a593Smuzhiyun 	WDT_INT, SLP1_GPIO_INT, SLP2_GPIO_INT, SLP3_GPIO_INT,
479*4882a593Smuzhiyun 	WDT_INT_IM, SLP1_GPIO_IM, SLP2_GPIO_IM, SLP3_GPIO_IM,
480*4882a593Smuzhiyun 	INT_FUNCTION, INT_POL, INT_FC_EN,
481*4882a593Smuzhiyun 	LDO_RATE, BUCK1_RATE2, BUCK2_RATE2, BUCK3_RATE2, BUCK4_RATE2,
482*4882a593Smuzhiyun 	BUCK5_RATE2, BUCK6_RATE2, BUCK7_RATE2, BUCK8_RATE2, BUCK9_RATE2,
483*4882a593Smuzhiyun 	BUCK10_RATE2,
484*4882a593Smuzhiyun 	F_MAX_FIELDS
485*4882a593Smuzhiyun };
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun struct rk806_platform_data {
488*4882a593Smuzhiyun 	int low_voltage_threshold;
489*4882a593Smuzhiyun 	int shutdown_voltage_threshold;
490*4882a593Smuzhiyun 	int force_shutdown_enable;
491*4882a593Smuzhiyun 	int shutdown_temperture_threshold;
492*4882a593Smuzhiyun 	int hotdie_temperture_threshold;
493*4882a593Smuzhiyun };
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun struct rk806_pin_info {
496*4882a593Smuzhiyun 	struct pinctrl *p;
497*4882a593Smuzhiyun 	struct pinctrl_state *default_st;
498*4882a593Smuzhiyun 	struct pinctrl_state *power_off;
499*4882a593Smuzhiyun 	struct pinctrl_state *reset;
500*4882a593Smuzhiyun 	struct pinctrl_state *sleep;
501*4882a593Smuzhiyun 	struct pinctrl_state *dvs;
502*4882a593Smuzhiyun };
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun /*
505*4882a593Smuzhiyun  * struct rk806 - state holder for the rk806 driver
506*4882a593Smuzhiyun  *
507*4882a593Smuzhiyun  * Device data may be used to access the rk806 chip
508*4882a593Smuzhiyun  */
509*4882a593Smuzhiyun struct rk806 {
510*4882a593Smuzhiyun 	struct device *dev;
511*4882a593Smuzhiyun 	struct regmap *regmap;
512*4882a593Smuzhiyun 	struct regmap_field *rmap_fields[F_MAX_FIELDS];
513*4882a593Smuzhiyun 	/* IRQ Data */
514*4882a593Smuzhiyun 	int irq;
515*4882a593Smuzhiyun 	struct regmap_irq_chip_data *irq_data;
516*4882a593Smuzhiyun 	struct rk806_platform_data *pdata;
517*4882a593Smuzhiyun 	struct rk806_pin_info *pins;
518*4882a593Smuzhiyun 	int vb_lo_irq;
519*4882a593Smuzhiyun };
520*4882a593Smuzhiyun 
521*4882a593Smuzhiyun extern const struct regmap_config rk806_regmap_config_spi;
522*4882a593Smuzhiyun int rk806_device_init(struct rk806 *rk806);
523*4882a593Smuzhiyun int rk806_device_exit(struct rk806 *rk806);
524*4882a593Smuzhiyun int rk806_field_write(struct rk806 *rk806,
525*4882a593Smuzhiyun 		      enum rk806_fields field_id,
526*4882a593Smuzhiyun 		      unsigned int val);
527*4882a593Smuzhiyun int rk806_field_read(struct rk806 *rk806,
528*4882a593Smuzhiyun 		     enum rk806_fields field_id);
529*4882a593Smuzhiyun #endif /* __LINUX_REGULATOR_RK806_H */
530