xref: /OK3568_Linux_fs/kernel/include/linux/regulator/pca9450.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /* Copyright 2020 NXP. */
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef __LINUX_REG_PCA9450_H__
5*4882a593Smuzhiyun #define __LINUX_REG_PCA9450_H__
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <linux/regmap.h>
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun enum pca9450_chip_type {
10*4882a593Smuzhiyun 	PCA9450_TYPE_PCA9450A = 0,
11*4882a593Smuzhiyun 	PCA9450_TYPE_PCA9450BC,
12*4882a593Smuzhiyun 	PCA9450_TYPE_AMOUNT,
13*4882a593Smuzhiyun };
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun enum {
16*4882a593Smuzhiyun 	PCA9450_BUCK1 = 0,
17*4882a593Smuzhiyun 	PCA9450_BUCK2,
18*4882a593Smuzhiyun 	PCA9450_BUCK3,
19*4882a593Smuzhiyun 	PCA9450_BUCK4,
20*4882a593Smuzhiyun 	PCA9450_BUCK5,
21*4882a593Smuzhiyun 	PCA9450_BUCK6,
22*4882a593Smuzhiyun 	PCA9450_LDO1,
23*4882a593Smuzhiyun 	PCA9450_LDO2,
24*4882a593Smuzhiyun 	PCA9450_LDO3,
25*4882a593Smuzhiyun 	PCA9450_LDO4,
26*4882a593Smuzhiyun 	PCA9450_LDO5,
27*4882a593Smuzhiyun 	PCA9450_REGULATOR_CNT,
28*4882a593Smuzhiyun };
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun enum {
31*4882a593Smuzhiyun 	PCA9450_DVS_LEVEL_RUN = 0,
32*4882a593Smuzhiyun 	PCA9450_DVS_LEVEL_STANDBY,
33*4882a593Smuzhiyun 	PCA9450_DVS_LEVEL_MAX,
34*4882a593Smuzhiyun };
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #define PCA9450_BUCK1_VOLTAGE_NUM	0x80
37*4882a593Smuzhiyun #define PCA9450_BUCK2_VOLTAGE_NUM	0x80
38*4882a593Smuzhiyun #define PCA9450_BUCK3_VOLTAGE_NUM	0x80
39*4882a593Smuzhiyun #define PCA9450_BUCK4_VOLTAGE_NUM	0x80
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #define PCA9450_BUCK5_VOLTAGE_NUM	0x80
42*4882a593Smuzhiyun #define PCA9450_BUCK6_VOLTAGE_NUM	0x80
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #define PCA9450_LDO1_VOLTAGE_NUM	0x08
45*4882a593Smuzhiyun #define PCA9450_LDO2_VOLTAGE_NUM	0x08
46*4882a593Smuzhiyun #define PCA9450_LDO3_VOLTAGE_NUM	0x20
47*4882a593Smuzhiyun #define PCA9450_LDO4_VOLTAGE_NUM	0x20
48*4882a593Smuzhiyun #define PCA9450_LDO5_VOLTAGE_NUM	0x10
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun enum {
51*4882a593Smuzhiyun 	PCA9450_REG_DEV_ID	    = 0x00,
52*4882a593Smuzhiyun 	PCA9450_REG_INT1	    = 0x01,
53*4882a593Smuzhiyun 	PCA9450_REG_INT1_MSK	    = 0x02,
54*4882a593Smuzhiyun 	PCA9450_REG_STATUS1	    = 0x03,
55*4882a593Smuzhiyun 	PCA9450_REG_STATUS2	    = 0x04,
56*4882a593Smuzhiyun 	PCA9450_REG_PWRON_STAT	    = 0x05,
57*4882a593Smuzhiyun 	PCA9450_REG_SWRST	    = 0x06,
58*4882a593Smuzhiyun 	PCA9450_REG_PWRCTRL         = 0x07,
59*4882a593Smuzhiyun 	PCA9450_REG_RESET_CTRL      = 0x08,
60*4882a593Smuzhiyun 	PCA9450_REG_CONFIG1         = 0x09,
61*4882a593Smuzhiyun 	PCA9450_REG_CONFIG2         = 0x0A,
62*4882a593Smuzhiyun 	PCA9450_REG_BUCK123_DVS     = 0x0C,
63*4882a593Smuzhiyun 	PCA9450_REG_BUCK1OUT_LIMIT  = 0x0D,
64*4882a593Smuzhiyun 	PCA9450_REG_BUCK2OUT_LIMIT  = 0x0E,
65*4882a593Smuzhiyun 	PCA9450_REG_BUCK3OUT_LIMIT  = 0x0F,
66*4882a593Smuzhiyun 	PCA9450_REG_BUCK1CTRL       = 0x10,
67*4882a593Smuzhiyun 	PCA9450_REG_BUCK1OUT_DVS0   = 0x11,
68*4882a593Smuzhiyun 	PCA9450_REG_BUCK1OUT_DVS1   = 0x12,
69*4882a593Smuzhiyun 	PCA9450_REG_BUCK2CTRL       = 0x13,
70*4882a593Smuzhiyun 	PCA9450_REG_BUCK2OUT_DVS0   = 0x14,
71*4882a593Smuzhiyun 	PCA9450_REG_BUCK2OUT_DVS1   = 0x15,
72*4882a593Smuzhiyun 	PCA9450_REG_BUCK3CTRL       = 0x16,
73*4882a593Smuzhiyun 	PCA9450_REG_BUCK3OUT_DVS0   = 0x17,
74*4882a593Smuzhiyun 	PCA9450_REG_BUCK3OUT_DVS1   = 0x18,
75*4882a593Smuzhiyun 	PCA9450_REG_BUCK4CTRL       = 0x19,
76*4882a593Smuzhiyun 	PCA9450_REG_BUCK4OUT        = 0x1A,
77*4882a593Smuzhiyun 	PCA9450_REG_BUCK5CTRL       = 0x1B,
78*4882a593Smuzhiyun 	PCA9450_REG_BUCK5OUT        = 0x1C,
79*4882a593Smuzhiyun 	PCA9450_REG_BUCK6CTRL       = 0x1D,
80*4882a593Smuzhiyun 	PCA9450_REG_BUCK6OUT        = 0x1E,
81*4882a593Smuzhiyun 	PCA9450_REG_LDO_AD_CTRL     = 0x20,
82*4882a593Smuzhiyun 	PCA9450_REG_LDO1CTRL        = 0x21,
83*4882a593Smuzhiyun 	PCA9450_REG_LDO2CTRL        = 0x22,
84*4882a593Smuzhiyun 	PCA9450_REG_LDO3CTRL        = 0x23,
85*4882a593Smuzhiyun 	PCA9450_REG_LDO4CTRL        = 0x24,
86*4882a593Smuzhiyun 	PCA9450_REG_LDO5CTRL_L      = 0x25,
87*4882a593Smuzhiyun 	PCA9450_REG_LDO5CTRL_H      = 0x26,
88*4882a593Smuzhiyun 	PCA9450_REG_LOADSW_CTRL     = 0x2A,
89*4882a593Smuzhiyun 	PCA9450_REG_VRFLT1_STS      = 0x2B,
90*4882a593Smuzhiyun 	PCA9450_REG_VRFLT2_STS      = 0x2C,
91*4882a593Smuzhiyun 	PCA9450_REG_VRFLT1_MASK     = 0x2D,
92*4882a593Smuzhiyun 	PCA9450_REG_VRFLT2_MASK     = 0x2E,
93*4882a593Smuzhiyun 	PCA9450_MAX_REGISTER	    = 0x2F,
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun /* PCA9450 BUCK ENMODE bits */
97*4882a593Smuzhiyun #define BUCK_ENMODE_OFF			0x00
98*4882a593Smuzhiyun #define BUCK_ENMODE_ONREQ		0x01
99*4882a593Smuzhiyun #define BUCK_ENMODE_ONREQ_STBYREQ	0x02
100*4882a593Smuzhiyun #define BUCK_ENMODE_ON			0x03
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /* PCA9450_REG_BUCK1_CTRL bits */
103*4882a593Smuzhiyun #define BUCK1_RAMP_MASK			0xC0
104*4882a593Smuzhiyun #define BUCK1_RAMP_25MV			0x0
105*4882a593Smuzhiyun #define BUCK1_RAMP_12P5MV		0x1
106*4882a593Smuzhiyun #define BUCK1_RAMP_6P25MV		0x2
107*4882a593Smuzhiyun #define BUCK1_RAMP_3P125MV		0x3
108*4882a593Smuzhiyun #define BUCK1_DVS_CTRL			0x10
109*4882a593Smuzhiyun #define BUCK1_AD			0x08
110*4882a593Smuzhiyun #define BUCK1_FPWM			0x04
111*4882a593Smuzhiyun #define BUCK1_ENMODE_MASK		0x03
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun /* PCA9450_REG_BUCK2_CTRL bits */
114*4882a593Smuzhiyun #define BUCK2_RAMP_MASK			0xC0
115*4882a593Smuzhiyun #define BUCK2_RAMP_25MV			0x0
116*4882a593Smuzhiyun #define BUCK2_RAMP_12P5MV		0x1
117*4882a593Smuzhiyun #define BUCK2_RAMP_6P25MV		0x2
118*4882a593Smuzhiyun #define BUCK2_RAMP_3P125MV		0x3
119*4882a593Smuzhiyun #define BUCK2_DVS_CTRL			0x10
120*4882a593Smuzhiyun #define BUCK2_AD			0x08
121*4882a593Smuzhiyun #define BUCK2_FPWM			0x04
122*4882a593Smuzhiyun #define BUCK2_ENMODE_MASK		0x03
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun /* PCA9450_REG_BUCK3_CTRL bits */
125*4882a593Smuzhiyun #define BUCK3_RAMP_MASK			0xC0
126*4882a593Smuzhiyun #define BUCK3_RAMP_25MV			0x0
127*4882a593Smuzhiyun #define BUCK3_RAMP_12P5MV		0x1
128*4882a593Smuzhiyun #define BUCK3_RAMP_6P25MV		0x2
129*4882a593Smuzhiyun #define BUCK3_RAMP_3P125MV		0x3
130*4882a593Smuzhiyun #define BUCK3_DVS_CTRL			0x10
131*4882a593Smuzhiyun #define BUCK3_AD			0x08
132*4882a593Smuzhiyun #define BUCK3_FPWM			0x04
133*4882a593Smuzhiyun #define BUCK3_ENMODE_MASK		0x03
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun /* PCA9450_REG_BUCK4_CTRL bits */
136*4882a593Smuzhiyun #define BUCK4_AD			0x08
137*4882a593Smuzhiyun #define BUCK4_FPWM			0x04
138*4882a593Smuzhiyun #define BUCK4_ENMODE_MASK		0x03
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun /* PCA9450_REG_BUCK5_CTRL bits */
141*4882a593Smuzhiyun #define BUCK5_AD			0x08
142*4882a593Smuzhiyun #define BUCK5_FPWM			0x04
143*4882a593Smuzhiyun #define BUCK5_ENMODE_MASK		0x03
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /* PCA9450_REG_BUCK6_CTRL bits */
146*4882a593Smuzhiyun #define BUCK6_AD			0x08
147*4882a593Smuzhiyun #define BUCK6_FPWM			0x04
148*4882a593Smuzhiyun #define BUCK6_ENMODE_MASK		0x03
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun /* PCA9450_REG_BUCK123_PRESET_EN bit */
151*4882a593Smuzhiyun #define BUCK123_PRESET_EN		0x80
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun /* PCA9450_BUCK1OUT_DVS0 bits */
154*4882a593Smuzhiyun #define BUCK1OUT_DVS0_MASK		0x7F
155*4882a593Smuzhiyun #define BUCK1OUT_DVS0_DEFAULT		0x14
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun /* PCA9450_BUCK1OUT_DVS1 bits */
158*4882a593Smuzhiyun #define BUCK1OUT_DVS1_MASK		0x7F
159*4882a593Smuzhiyun #define BUCK1OUT_DVS1_DEFAULT		0x14
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun /* PCA9450_BUCK2OUT_DVS0 bits */
162*4882a593Smuzhiyun #define BUCK2OUT_DVS0_MASK		0x7F
163*4882a593Smuzhiyun #define BUCK2OUT_DVS0_DEFAULT		0x14
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /* PCA9450_BUCK2OUT_DVS1 bits */
166*4882a593Smuzhiyun #define BUCK2OUT_DVS1_MASK		0x7F
167*4882a593Smuzhiyun #define BUCK2OUT_DVS1_DEFAULT		0x14
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun /* PCA9450_BUCK3OUT_DVS0 bits */
170*4882a593Smuzhiyun #define BUCK3OUT_DVS0_MASK		0x7F
171*4882a593Smuzhiyun #define BUCK3OUT_DVS0_DEFAULT		0x14
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun /* PCA9450_BUCK3OUT_DVS1 bits */
174*4882a593Smuzhiyun #define BUCK3OUT_DVS1_MASK		0x7F
175*4882a593Smuzhiyun #define BUCK3OUT_DVS1_DEFAULT		0x14
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun /* PCA9450_REG_BUCK4OUT bits */
178*4882a593Smuzhiyun #define BUCK4OUT_MASK			0x7F
179*4882a593Smuzhiyun #define BUCK4OUT_DEFAULT		0x6C
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun /* PCA9450_REG_BUCK5OUT bits */
182*4882a593Smuzhiyun #define BUCK5OUT_MASK			0x7F
183*4882a593Smuzhiyun #define BUCK5OUT_DEFAULT		0x30
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun /* PCA9450_REG_BUCK6OUT bits */
186*4882a593Smuzhiyun #define BUCK6OUT_MASK			0x7F
187*4882a593Smuzhiyun #define BUCK6OUT_DEFAULT		0x14
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun /* PCA9450_REG_LDO1_VOLT bits */
190*4882a593Smuzhiyun #define LDO1_EN_MASK			0xC0
191*4882a593Smuzhiyun #define LDO1OUT_MASK			0x07
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /* PCA9450_REG_LDO2_VOLT bits */
194*4882a593Smuzhiyun #define LDO2_EN_MASK			0xC0
195*4882a593Smuzhiyun #define LDO2OUT_MASK			0x07
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /* PCA9450_REG_LDO3_VOLT bits */
198*4882a593Smuzhiyun #define LDO3_EN_MASK			0xC0
199*4882a593Smuzhiyun #define LDO3OUT_MASK			0x0F
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun /* PCA9450_REG_LDO4_VOLT bits */
202*4882a593Smuzhiyun #define LDO4_EN_MASK			0xC0
203*4882a593Smuzhiyun #define LDO4OUT_MASK			0x0F
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun /* PCA9450_REG_LDO5_VOLT bits */
206*4882a593Smuzhiyun #define LDO5L_EN_MASK			0xC0
207*4882a593Smuzhiyun #define LDO5LOUT_MASK			0x0F
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun #define LDO5H_EN_MASK			0xC0
210*4882a593Smuzhiyun #define LDO5HOUT_MASK			0x0F
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun /* PCA9450_REG_IRQ bits */
213*4882a593Smuzhiyun #define IRQ_PWRON			0x80
214*4882a593Smuzhiyun #define IRQ_WDOGB			0x40
215*4882a593Smuzhiyun #define IRQ_RSVD			0x20
216*4882a593Smuzhiyun #define IRQ_VR_FLT1			0x10
217*4882a593Smuzhiyun #define IRQ_VR_FLT2			0x08
218*4882a593Smuzhiyun #define IRQ_LOWVSYS			0x04
219*4882a593Smuzhiyun #define IRQ_THERM_105			0x02
220*4882a593Smuzhiyun #define IRQ_THERM_125			0x01
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun /* PCA9450_REG_RESET_CTRL bits */
223*4882a593Smuzhiyun #define WDOG_B_CFG_MASK			0xC0
224*4882a593Smuzhiyun #define WDOG_B_CFG_NONE			0x00
225*4882a593Smuzhiyun #define WDOG_B_CFG_WARM			0x40
226*4882a593Smuzhiyun #define WDOG_B_CFG_COLD_LDO12		0x80
227*4882a593Smuzhiyun #define WDOG_B_CFG_COLD			0xC0
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun #endif /* __LINUX_REG_PCA9450_H__ */
230