xref: /OK3568_Linux_fs/kernel/include/linux/mfd/rk808.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Register definitions for Rockchip's RK808/RK818 PMIC
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Author: Chris Zhong <zyw@rock-chips.com>
8*4882a593Smuzhiyun  * Author: Zhang Qing <zhangqing@rock-chips.com>
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Copyright (C) 2016 PHYTEC Messtechnik GmbH
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * Author: Wadim Egorov <w.egorov@phytec.de>
13*4882a593Smuzhiyun  */
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #ifndef __LINUX_REGULATOR_RK808_H
16*4882a593Smuzhiyun #define __LINUX_REGULATOR_RK808_H
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #include <linux/regulator/machine.h>
19*4882a593Smuzhiyun #include <linux/regmap.h>
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /*
22*4882a593Smuzhiyun  * rk808 Global Register Map.
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define RK808_DCDC1	0 /* (0+RK808_START) */
26*4882a593Smuzhiyun #define RK808_LDO1	4 /* (4+RK808_START) */
27*4882a593Smuzhiyun #define RK808_NUM_REGULATORS	14
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun enum rk808_reg {
30*4882a593Smuzhiyun 	RK808_ID_DCDC1,
31*4882a593Smuzhiyun 	RK808_ID_DCDC2,
32*4882a593Smuzhiyun 	RK808_ID_DCDC3,
33*4882a593Smuzhiyun 	RK808_ID_DCDC4,
34*4882a593Smuzhiyun 	RK808_ID_LDO1,
35*4882a593Smuzhiyun 	RK808_ID_LDO2,
36*4882a593Smuzhiyun 	RK808_ID_LDO3,
37*4882a593Smuzhiyun 	RK808_ID_LDO4,
38*4882a593Smuzhiyun 	RK808_ID_LDO5,
39*4882a593Smuzhiyun 	RK808_ID_LDO6,
40*4882a593Smuzhiyun 	RK808_ID_LDO7,
41*4882a593Smuzhiyun 	RK808_ID_LDO8,
42*4882a593Smuzhiyun 	RK808_ID_SWITCH1,
43*4882a593Smuzhiyun 	RK808_ID_SWITCH2,
44*4882a593Smuzhiyun };
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define RK808_SECONDS_REG	0x00
47*4882a593Smuzhiyun #define RK808_MINUTES_REG	0x01
48*4882a593Smuzhiyun #define RK808_HOURS_REG		0x02
49*4882a593Smuzhiyun #define RK808_DAYS_REG		0x03
50*4882a593Smuzhiyun #define RK808_MONTHS_REG	0x04
51*4882a593Smuzhiyun #define RK808_YEARS_REG		0x05
52*4882a593Smuzhiyun #define RK808_WEEKS_REG		0x06
53*4882a593Smuzhiyun #define RK808_ALARM_SECONDS_REG	0x08
54*4882a593Smuzhiyun #define RK808_ALARM_MINUTES_REG	0x09
55*4882a593Smuzhiyun #define RK808_ALARM_HOURS_REG	0x0a
56*4882a593Smuzhiyun #define RK808_ALARM_DAYS_REG	0x0b
57*4882a593Smuzhiyun #define RK808_ALARM_MONTHS_REG	0x0c
58*4882a593Smuzhiyun #define RK808_ALARM_YEARS_REG	0x0d
59*4882a593Smuzhiyun #define RK808_RTC_CTRL_REG	0x10
60*4882a593Smuzhiyun #define RK808_RTC_STATUS_REG	0x11
61*4882a593Smuzhiyun #define RK808_RTC_INT_REG	0x12
62*4882a593Smuzhiyun #define RK808_RTC_COMP_LSB_REG	0x13
63*4882a593Smuzhiyun #define RK808_RTC_COMP_MSB_REG	0x14
64*4882a593Smuzhiyun #define RK808_ID_MSB		0x17
65*4882a593Smuzhiyun #define RK808_ID_LSB		0x18
66*4882a593Smuzhiyun #define RK808_CLK32OUT_REG	0x20
67*4882a593Smuzhiyun #define RK808_VB_MON_REG	0x21
68*4882a593Smuzhiyun #define RK808_THERMAL_REG	0x22
69*4882a593Smuzhiyun #define RK808_DCDC_EN_REG	0x23
70*4882a593Smuzhiyun #define RK808_LDO_EN_REG	0x24
71*4882a593Smuzhiyun #define RK808_SLEEP_SET_OFF_REG1	0x25
72*4882a593Smuzhiyun #define RK808_SLEEP_SET_OFF_REG2	0x26
73*4882a593Smuzhiyun #define RK808_DCDC_UV_STS_REG	0x27
74*4882a593Smuzhiyun #define RK808_DCDC_UV_ACT_REG	0x28
75*4882a593Smuzhiyun #define RK808_LDO_UV_STS_REG	0x29
76*4882a593Smuzhiyun #define RK808_LDO_UV_ACT_REG	0x2a
77*4882a593Smuzhiyun #define RK808_DCDC_PG_REG	0x2b
78*4882a593Smuzhiyun #define RK808_LDO_PG_REG	0x2c
79*4882a593Smuzhiyun #define RK808_VOUT_MON_TDB_REG	0x2d
80*4882a593Smuzhiyun #define RK808_BUCK1_CONFIG_REG		0x2e
81*4882a593Smuzhiyun #define RK808_BUCK1_ON_VSEL_REG		0x2f
82*4882a593Smuzhiyun #define RK808_BUCK1_SLP_VSEL_REG	0x30
83*4882a593Smuzhiyun #define RK808_BUCK1_DVS_VSEL_REG	0x31
84*4882a593Smuzhiyun #define RK808_BUCK2_CONFIG_REG		0x32
85*4882a593Smuzhiyun #define RK808_BUCK2_ON_VSEL_REG		0x33
86*4882a593Smuzhiyun #define RK808_BUCK2_SLP_VSEL_REG	0x34
87*4882a593Smuzhiyun #define RK808_BUCK2_DVS_VSEL_REG	0x35
88*4882a593Smuzhiyun #define RK808_BUCK3_CONFIG_REG		0x36
89*4882a593Smuzhiyun #define RK808_BUCK4_CONFIG_REG		0x37
90*4882a593Smuzhiyun #define RK808_BUCK4_ON_VSEL_REG		0x38
91*4882a593Smuzhiyun #define RK808_BUCK4_SLP_VSEL_REG	0x39
92*4882a593Smuzhiyun #define RK808_BOOST_CONFIG_REG		0x3a
93*4882a593Smuzhiyun #define RK808_LDO1_ON_VSEL_REG		0x3b
94*4882a593Smuzhiyun #define RK808_LDO1_SLP_VSEL_REG		0x3c
95*4882a593Smuzhiyun #define RK808_LDO2_ON_VSEL_REG		0x3d
96*4882a593Smuzhiyun #define RK808_LDO2_SLP_VSEL_REG		0x3e
97*4882a593Smuzhiyun #define RK808_LDO3_ON_VSEL_REG		0x3f
98*4882a593Smuzhiyun #define RK808_LDO3_SLP_VSEL_REG		0x40
99*4882a593Smuzhiyun #define RK808_LDO4_ON_VSEL_REG		0x41
100*4882a593Smuzhiyun #define RK808_LDO4_SLP_VSEL_REG		0x42
101*4882a593Smuzhiyun #define RK808_LDO5_ON_VSEL_REG		0x43
102*4882a593Smuzhiyun #define RK808_LDO5_SLP_VSEL_REG		0x44
103*4882a593Smuzhiyun #define RK808_LDO6_ON_VSEL_REG		0x45
104*4882a593Smuzhiyun #define RK808_LDO6_SLP_VSEL_REG		0x46
105*4882a593Smuzhiyun #define RK808_LDO7_ON_VSEL_REG		0x47
106*4882a593Smuzhiyun #define RK808_LDO7_SLP_VSEL_REG		0x48
107*4882a593Smuzhiyun #define RK808_LDO8_ON_VSEL_REG		0x49
108*4882a593Smuzhiyun #define RK808_LDO8_SLP_VSEL_REG		0x4a
109*4882a593Smuzhiyun #define RK808_DEVCTRL_REG	0x4b
110*4882a593Smuzhiyun #define RK808_INT_STS_REG1	0x4c
111*4882a593Smuzhiyun #define RK808_INT_STS_MSK_REG1	0x4d
112*4882a593Smuzhiyun #define RK808_INT_STS_REG2	0x4e
113*4882a593Smuzhiyun #define RK808_INT_STS_MSK_REG2	0x4f
114*4882a593Smuzhiyun #define RK808_IO_POL_REG	0x50
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun /* RK816 */
117*4882a593Smuzhiyun enum rk816_reg {
118*4882a593Smuzhiyun 	RK816_ID_DCDC1,
119*4882a593Smuzhiyun 	RK816_ID_DCDC2,
120*4882a593Smuzhiyun 	RK816_ID_DCDC3,
121*4882a593Smuzhiyun 	RK816_ID_DCDC4,
122*4882a593Smuzhiyun 	RK816_ID_LDO1,
123*4882a593Smuzhiyun 	RK816_ID_LDO2,
124*4882a593Smuzhiyun 	RK816_ID_LDO3,
125*4882a593Smuzhiyun 	RK816_ID_LDO4,
126*4882a593Smuzhiyun 	RK816_ID_LDO5,
127*4882a593Smuzhiyun 	RK816_ID_LDO6,
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun /*VERSION REGISTER*/
131*4882a593Smuzhiyun #define RK816_CHIP_NAME_REG			0x17
132*4882a593Smuzhiyun #define RK816_CHIP_VER_REG			0x18
133*4882a593Smuzhiyun #define RK816_OTP_VER_REG			0x19
134*4882a593Smuzhiyun #define RK816_NUM_REGULATORS			10
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /*POWER ON/OFF REGISTER*/
137*4882a593Smuzhiyun #define RK816_VB_MON_REG			0x21
138*4882a593Smuzhiyun #define RK816_THERMAL_REG			0x22
139*4882a593Smuzhiyun #define RK816_PWRON_LP_INT_TIME_REG		0x47
140*4882a593Smuzhiyun #define RK816_PWRON_DB_REG			0x48
141*4882a593Smuzhiyun #define RK816_DEV_CTRL_REG			0x4B
142*4882a593Smuzhiyun #define RK816_ON_SOURCE_REG			0xAE
143*4882a593Smuzhiyun #define RK816_OFF_SOURCE_REG			0xAF
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /*POWER CHANNELS ENABLE REGISTER*/
146*4882a593Smuzhiyun #define RK816_DCDC_EN_REG1			0x23
147*4882a593Smuzhiyun #define RK816_DCDC_EN_REG2			0x24
148*4882a593Smuzhiyun #define RK816_SLP_DCDC_EN_REG			0x25
149*4882a593Smuzhiyun #define RK816_SLP_LDO_EN_REG			0x26
150*4882a593Smuzhiyun #define RK816_LDO_EN_REG1			0x27
151*4882a593Smuzhiyun #define RK816_LDO_EN_REG2			0x28
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun /*BUCK AND LDO CONFIG REGISTER*/
154*4882a593Smuzhiyun #define RK816_BUCK1_CONFIG_REG			0x2E
155*4882a593Smuzhiyun #define RK816_BUCK1_ON_VSEL_REG			0x2F
156*4882a593Smuzhiyun #define RK816_BUCK1_SLP_VSEL_REG		0x30
157*4882a593Smuzhiyun #define RK816_BUCK2_CONFIG_REG			0x32
158*4882a593Smuzhiyun #define RK816_BUCK2_ON_VSEL_REG			0x33
159*4882a593Smuzhiyun #define RK816_BUCK2_SLP_VSEL_REG		0x34
160*4882a593Smuzhiyun #define RK816_BUCK3_CONFIG_REG			0x36
161*4882a593Smuzhiyun #define RK816_BUCK4_CONFIG_REG			0x37
162*4882a593Smuzhiyun #define RK816_BUCK4_ON_VSEL_REG			0x38
163*4882a593Smuzhiyun #define RK816_BUCK4_SLP_VSEL_REG		0x39
164*4882a593Smuzhiyun #define RK816_LDO1_ON_VSEL_REG			0x3B
165*4882a593Smuzhiyun #define RK816_LDO1_SLP_VSEL_REG			0x3C
166*4882a593Smuzhiyun #define RK816_LDO2_ON_VSEL_REG			0x3D
167*4882a593Smuzhiyun #define RK816_LDO2_SLP_VSEL_REG			0x3E
168*4882a593Smuzhiyun #define RK816_LDO3_ON_VSEL_REG			0x3F
169*4882a593Smuzhiyun #define RK816_LDO3_SLP_VSEL_REG			0x40
170*4882a593Smuzhiyun #define RK816_LDO4_ON_VSEL_REG			0x41
171*4882a593Smuzhiyun #define RK816_LDO4_SLP_VSEL_REG			0x42
172*4882a593Smuzhiyun #define RK816_LDO5_ON_VSEL_REG			0x43
173*4882a593Smuzhiyun #define RK816_LDO5_SLP_VSEL_REG			0x44
174*4882a593Smuzhiyun #define RK816_LDO6_ON_VSEL_REG			0x45
175*4882a593Smuzhiyun #define RK816_LDO6_SLP_VSEL_REG			0x46
176*4882a593Smuzhiyun #define RK816_GPIO_IO_POL_REG			0x50
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun /*CHARGER BOOST AND OTG REGISTER*/
179*4882a593Smuzhiyun #define RK816_OTG_BUCK_LDO_CONFIG_REG           0x2A
180*4882a593Smuzhiyun #define RK816_CHRG_CONFIG_REG                   0x2B
181*4882a593Smuzhiyun #define RK816_BOOST_ON_VESL_REG                 0x54
182*4882a593Smuzhiyun #define RK816_BOOST_SLP_VSEL_REG                0x55
183*4882a593Smuzhiyun #define RK816_CHRG_BOOST_CONFIG_REG             0x9A
184*4882a593Smuzhiyun #define RK816_SUP_STS_REG                       0xA0
185*4882a593Smuzhiyun #define RK816_USB_CTRL_REG                      0xA1
186*4882a593Smuzhiyun #define RK816_CHRG_CTRL_REG1                    0xA3
187*4882a593Smuzhiyun #define RK816_CHRG_CTRL_REG2                    0xA4
188*4882a593Smuzhiyun #define RK816_CHRG_CTRL_REG3                    0xA5
189*4882a593Smuzhiyun #define RK816_BAT_CTRL_REG                      0xA6
190*4882a593Smuzhiyun #define RK816_BAT_HTS_TS_REG                    0xA8
191*4882a593Smuzhiyun #define RK816_BAT_LTS_TS_REG                    0xA9
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun #define RK816_TS_CTRL_REG			0xAC
194*4882a593Smuzhiyun #define RK816_ADC_CTRL_REG			0xAD
195*4882a593Smuzhiyun #define RK816_GGCON_REG				0xB0
196*4882a593Smuzhiyun #define RK816_GGSTS_REG				0xB1
197*4882a593Smuzhiyun #define RK816_ZERO_CUR_ADC_REGH			0xB2
198*4882a593Smuzhiyun #define RK816_ZERO_CUR_ADC_REGL			0xB3
199*4882a593Smuzhiyun #define RK816_GASCNT_CAL_REG3			0xB4
200*4882a593Smuzhiyun #define RK816_GASCNT_CAL_REG2			0xB5
201*4882a593Smuzhiyun #define RK816_GASCNT_CAL_REG1			0xB6
202*4882a593Smuzhiyun #define RK816_GASCNT_CAL_REG0			0xB7
203*4882a593Smuzhiyun #define RK816_GASCNT_REG3			0xB8
204*4882a593Smuzhiyun #define RK816_GASCNT_REG2			0xB9
205*4882a593Smuzhiyun #define RK816_GASCNT_REG1			0xBA
206*4882a593Smuzhiyun #define RK816_GASCNT_REG0			0xBB
207*4882a593Smuzhiyun #define RK816_BAT_CUR_AVG_REGH			0xBC
208*4882a593Smuzhiyun #define RK816_BAT_CUR_AVG_REGL			0xBD
209*4882a593Smuzhiyun #define RK816_TS_ADC_REGH			0xBE
210*4882a593Smuzhiyun #define RK816_TS_ADC_REGL			0xBF
211*4882a593Smuzhiyun #define RK816_USB_ADC_REGH			0xC0
212*4882a593Smuzhiyun #define RK816_USB_ADC_REGL			0xC1
213*4882a593Smuzhiyun #define RK816_BAT_OCV_REGH			0xC2
214*4882a593Smuzhiyun #define RK816_BAT_OCV_REGL			0xC3
215*4882a593Smuzhiyun #define RK816_BAT_VOL_REGH			0xC4
216*4882a593Smuzhiyun #define RK816_BAT_VOL_REGL			0xC5
217*4882a593Smuzhiyun #define RK816_RELAX_ENTRY_THRES_REGH		0xC6
218*4882a593Smuzhiyun #define RK816_RELAX_ENTRY_THRES_REGL		0xC7
219*4882a593Smuzhiyun #define RK816_RELAX_EXIT_THRES_REGH		0xC8
220*4882a593Smuzhiyun #define RK816_RELAX_EXIT_THRES_REGL		0xC9
221*4882a593Smuzhiyun #define RK816_RELAX_VOL1_REGH			0xCA
222*4882a593Smuzhiyun #define RK816_RELAX_VOL1_REGL			0xCB
223*4882a593Smuzhiyun #define RK816_RELAX_VOL2_REGH			0xCC
224*4882a593Smuzhiyun #define RK816_RELAX_VOL2_REGL			0xCD
225*4882a593Smuzhiyun #define RK816_RELAX_CUR1_REGH			0xCE
226*4882a593Smuzhiyun #define RK816_RELAX_CUR1_REGL			0xCF
227*4882a593Smuzhiyun #define RK816_RELAX_CUR2_REGH			0xD0
228*4882a593Smuzhiyun #define RK816_RELAX_CUR2_REGL			0xD1
229*4882a593Smuzhiyun #define RK816_CAL_OFFSET_REGH			0xD2
230*4882a593Smuzhiyun #define RK816_CAL_OFFSET_REGL			0xD3
231*4882a593Smuzhiyun #define RK816_NON_ACT_TIMER_CNT_REG		0xD4
232*4882a593Smuzhiyun #define RK816_VCALIB0_REGH			0xD5
233*4882a593Smuzhiyun #define RK816_VCALIB0_REGL			0xD6
234*4882a593Smuzhiyun #define RK816_VCALIB1_REGH			0xD7
235*4882a593Smuzhiyun #define RK816_VCALIB1_REGL			0xD8
236*4882a593Smuzhiyun #define RK816_FCC_GASCNT_REG3			0xD9
237*4882a593Smuzhiyun #define RK816_FCC_GASCNT_REG2			0xDA
238*4882a593Smuzhiyun #define RK816_FCC_GASCNT_REG1			0xDB
239*4882a593Smuzhiyun #define RK816_FCC_GASCNT_REG0			0xDC
240*4882a593Smuzhiyun #define RK816_IOFFSET_REGH			0xDD
241*4882a593Smuzhiyun #define RK816_IOFFSET_REGL			0xDE
242*4882a593Smuzhiyun #define RK816_SLEEP_CON_SAMP_CUR_REG		0xDF
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun /*DATA REGISTER*/
245*4882a593Smuzhiyun #define RK816_SOC_REG				0xE0
246*4882a593Smuzhiyun #define RK816_REMAIN_CAP_REG3			0xE1
247*4882a593Smuzhiyun #define RK816_REMAIN_CAP_REG2			0xE2
248*4882a593Smuzhiyun #define RK816_REMAIN_CAP_REG1			0xE3
249*4882a593Smuzhiyun #define RK816_REMAIN_CAP_REG0			0xE4
250*4882a593Smuzhiyun #define RK816_UPDATE_LEVE_REG			0xE5
251*4882a593Smuzhiyun #define RK816_NEW_FCC_REG3			0xE6
252*4882a593Smuzhiyun #define RK816_NEW_FCC_REG2			0xE7
253*4882a593Smuzhiyun #define RK816_NEW_FCC_REG1			0xE8
254*4882a593Smuzhiyun #define RK816_NEW_FCC_REG0			0xE9
255*4882a593Smuzhiyun #define RK816_NON_ACT_TIMER_CNT_REG_SAVE	0xEA
256*4882a593Smuzhiyun #define RK816_OCV_VOL_VALID_REG			0xEB
257*4882a593Smuzhiyun #define RK816_REBOOT_CNT_REG			0xEC
258*4882a593Smuzhiyun #define RK816_PCB_IOFFSET_REG			0xED
259*4882a593Smuzhiyun #define RK816_MISC_MARK_REG			0xEE
260*4882a593Smuzhiyun #define RK816_HALT_CNT_REG			0xEF
261*4882a593Smuzhiyun #define RK816_CALC_REST_REGH			0xF0
262*4882a593Smuzhiyun #define RK816_CALC_REST_REGL			0xF1
263*4882a593Smuzhiyun #define DATA18_REG				0xF2
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun /*INTERRUPT REGISTER*/
266*4882a593Smuzhiyun #define RK816_INT_STS_REG1			0x49
267*4882a593Smuzhiyun #define RK816_INT_STS_MSK_REG1			0x4A
268*4882a593Smuzhiyun #define RK816_INT_STS_REG2			0x4C
269*4882a593Smuzhiyun #define RK816_INT_STS_MSK_REG2			0x4D
270*4882a593Smuzhiyun #define RK816_INT_STS_REG3			0x4E
271*4882a593Smuzhiyun #define RK816_INT_STS_MSK_REG3			0x4F
272*4882a593Smuzhiyun #define RK816_GPIO_IO_POL_REG			0x50
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun #define RK816_DATA18_REG			0xF2
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun /* IRQ Definitions */
277*4882a593Smuzhiyun #define RK816_IRQ_PWRON_FALL			0
278*4882a593Smuzhiyun #define RK816_IRQ_PWRON_RISE			1
279*4882a593Smuzhiyun #define RK816_IRQ_VB_LOW			2
280*4882a593Smuzhiyun #define RK816_IRQ_PWRON				3
281*4882a593Smuzhiyun #define RK816_IRQ_PWRON_LP			4
282*4882a593Smuzhiyun #define RK816_IRQ_HOTDIE			5
283*4882a593Smuzhiyun #define RK816_IRQ_RTC_ALARM			6
284*4882a593Smuzhiyun #define RK816_IRQ_RTC_PERIOD			7
285*4882a593Smuzhiyun #define RK816_IRQ_USB_OV			8
286*4882a593Smuzhiyun #define RK816_IRQ_PLUG_IN			9
287*4882a593Smuzhiyun #define RK816_IRQ_PLUG_OUT			10
288*4882a593Smuzhiyun #define RK816_IRQ_CHG_OK			11
289*4882a593Smuzhiyun #define RK816_IRQ_CHG_TE			12
290*4882a593Smuzhiyun #define RK816_IRQ_CHG_TS			13
291*4882a593Smuzhiyun #define RK816_IRQ_CHG_CVTLIM			14
292*4882a593Smuzhiyun #define RK816_IRQ_DISCHG_ILIM			15
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun #define RK816_IRQ_PWRON_FALL_MSK		BIT(5)
295*4882a593Smuzhiyun #define RK816_IRQ_PWRON_RISE_MSK		BIT(6)
296*4882a593Smuzhiyun #define RK816_IRQ_VB_LOW_MSK			BIT(1)
297*4882a593Smuzhiyun #define RK816_IRQ_PWRON_MSK			BIT(2)
298*4882a593Smuzhiyun #define RK816_IRQ_PWRON_LP_MSK			BIT(3)
299*4882a593Smuzhiyun #define RK816_IRQ_HOTDIE_MSK			BIT(4)
300*4882a593Smuzhiyun #define RK816_IRQ_RTC_ALARM_MSK			BIT(5)
301*4882a593Smuzhiyun #define RK816_IRQ_RTC_PERIOD_MSK		BIT(6)
302*4882a593Smuzhiyun #define RK816_IRQ_USB_OV_MSK			BIT(7)
303*4882a593Smuzhiyun #define RK816_IRQ_PLUG_IN_MSK			BIT(0)
304*4882a593Smuzhiyun #define RK816_IRQ_PLUG_OUT_MSK			BIT(1)
305*4882a593Smuzhiyun #define RK816_IRQ_CHG_OK_MSK			BIT(2)
306*4882a593Smuzhiyun #define RK816_IRQ_CHG_TE_MSK			BIT(3)
307*4882a593Smuzhiyun #define RK816_IRQ_CHG_TS_MSK			BIT(4)
308*4882a593Smuzhiyun #define RK816_IRQ_CHG_CVTLIM_MSK		BIT(6)
309*4882a593Smuzhiyun #define RK816_IRQ_DISCHG_ILIM_MSK		BIT(7)
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun #define RK816_VBAT_LOW_2V8			0x00
312*4882a593Smuzhiyun #define RK816_VBAT_LOW_2V9			0x01
313*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V0			0x02
314*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V1			0x03
315*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V2			0x04
316*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V3			0x05
317*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V4			0x06
318*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V5			0x07
319*4882a593Smuzhiyun #define RK816_PWR_FALL_INT_STATUS		(0x1 << 5)
320*4882a593Smuzhiyun #define RK816_PWR_RISE_INT_STATUS		(0x1 << 6)
321*4882a593Smuzhiyun #define RK816_ALARM_INT_STATUS			(0x1 << 5)
322*4882a593Smuzhiyun #define EN_VBAT_LOW_IRQ				(0x1 << 4)
323*4882a593Smuzhiyun #define VBAT_LOW_ACT_MASK			(0x1 << 4)
324*4882a593Smuzhiyun #define RTC_TIMER_ALARM_INT_MSK			(0x3 << 2)
325*4882a593Smuzhiyun #define RTC_TIMER_ALARM_INT_DIS			(0x0 << 2)
326*4882a593Smuzhiyun #define RTC_PERIOD_ALARM_INT_MSK		(0x3 << 5)
327*4882a593Smuzhiyun #define RTC_PERIOD_ALARM_INT_ST			(0x3 << 5)
328*4882a593Smuzhiyun #define RTC_PERIOD_ALARM_INT_DIS		(0x3 << 5)
329*4882a593Smuzhiyun #define RTC_PERIOD_ALARM_INT_EN			(0x9f)
330*4882a593Smuzhiyun #define REG_WRITE_MSK				0xff
331*4882a593Smuzhiyun #define BUCK4_MAX_ILIMIT			0x2c
332*4882a593Smuzhiyun #define BUCK_RATE_MSK				(0x3 << 3)
333*4882a593Smuzhiyun #define BUCK_RATE_12_5MV_US			(0x2 << 3)
334*4882a593Smuzhiyun #define ALL_INT_FLAGS_ST			0xff
335*4882a593Smuzhiyun #define PLUGIN_OUT_INT_EN			0xfc
336*4882a593Smuzhiyun #define RK816_PWRON_FALL_RISE_INT_EN		0x9f
337*4882a593Smuzhiyun #define BUCK1_2_IMAX_MAX			(0x3 << 6)
338*4882a593Smuzhiyun #define BUCK3_4_IMAX_MAX			(0x3 << 3)
339*4882a593Smuzhiyun #define BOOST_DISABLE				((0x1 << 5) | (0x0 << 1))
340*4882a593Smuzhiyun #define BUCK4_VRP_3PERCENT			0xc0
341*4882a593Smuzhiyun #define RK816_BUCK_DVS_CONFIRM			(0x1 << 7)
342*4882a593Smuzhiyun #define RK816_TYPE_ES2				0x05
343*4882a593Smuzhiyun #define RK816_CHIP_VERSION_MASK			0x0f
344*4882a593Smuzhiyun 
345*4882a593Smuzhiyun /* RK818 */
346*4882a593Smuzhiyun #define RK818_DCDC1			0
347*4882a593Smuzhiyun #define RK818_LDO1			4
348*4882a593Smuzhiyun #define RK818_NUM_REGULATORS		17
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun enum rk818_reg {
351*4882a593Smuzhiyun 	RK818_ID_DCDC1,
352*4882a593Smuzhiyun 	RK818_ID_DCDC2,
353*4882a593Smuzhiyun 	RK818_ID_DCDC3,
354*4882a593Smuzhiyun 	RK818_ID_DCDC4,
355*4882a593Smuzhiyun 	RK818_ID_BOOST,
356*4882a593Smuzhiyun 	RK818_ID_LDO1,
357*4882a593Smuzhiyun 	RK818_ID_LDO2,
358*4882a593Smuzhiyun 	RK818_ID_LDO3,
359*4882a593Smuzhiyun 	RK818_ID_LDO4,
360*4882a593Smuzhiyun 	RK818_ID_LDO5,
361*4882a593Smuzhiyun 	RK818_ID_LDO6,
362*4882a593Smuzhiyun 	RK818_ID_LDO7,
363*4882a593Smuzhiyun 	RK818_ID_LDO8,
364*4882a593Smuzhiyun 	RK818_ID_LDO9,
365*4882a593Smuzhiyun 	RK818_ID_SWITCH,
366*4882a593Smuzhiyun 	RK818_ID_HDMI_SWITCH,
367*4882a593Smuzhiyun 	RK818_ID_OTG_SWITCH,
368*4882a593Smuzhiyun };
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun #define RK818_VB_MON_REG		0x21
371*4882a593Smuzhiyun #define RK818_THERMAL_REG		0x22
372*4882a593Smuzhiyun #define RK818_DCDC_EN_REG		0x23
373*4882a593Smuzhiyun #define RK818_LDO_EN_REG		0x24
374*4882a593Smuzhiyun #define RK818_SLEEP_SET_OFF_REG1	0x25
375*4882a593Smuzhiyun #define RK818_SLEEP_SET_OFF_REG2	0x26
376*4882a593Smuzhiyun #define RK818_DCDC_UV_STS_REG		0x27
377*4882a593Smuzhiyun #define RK818_DCDC_UV_ACT_REG		0x28
378*4882a593Smuzhiyun #define RK818_LDO_UV_STS_REG		0x29
379*4882a593Smuzhiyun #define RK818_LDO_UV_ACT_REG		0x2a
380*4882a593Smuzhiyun #define RK818_DCDC_PG_REG		0x2b
381*4882a593Smuzhiyun #define RK818_LDO_PG_REG		0x2c
382*4882a593Smuzhiyun #define RK818_VOUT_MON_TDB_REG		0x2d
383*4882a593Smuzhiyun #define RK818_BUCK1_CONFIG_REG		0x2e
384*4882a593Smuzhiyun #define RK818_BUCK1_ON_VSEL_REG		0x2f
385*4882a593Smuzhiyun #define RK818_BUCK1_SLP_VSEL_REG	0x30
386*4882a593Smuzhiyun #define RK818_BUCK2_CONFIG_REG		0x32
387*4882a593Smuzhiyun #define RK818_BUCK2_ON_VSEL_REG		0x33
388*4882a593Smuzhiyun #define RK818_BUCK2_SLP_VSEL_REG	0x34
389*4882a593Smuzhiyun #define RK818_BUCK3_CONFIG_REG		0x36
390*4882a593Smuzhiyun #define RK818_BUCK4_CONFIG_REG		0x37
391*4882a593Smuzhiyun #define RK818_BUCK4_ON_VSEL_REG		0x38
392*4882a593Smuzhiyun #define RK818_BUCK4_SLP_VSEL_REG	0x39
393*4882a593Smuzhiyun #define RK818_BOOST_CONFIG_REG		0x3a
394*4882a593Smuzhiyun #define RK818_LDO1_ON_VSEL_REG		0x3b
395*4882a593Smuzhiyun #define RK818_LDO1_SLP_VSEL_REG		0x3c
396*4882a593Smuzhiyun #define RK818_LDO2_ON_VSEL_REG		0x3d
397*4882a593Smuzhiyun #define RK818_LDO2_SLP_VSEL_REG		0x3e
398*4882a593Smuzhiyun #define RK818_LDO3_ON_VSEL_REG		0x3f
399*4882a593Smuzhiyun #define RK818_LDO3_SLP_VSEL_REG		0x40
400*4882a593Smuzhiyun #define RK818_LDO4_ON_VSEL_REG		0x41
401*4882a593Smuzhiyun #define RK818_LDO4_SLP_VSEL_REG		0x42
402*4882a593Smuzhiyun #define RK818_LDO5_ON_VSEL_REG		0x43
403*4882a593Smuzhiyun #define RK818_LDO5_SLP_VSEL_REG		0x44
404*4882a593Smuzhiyun #define RK818_LDO6_ON_VSEL_REG		0x45
405*4882a593Smuzhiyun #define RK818_LDO6_SLP_VSEL_REG		0x46
406*4882a593Smuzhiyun #define RK818_LDO7_ON_VSEL_REG		0x47
407*4882a593Smuzhiyun #define RK818_LDO7_SLP_VSEL_REG		0x48
408*4882a593Smuzhiyun #define RK818_LDO8_ON_VSEL_REG		0x49
409*4882a593Smuzhiyun #define RK818_LDO8_SLP_VSEL_REG		0x4a
410*4882a593Smuzhiyun #define RK818_BOOST_LDO9_ON_VSEL_REG	0x54
411*4882a593Smuzhiyun #define RK818_BOOST_LDO9_SLP_VSEL_REG	0x55
412*4882a593Smuzhiyun #define RK818_DEVCTRL_REG		0x4b
413*4882a593Smuzhiyun #define RK818_INT_STS_REG1		0X4c
414*4882a593Smuzhiyun #define RK818_INT_STS_MSK_REG1		0x4d
415*4882a593Smuzhiyun #define RK818_INT_STS_REG2		0x4e
416*4882a593Smuzhiyun #define RK818_INT_STS_MSK_REG2		0x4f
417*4882a593Smuzhiyun #define RK818_IO_POL_REG		0x50
418*4882a593Smuzhiyun #define RK818_H5V_EN_REG		0x52
419*4882a593Smuzhiyun #define RK818_SLEEP_SET_OFF_REG3	0x53
420*4882a593Smuzhiyun #define RK818_BOOST_LDO9_ON_VSEL_REG	0x54
421*4882a593Smuzhiyun #define RK818_BOOST_LDO9_SLP_VSEL_REG	0x55
422*4882a593Smuzhiyun #define RK818_BOOST_CTRL_REG		0x56
423*4882a593Smuzhiyun #define RK818_DCDC_ILMAX		0x90
424*4882a593Smuzhiyun #define RK818_CHRG_COMP_REG		0x9a
425*4882a593Smuzhiyun #define RK818_SUP_STS_REG		0xa0
426*4882a593Smuzhiyun #define RK818_USB_CTRL_REG		0xa1
427*4882a593Smuzhiyun #define RK818_CHRG_CTRL_REG1		0xa3
428*4882a593Smuzhiyun #define RK818_CHRG_CTRL_REG2		0xa4
429*4882a593Smuzhiyun #define RK818_CHRG_CTRL_REG3		0xa5
430*4882a593Smuzhiyun #define RK818_BAT_CTRL_REG		0xa6
431*4882a593Smuzhiyun #define RK818_BAT_HTS_TS1_REG		0xa8
432*4882a593Smuzhiyun #define RK818_BAT_LTS_TS1_REG		0xa9
433*4882a593Smuzhiyun #define RK818_BAT_HTS_TS2_REG		0xaa
434*4882a593Smuzhiyun #define RK818_BAT_LTS_TS2_REG		0xab
435*4882a593Smuzhiyun #define RK818_TS_CTRL_REG		0xac
436*4882a593Smuzhiyun #define RK818_ADC_CTRL_REG		0xad
437*4882a593Smuzhiyun #define RK818_ON_SOURCE_REG		0xae
438*4882a593Smuzhiyun #define RK818_OFF_SOURCE_REG		0xaf
439*4882a593Smuzhiyun #define RK818_GGCON_REG			0xb0
440*4882a593Smuzhiyun #define RK818_GGSTS_REG			0xb1
441*4882a593Smuzhiyun #define RK818_FRAME_SMP_INTERV_REG	0xb2
442*4882a593Smuzhiyun #define RK818_AUTO_SLP_CUR_THR_REG	0xb3
443*4882a593Smuzhiyun #define RK818_GASCNT_CAL_REG3		0xb4
444*4882a593Smuzhiyun #define RK818_GASCNT_CAL_REG2		0xb5
445*4882a593Smuzhiyun #define RK818_GASCNT_CAL_REG1		0xb6
446*4882a593Smuzhiyun #define RK818_GASCNT_CAL_REG0		0xb7
447*4882a593Smuzhiyun #define RK818_GASCNT3_REG		0xb8
448*4882a593Smuzhiyun #define RK818_GASCNT2_REG		0xb9
449*4882a593Smuzhiyun #define RK818_GASCNT1_REG		0xba
450*4882a593Smuzhiyun #define RK818_GASCNT0_REG		0xbb
451*4882a593Smuzhiyun #define RK818_BAT_CUR_AVG_REGH		0xbc
452*4882a593Smuzhiyun #define RK818_BAT_CUR_AVG_REGL		0xbd
453*4882a593Smuzhiyun #define RK818_TS1_ADC_REGH		0xbe
454*4882a593Smuzhiyun #define RK818_TS1_ADC_REGL		0xbf
455*4882a593Smuzhiyun #define RK818_TS2_ADC_REGH		0xc0
456*4882a593Smuzhiyun #define RK818_TS2_ADC_REGL		0xc1
457*4882a593Smuzhiyun #define RK818_BAT_OCV_REGH		0xc2
458*4882a593Smuzhiyun #define RK818_BAT_OCV_REGL		0xc3
459*4882a593Smuzhiyun #define RK818_BAT_VOL_REGH		0xc4
460*4882a593Smuzhiyun #define RK818_BAT_VOL_REGL		0xc5
461*4882a593Smuzhiyun #define RK818_RELAX_ENTRY_THRES_REGH	0xc6
462*4882a593Smuzhiyun #define RK818_RELAX_ENTRY_THRES_REGL	0xc7
463*4882a593Smuzhiyun #define RK818_RELAX_EXIT_THRES_REGH	0xc8
464*4882a593Smuzhiyun #define RK818_RELAX_EXIT_THRES_REGL	0xc9
465*4882a593Smuzhiyun #define RK818_RELAX_VOL1_REGH		0xca
466*4882a593Smuzhiyun #define RK818_RELAX_VOL1_REGL		0xcb
467*4882a593Smuzhiyun #define RK818_RELAX_VOL2_REGH		0xcc
468*4882a593Smuzhiyun #define RK818_RELAX_VOL2_REGL		0xcd
469*4882a593Smuzhiyun #define RK818_BAT_CUR_R_CALC_REGH	0xce
470*4882a593Smuzhiyun #define RK818_BAT_CUR_R_CALC_REGL	0xcf
471*4882a593Smuzhiyun #define RK818_BAT_VOL_R_CALC_REGH	0xd0
472*4882a593Smuzhiyun #define RK818_BAT_VOL_R_CALC_REGL	0xd1
473*4882a593Smuzhiyun #define RK818_CAL_OFFSET_REGH		0xd2
474*4882a593Smuzhiyun #define RK818_CAL_OFFSET_REGL		0xd3
475*4882a593Smuzhiyun #define RK818_NON_ACT_TIMER_CNT_REG	0xd4
476*4882a593Smuzhiyun #define RK818_VCALIB0_REGH		0xd5
477*4882a593Smuzhiyun #define RK818_VCALIB0_REGL		0xd6
478*4882a593Smuzhiyun #define RK818_VCALIB1_REGH		0xd7
479*4882a593Smuzhiyun #define RK818_VCALIB1_REGL		0xd8
480*4882a593Smuzhiyun #define RK818_IOFFSET_REGH		0xdd
481*4882a593Smuzhiyun #define RK818_IOFFSET_REGL		0xde
482*4882a593Smuzhiyun #define RK818_SOC_REG			0xe0
483*4882a593Smuzhiyun #define RK818_REMAIN_CAP_REG3		0xe1
484*4882a593Smuzhiyun #define RK818_REMAIN_CAP_REG2		0xe2
485*4882a593Smuzhiyun #define RK818_REMAIN_CAP_REG1		0xe3
486*4882a593Smuzhiyun #define RK818_REMAIN_CAP_REG0		0xe4
487*4882a593Smuzhiyun #define RK818_UPDAT_LEVE_REG		0xe5
488*4882a593Smuzhiyun #define RK818_NEW_FCC_REG3		0xe6
489*4882a593Smuzhiyun #define RK818_NEW_FCC_REG2		0xe7
490*4882a593Smuzhiyun #define RK818_NEW_FCC_REG1		0xe8
491*4882a593Smuzhiyun #define RK818_NEW_FCC_REG0		0xe9
492*4882a593Smuzhiyun #define RK818_NON_ACT_TIMER_CNT_SAVE_REG	0xea
493*4882a593Smuzhiyun #define RK818_OCV_VOL_VALID_REG		0xeb
494*4882a593Smuzhiyun #define RK818_REBOOT_CNT_REG		0xec
495*4882a593Smuzhiyun #define RK818_POFFSET_REG		0xed
496*4882a593Smuzhiyun #define RK818_MISC_MARK_REG		0xee
497*4882a593Smuzhiyun #define RK818_HALT_CNT_REG		0xef
498*4882a593Smuzhiyun #define RK818_CALC_REST_REGH		0xf0
499*4882a593Smuzhiyun #define RK818_CALC_REST_REGL		0xf1
500*4882a593Smuzhiyun #define RK818_SAVE_DATA19		0xf2
501*4882a593Smuzhiyun #define RK818_NUM_REGULATOR		17
502*4882a593Smuzhiyun 
503*4882a593Smuzhiyun #define RK818_H5V_EN			BIT(0)
504*4882a593Smuzhiyun #define RK818_REF_RDY_CTRL		BIT(1)
505*4882a593Smuzhiyun #define RK818_USB_ILIM_SEL_MASK		0xf
506*4882a593Smuzhiyun #define RK818_USB_ILMIN_2000MA		0x7
507*4882a593Smuzhiyun #define RK818_USB_CHG_SD_VSEL_MASK	0x70
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun /* RK805 */
510*4882a593Smuzhiyun enum rk805_reg {
511*4882a593Smuzhiyun 	RK805_ID_DCDC1,
512*4882a593Smuzhiyun 	RK805_ID_DCDC2,
513*4882a593Smuzhiyun 	RK805_ID_DCDC3,
514*4882a593Smuzhiyun 	RK805_ID_DCDC4,
515*4882a593Smuzhiyun 	RK805_ID_LDO1,
516*4882a593Smuzhiyun 	RK805_ID_LDO2,
517*4882a593Smuzhiyun 	RK805_ID_LDO3,
518*4882a593Smuzhiyun };
519*4882a593Smuzhiyun 
520*4882a593Smuzhiyun /* CONFIG REGISTER */
521*4882a593Smuzhiyun #define RK805_VB_MON_REG		0x21
522*4882a593Smuzhiyun #define RK805_THERMAL_REG		0x22
523*4882a593Smuzhiyun 
524*4882a593Smuzhiyun /* POWER CHANNELS ENABLE REGISTER */
525*4882a593Smuzhiyun #define RK805_DCDC_EN_REG		0x23
526*4882a593Smuzhiyun #define RK805_SLP_DCDC_EN_REG		0x25
527*4882a593Smuzhiyun #define RK805_SLP_LDO_EN_REG		0x26
528*4882a593Smuzhiyun #define RK805_LDO_EN_REG		0x27
529*4882a593Smuzhiyun 
530*4882a593Smuzhiyun /* BUCK AND LDO CONFIG REGISTER */
531*4882a593Smuzhiyun #define RK805_BUCK_LDO_SLP_LP_EN_REG	0x2A
532*4882a593Smuzhiyun #define RK805_BUCK1_CONFIG_REG		0x2E
533*4882a593Smuzhiyun #define RK805_BUCK1_ON_VSEL_REG		0x2F
534*4882a593Smuzhiyun #define RK805_BUCK1_SLP_VSEL_REG	0x30
535*4882a593Smuzhiyun #define RK805_BUCK2_CONFIG_REG		0x32
536*4882a593Smuzhiyun #define RK805_BUCK2_ON_VSEL_REG		0x33
537*4882a593Smuzhiyun #define RK805_BUCK2_SLP_VSEL_REG	0x34
538*4882a593Smuzhiyun #define RK805_BUCK3_CONFIG_REG		0x36
539*4882a593Smuzhiyun #define RK805_BUCK4_CONFIG_REG		0x37
540*4882a593Smuzhiyun #define RK805_BUCK4_ON_VSEL_REG		0x38
541*4882a593Smuzhiyun #define RK805_BUCK4_SLP_VSEL_REG	0x39
542*4882a593Smuzhiyun #define RK805_LDO1_ON_VSEL_REG		0x3B
543*4882a593Smuzhiyun #define RK805_LDO1_SLP_VSEL_REG		0x3C
544*4882a593Smuzhiyun #define RK805_LDO2_ON_VSEL_REG		0x3D
545*4882a593Smuzhiyun #define RK805_LDO2_SLP_VSEL_REG		0x3E
546*4882a593Smuzhiyun #define RK805_LDO3_ON_VSEL_REG		0x3F
547*4882a593Smuzhiyun #define RK805_LDO3_SLP_VSEL_REG		0x40
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun /* INTERRUPT REGISTER */
550*4882a593Smuzhiyun #define RK805_PWRON_LP_INT_TIME_REG	0x47
551*4882a593Smuzhiyun #define RK805_PWRON_DB_REG		0x48
552*4882a593Smuzhiyun #define RK805_DEV_CTRL_REG		0x4B
553*4882a593Smuzhiyun #define RK805_INT_STS_REG		0x4C
554*4882a593Smuzhiyun #define RK805_INT_STS_MSK_REG		0x4D
555*4882a593Smuzhiyun #define RK805_GPIO_IO_POL_REG		0x50
556*4882a593Smuzhiyun #define RK805_OUT_REG			0x52
557*4882a593Smuzhiyun #define RK805_ON_SOURCE_REG		0xAE
558*4882a593Smuzhiyun #define RK805_OFF_SOURCE_REG		0xAF
559*4882a593Smuzhiyun 
560*4882a593Smuzhiyun #define RK805_NUM_REGULATORS		7
561*4882a593Smuzhiyun 
562*4882a593Smuzhiyun #define RK805_PWRON_FALL_RISE_INT_EN	0x0
563*4882a593Smuzhiyun #define RK805_PWRON_FALL_RISE_INT_MSK	0x81
564*4882a593Smuzhiyun 
565*4882a593Smuzhiyun /* RK805 IRQ Definitions */
566*4882a593Smuzhiyun #define RK805_IRQ_VB_LOW		1
567*4882a593Smuzhiyun #define RK805_IRQ_PWRON			2
568*4882a593Smuzhiyun #define RK805_IRQ_PWRON_LP		3
569*4882a593Smuzhiyun #define RK805_IRQ_HOTDIE		4
570*4882a593Smuzhiyun #define RK805_IRQ_RTC_ALARM		5
571*4882a593Smuzhiyun #define RK805_IRQ_RTC_PERIOD		6
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun /*
574*4882a593Smuzhiyun  * When PMIC irq occurs, regmap-irq.c will traverse all PMIC child
575*4882a593Smuzhiyun  * interrupts from low index 0 to high index, we give fall interrupt
576*4882a593Smuzhiyun  * high priority to be called earlier than rise, so that it can be
577*4882a593Smuzhiyun  * override by late rise event. This can helps to solve key release
578*4882a593Smuzhiyun  * glitch which make a wrongly fall event immediately after rise.
579*4882a593Smuzhiyun  */
580*4882a593Smuzhiyun #define RK805_IRQ_PWRON_FALL		0
581*4882a593Smuzhiyun #define RK805_IRQ_PWRON_RISE		7
582*4882a593Smuzhiyun 
583*4882a593Smuzhiyun #define RK805_IRQ_PWRON_RISE_MSK	BIT(0)
584*4882a593Smuzhiyun #define RK805_IRQ_VB_LOW_MSK		BIT(1)
585*4882a593Smuzhiyun #define RK805_IRQ_PWRON_MSK		BIT(2)
586*4882a593Smuzhiyun #define RK805_IRQ_PWRON_LP_MSK		BIT(3)
587*4882a593Smuzhiyun #define RK805_IRQ_HOTDIE_MSK		BIT(4)
588*4882a593Smuzhiyun #define RK805_IRQ_RTC_ALARM_MSK		BIT(5)
589*4882a593Smuzhiyun #define RK805_IRQ_RTC_PERIOD_MSK	BIT(6)
590*4882a593Smuzhiyun #define RK805_IRQ_PWRON_FALL_MSK	BIT(7)
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun #define RK805_PWR_RISE_INT_STATUS	BIT(0)
593*4882a593Smuzhiyun #define RK805_VB_LOW_INT_STATUS		BIT(1)
594*4882a593Smuzhiyun #define RK805_PWRON_INT_STATUS		BIT(2)
595*4882a593Smuzhiyun #define RK805_PWRON_LP_INT_STATUS	BIT(3)
596*4882a593Smuzhiyun #define RK805_HOTDIE_INT_STATUS		BIT(4)
597*4882a593Smuzhiyun #define RK805_ALARM_INT_STATUS		BIT(5)
598*4882a593Smuzhiyun #define RK805_PERIOD_INT_STATUS		BIT(6)
599*4882a593Smuzhiyun #define RK805_PWR_FALL_INT_STATUS	BIT(7)
600*4882a593Smuzhiyun 
601*4882a593Smuzhiyun #define RK805_BUCK1_2_ILMAX_MASK	(3 << 6)
602*4882a593Smuzhiyun #define RK805_BUCK3_4_ILMAX_MASK        (3 << 3)
603*4882a593Smuzhiyun #define RK805_RTC_PERIOD_INT_MASK	(1 << 6)
604*4882a593Smuzhiyun #define RK805_RTC_ALARM_INT_MASK	(1 << 5)
605*4882a593Smuzhiyun #define RK805_INT_ALARM_EN		(1 << 3)
606*4882a593Smuzhiyun #define RK805_INT_TIMER_EN		(1 << 2)
607*4882a593Smuzhiyun 
608*4882a593Smuzhiyun #define RK805_SLP_LDO_EN_OFFSET		-1
609*4882a593Smuzhiyun #define RK805_SLP_DCDC_EN_OFFSET	2
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun #define RK805_RAMP_RATE_OFFSET		3
612*4882a593Smuzhiyun #define RK805_RAMP_RATE_MASK		(3 << RK805_RAMP_RATE_OFFSET)
613*4882a593Smuzhiyun #define RK805_RAMP_RATE_3MV_PER_US	(0 << RK805_RAMP_RATE_OFFSET)
614*4882a593Smuzhiyun #define RK805_RAMP_RATE_6MV_PER_US	(1 << RK805_RAMP_RATE_OFFSET)
615*4882a593Smuzhiyun #define RK805_RAMP_RATE_12_5MV_PER_US	(2 << RK805_RAMP_RATE_OFFSET)
616*4882a593Smuzhiyun #define RK805_RAMP_RATE_25MV_PER_US	(3 << RK805_RAMP_RATE_OFFSET)
617*4882a593Smuzhiyun 
618*4882a593Smuzhiyun /* RK808 IRQ Definitions */
619*4882a593Smuzhiyun #define RK808_IRQ_VOUT_LO	0
620*4882a593Smuzhiyun #define RK808_IRQ_VB_LO		1
621*4882a593Smuzhiyun #define RK808_IRQ_PWRON		2
622*4882a593Smuzhiyun #define RK808_IRQ_PWRON_LP	3
623*4882a593Smuzhiyun #define RK808_IRQ_HOTDIE	4
624*4882a593Smuzhiyun #define RK808_IRQ_RTC_ALARM	5
625*4882a593Smuzhiyun #define RK808_IRQ_RTC_PERIOD	6
626*4882a593Smuzhiyun #define RK808_IRQ_PLUG_IN_INT	7
627*4882a593Smuzhiyun #define RK808_IRQ_PLUG_OUT_INT	8
628*4882a593Smuzhiyun #define RK808_NUM_IRQ		9
629*4882a593Smuzhiyun 
630*4882a593Smuzhiyun #define RK808_IRQ_VOUT_LO_MSK		BIT(0)
631*4882a593Smuzhiyun #define RK808_IRQ_VB_LO_MSK		BIT(1)
632*4882a593Smuzhiyun #define RK808_IRQ_PWRON_MSK		BIT(2)
633*4882a593Smuzhiyun #define RK808_IRQ_PWRON_LP_MSK		BIT(3)
634*4882a593Smuzhiyun #define RK808_IRQ_HOTDIE_MSK		BIT(4)
635*4882a593Smuzhiyun #define RK808_IRQ_RTC_ALARM_MSK		BIT(5)
636*4882a593Smuzhiyun #define RK808_IRQ_RTC_PERIOD_MSK	BIT(6)
637*4882a593Smuzhiyun #define RK808_IRQ_PLUG_IN_INT_MSK	BIT(0)
638*4882a593Smuzhiyun #define RK808_IRQ_PLUG_OUT_INT_MSK	BIT(1)
639*4882a593Smuzhiyun 
640*4882a593Smuzhiyun /* RK818 IRQ Definitions */
641*4882a593Smuzhiyun #define RK818_IRQ_VOUT_LO	0
642*4882a593Smuzhiyun #define RK818_IRQ_VB_LO		1
643*4882a593Smuzhiyun #define RK818_IRQ_PWRON		2
644*4882a593Smuzhiyun #define RK818_IRQ_PWRON_LP	3
645*4882a593Smuzhiyun #define RK818_IRQ_HOTDIE	4
646*4882a593Smuzhiyun #define RK818_IRQ_RTC_ALARM	5
647*4882a593Smuzhiyun #define RK818_IRQ_RTC_PERIOD	6
648*4882a593Smuzhiyun #define RK818_IRQ_USB_OV	7
649*4882a593Smuzhiyun #define RK818_IRQ_PLUG_IN	8
650*4882a593Smuzhiyun #define RK818_IRQ_PLUG_OUT	9
651*4882a593Smuzhiyun #define RK818_IRQ_CHG_OK	10
652*4882a593Smuzhiyun #define RK818_IRQ_CHG_TE	11
653*4882a593Smuzhiyun #define RK818_IRQ_CHG_TS1	12
654*4882a593Smuzhiyun #define RK818_IRQ_TS2		13
655*4882a593Smuzhiyun #define RK818_IRQ_CHG_CVTLIM	14
656*4882a593Smuzhiyun #define RK818_IRQ_DISCHG_ILIM	15
657*4882a593Smuzhiyun 
658*4882a593Smuzhiyun #define RK818_IRQ_VOUT_LO_MSK		BIT(0)
659*4882a593Smuzhiyun #define RK818_IRQ_VB_LO_MSK		BIT(1)
660*4882a593Smuzhiyun #define RK818_IRQ_PWRON_MSK		BIT(2)
661*4882a593Smuzhiyun #define RK818_IRQ_PWRON_LP_MSK		BIT(3)
662*4882a593Smuzhiyun #define RK818_IRQ_HOTDIE_MSK		BIT(4)
663*4882a593Smuzhiyun #define RK818_IRQ_RTC_ALARM_MSK		BIT(5)
664*4882a593Smuzhiyun #define RK818_IRQ_RTC_PERIOD_MSK	BIT(6)
665*4882a593Smuzhiyun #define RK818_IRQ_USB_OV_MSK		BIT(7)
666*4882a593Smuzhiyun #define RK818_IRQ_PLUG_IN_MSK		BIT(0)
667*4882a593Smuzhiyun #define RK818_IRQ_PLUG_OUT_MSK		BIT(1)
668*4882a593Smuzhiyun #define RK818_IRQ_CHG_OK_MSK		BIT(2)
669*4882a593Smuzhiyun #define RK818_IRQ_CHG_TE_MSK		BIT(3)
670*4882a593Smuzhiyun #define RK818_IRQ_CHG_TS1_MSK		BIT(4)
671*4882a593Smuzhiyun #define RK818_IRQ_TS2_MSK		BIT(5)
672*4882a593Smuzhiyun #define RK818_IRQ_CHG_CVTLIM_MSK	BIT(6)
673*4882a593Smuzhiyun #define RK818_IRQ_DISCHG_ILIM_MSK	BIT(7)
674*4882a593Smuzhiyun 
675*4882a593Smuzhiyun #define RK818_NUM_IRQ		16
676*4882a593Smuzhiyun 
677*4882a593Smuzhiyun /*RK818_DCDC_EN_REG*/
678*4882a593Smuzhiyun #define BUCK1_EN_MASK		BIT(0)
679*4882a593Smuzhiyun #define BUCK2_EN_MASK		BIT(1)
680*4882a593Smuzhiyun #define BUCK3_EN_MASK		BIT(2)
681*4882a593Smuzhiyun #define BUCK4_EN_MASK		BIT(3)
682*4882a593Smuzhiyun #define BOOST_EN_MASK		BIT(4)
683*4882a593Smuzhiyun #define LDO9_EN_MASK		BIT(5)
684*4882a593Smuzhiyun #define SWITCH_EN_MASK		BIT(6)
685*4882a593Smuzhiyun #define OTG_EN_MASK		BIT(7)
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun #define BUCK1_EN_ENABLE		BIT(0)
688*4882a593Smuzhiyun #define BUCK2_EN_ENABLE		BIT(1)
689*4882a593Smuzhiyun #define BUCK3_EN_ENABLE		BIT(2)
690*4882a593Smuzhiyun #define BUCK4_EN_ENABLE		BIT(3)
691*4882a593Smuzhiyun #define BOOST_EN_ENABLE		BIT(4)
692*4882a593Smuzhiyun #define LDO9_EN_ENABLE		BIT(5)
693*4882a593Smuzhiyun #define SWITCH_EN_ENABLE	BIT(6)
694*4882a593Smuzhiyun #define OTG_EN_ENABLE		BIT(7)
695*4882a593Smuzhiyun 
696*4882a593Smuzhiyun #define BUCK1_SLP_SET_MASK	BIT(0)
697*4882a593Smuzhiyun #define BUCK2_SLP_SET_MASK	BIT(1)
698*4882a593Smuzhiyun #define BUCK3_SLP_SET_MASK	BIT(2)
699*4882a593Smuzhiyun #define BUCK4_SLP_SET_MASK	BIT(3)
700*4882a593Smuzhiyun #define BOOST_SLP_SET_MASK	BIT(4)
701*4882a593Smuzhiyun #define LDO9_SLP_SET_MASK	BIT(5)
702*4882a593Smuzhiyun #define SWITCH_SLP_SET_MASK	BIT(6)
703*4882a593Smuzhiyun #define OTG_SLP_SET_MASK	BIT(7)
704*4882a593Smuzhiyun 
705*4882a593Smuzhiyun #define BUCK1_SLP_SET_OFF	BIT(0)
706*4882a593Smuzhiyun #define BUCK2_SLP_SET_OFF	BIT(1)
707*4882a593Smuzhiyun #define BUCK3_SLP_SET_OFF	BIT(2)
708*4882a593Smuzhiyun #define BUCK4_SLP_SET_OFF	BIT(3)
709*4882a593Smuzhiyun #define BOOST_SLP_SET_OFF	BIT(4)
710*4882a593Smuzhiyun #define LDO9_SLP_SET_OFF	BIT(5)
711*4882a593Smuzhiyun #define SWITCH_SLP_SET_OFF	BIT(6)
712*4882a593Smuzhiyun #define OTG_SLP_SET_OFF		BIT(7)
713*4882a593Smuzhiyun #define OTG_BOOST_SLP_OFF	(BOOST_SLP_SET_OFF | OTG_SLP_SET_OFF)
714*4882a593Smuzhiyun 
715*4882a593Smuzhiyun #define BUCK1_SLP_SET_ON	BIT(0)
716*4882a593Smuzhiyun #define BUCK2_SLP_SET_ON	BIT(1)
717*4882a593Smuzhiyun #define BUCK3_SLP_SET_ON	BIT(2)
718*4882a593Smuzhiyun #define BUCK4_SLP_SET_ON	BIT(3)
719*4882a593Smuzhiyun #define BOOST_SLP_SET_ON	BIT(4)
720*4882a593Smuzhiyun #define LDO9_SLP_SET_ON		BIT(5)
721*4882a593Smuzhiyun #define SWITCH_SLP_SET_ON	BIT(6)
722*4882a593Smuzhiyun #define OTG_SLP_SET_ON		BIT(7)
723*4882a593Smuzhiyun 
724*4882a593Smuzhiyun #define VOUT_LO_MASK		BIT(0)
725*4882a593Smuzhiyun #define VB_LO_MASK		BIT(1)
726*4882a593Smuzhiyun #define PWRON_MASK		BIT(2)
727*4882a593Smuzhiyun #define PWRON_LP_MASK		BIT(3)
728*4882a593Smuzhiyun #define HOTDIE_MASK		BIT(4)
729*4882a593Smuzhiyun #define RTC_ALARM_MASK		BIT(5)
730*4882a593Smuzhiyun #define RTC_PERIOD_MASK		BIT(6)
731*4882a593Smuzhiyun #define USB_OV_MASK		BIT(7)
732*4882a593Smuzhiyun 
733*4882a593Smuzhiyun #define VOUT_LO_DISABLE		BIT(0)
734*4882a593Smuzhiyun #define VB_LO_DISABLE		BIT(1)
735*4882a593Smuzhiyun #define PWRON_DISABLE		BIT(2)
736*4882a593Smuzhiyun #define PWRON_LP_DISABLE	BIT(3)
737*4882a593Smuzhiyun #define HOTDIE_DISABLE		BIT(4)
738*4882a593Smuzhiyun #define RTC_ALARM_DISABLE	BIT(5)
739*4882a593Smuzhiyun #define RTC_PERIOD_DISABLE	BIT(6)
740*4882a593Smuzhiyun #define USB_OV_INT_DISABLE	BIT(7)
741*4882a593Smuzhiyun 
742*4882a593Smuzhiyun #define VOUT_LO_ENABLE		(0 << 0)
743*4882a593Smuzhiyun #define VB_LO_ENABLE		(0 << 1)
744*4882a593Smuzhiyun #define PWRON_ENABLE		(0 << 2)
745*4882a593Smuzhiyun #define PWRON_LP_ENABLE		(0 << 3)
746*4882a593Smuzhiyun #define HOTDIE_ENABLE		(0 << 4)
747*4882a593Smuzhiyun #define RTC_ALARM_ENABLE	(0 << 5)
748*4882a593Smuzhiyun #define RTC_PERIOD_ENABLE	(0 << 6)
749*4882a593Smuzhiyun #define USB_OV_INT_ENABLE	(0 << 7)
750*4882a593Smuzhiyun 
751*4882a593Smuzhiyun #define PLUG_IN_MASK		BIT(0)
752*4882a593Smuzhiyun #define PLUG_OUT_MASK		BIT(1)
753*4882a593Smuzhiyun #define CHGOK_MASK		BIT(2)
754*4882a593Smuzhiyun #define CHGTE_MASK		BIT(3)
755*4882a593Smuzhiyun #define CHGTS1_MASK		BIT(4)
756*4882a593Smuzhiyun #define TS2_MASK		BIT(5)
757*4882a593Smuzhiyun #define CHG_CVTLIM_MASK		BIT(6)
758*4882a593Smuzhiyun #define DISCHG_ILIM_MASK	BIT(7)
759*4882a593Smuzhiyun 
760*4882a593Smuzhiyun #define PLUG_IN_DISABLE		BIT(0)
761*4882a593Smuzhiyun #define PLUG_OUT_DISABLE	BIT(1)
762*4882a593Smuzhiyun #define CHGOK_DISABLE		BIT(2)
763*4882a593Smuzhiyun #define CHGTE_DISABLE		BIT(3)
764*4882a593Smuzhiyun #define CHGTS1_DISABLE		BIT(4)
765*4882a593Smuzhiyun #define TS2_DISABLE		BIT(5)
766*4882a593Smuzhiyun #define CHG_CVTLIM_DISABLE	BIT(6)
767*4882a593Smuzhiyun #define DISCHG_ILIM_DISABLE	BIT(7)
768*4882a593Smuzhiyun 
769*4882a593Smuzhiyun #define PLUG_IN_ENABLE		BIT(0)
770*4882a593Smuzhiyun #define PLUG_OUT_ENABLE		BIT(1)
771*4882a593Smuzhiyun #define CHGOK_ENABLE		BIT(2)
772*4882a593Smuzhiyun #define CHGTE_ENABLE		BIT(3)
773*4882a593Smuzhiyun #define CHGTS1_ENABLE		BIT(4)
774*4882a593Smuzhiyun #define TS2_ENABLE		BIT(5)
775*4882a593Smuzhiyun #define CHG_CVTLIM_ENABLE	BIT(6)
776*4882a593Smuzhiyun #define DISCHG_ILIM_ENABLE	BIT(7)
777*4882a593Smuzhiyun 
778*4882a593Smuzhiyun #define RK808_VBAT_LOW_2V8	0x00
779*4882a593Smuzhiyun #define RK808_VBAT_LOW_2V9	0x01
780*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V0	0x02
781*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V1	0x03
782*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V2	0x04
783*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V3	0x05
784*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V4	0x06
785*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V5	0x07
786*4882a593Smuzhiyun #define VBAT_LOW_VOL_MASK	(0x07 << 0)
787*4882a593Smuzhiyun #define EN_VABT_LOW_SHUT_DOWN	(0x00 << 4)
788*4882a593Smuzhiyun #define EN_VBAT_LOW_IRQ		(0x1 << 4)
789*4882a593Smuzhiyun #define VBAT_LOW_ACT_MASK	(0x1 << 4)
790*4882a593Smuzhiyun 
791*4882a593Smuzhiyun #define BUCK_ILMIN_MASK		(7 << 0)
792*4882a593Smuzhiyun #define BOOST_ILMIN_MASK	(7 << 0)
793*4882a593Smuzhiyun #define BUCK1_RATE_MASK		(3 << 3)
794*4882a593Smuzhiyun #define BUCK2_RATE_MASK		(3 << 3)
795*4882a593Smuzhiyun #define MASK_ALL	0xff
796*4882a593Smuzhiyun 
797*4882a593Smuzhiyun #define BUCK_UV_ACT_MASK	0x0f
798*4882a593Smuzhiyun #define BUCK_UV_ACT_DISABLE	0
799*4882a593Smuzhiyun 
800*4882a593Smuzhiyun #define SWITCH2_EN	BIT(6)
801*4882a593Smuzhiyun #define SWITCH1_EN	BIT(5)
802*4882a593Smuzhiyun #define DEV_OFF_RST	BIT(3)
803*4882a593Smuzhiyun #define DEV_OFF		BIT(0)
804*4882a593Smuzhiyun #define RTC_STOP	BIT(0)
805*4882a593Smuzhiyun 
806*4882a593Smuzhiyun #define VB_LO_ACT		BIT(4)
807*4882a593Smuzhiyun #define VB_LO_SEL_3500MV	(7 << 0)
808*4882a593Smuzhiyun 
809*4882a593Smuzhiyun #define VOUT_LO_INT	BIT(0)
810*4882a593Smuzhiyun #define CLK32KOUT2_EN	BIT(0)
811*4882a593Smuzhiyun #define CLK32KOUT2_FUNC		(0 << 1)
812*4882a593Smuzhiyun #define CLK32KOUT2_FUNC_MASK	BIT(1)
813*4882a593Smuzhiyun 
814*4882a593Smuzhiyun #define TEMP105C			0x08
815*4882a593Smuzhiyun #define TEMP115C			0x0c
816*4882a593Smuzhiyun #define TEMP_HOTDIE_MSK			0x0c
817*4882a593Smuzhiyun #define SLP_SD_MSK			(0x3 << 2)
818*4882a593Smuzhiyun #define SHUTDOWN_FUN			(0x2 << 2)
819*4882a593Smuzhiyun #define SLEEP_FUN			(0x1 << 2)
820*4882a593Smuzhiyun #define RK8XX_ID_MSK			0xfff0
821*4882a593Smuzhiyun #define PWM_MODE_MSK			BIT(7)
822*4882a593Smuzhiyun #define FPWM_MODE			BIT(7)
823*4882a593Smuzhiyun #define AUTO_PWM_MODE			0
824*4882a593Smuzhiyun #define REGS_WMSK			0xf0
825*4882a593Smuzhiyun 
826*4882a593Smuzhiyun enum rk817_reg_id {
827*4882a593Smuzhiyun 	RK817_ID_DCDC1 = 0,
828*4882a593Smuzhiyun 	RK817_ID_DCDC2,
829*4882a593Smuzhiyun 	RK817_ID_DCDC3,
830*4882a593Smuzhiyun 	RK817_ID_DCDC4,
831*4882a593Smuzhiyun 	RK817_ID_LDO1,
832*4882a593Smuzhiyun 	RK817_ID_LDO2,
833*4882a593Smuzhiyun 	RK817_ID_LDO3,
834*4882a593Smuzhiyun 	RK817_ID_LDO4,
835*4882a593Smuzhiyun 	RK817_ID_LDO5,
836*4882a593Smuzhiyun 	RK817_ID_LDO6,
837*4882a593Smuzhiyun 	RK817_ID_LDO7,
838*4882a593Smuzhiyun 	RK817_ID_LDO8,
839*4882a593Smuzhiyun 	RK817_ID_LDO9,
840*4882a593Smuzhiyun 	RK817_ID_BOOST,
841*4882a593Smuzhiyun 	RK817_ID_BOOST_OTG_SW,
842*4882a593Smuzhiyun 	RK817_NUM_REGULATORS
843*4882a593Smuzhiyun };
844*4882a593Smuzhiyun 
845*4882a593Smuzhiyun enum rk809_reg_id {
846*4882a593Smuzhiyun 	RK809_ID_DCDC5 = RK817_ID_BOOST,
847*4882a593Smuzhiyun 	RK809_ID_SW1,
848*4882a593Smuzhiyun 	RK809_ID_SW2,
849*4882a593Smuzhiyun 	RK809_NUM_REGULATORS
850*4882a593Smuzhiyun };
851*4882a593Smuzhiyun 
852*4882a593Smuzhiyun #define RK817_SECONDS_REG		0x00
853*4882a593Smuzhiyun #define RK817_MINUTES_REG		0x01
854*4882a593Smuzhiyun #define RK817_HOURS_REG			0x02
855*4882a593Smuzhiyun #define RK817_DAYS_REG			0x03
856*4882a593Smuzhiyun #define RK817_MONTHS_REG		0x04
857*4882a593Smuzhiyun #define RK817_YEARS_REG			0x05
858*4882a593Smuzhiyun #define RK817_WEEKS_REG			0x06
859*4882a593Smuzhiyun #define RK817_ALARM_SECONDS_REG		0x07
860*4882a593Smuzhiyun #define RK817_ALARM_MINUTES_REG		0x08
861*4882a593Smuzhiyun #define RK817_ALARM_HOURS_REG		0x09
862*4882a593Smuzhiyun #define RK817_ALARM_DAYS_REG		0x0a
863*4882a593Smuzhiyun #define RK817_ALARM_MONTHS_REG		0x0b
864*4882a593Smuzhiyun #define RK817_ALARM_YEARS_REG		0x0c
865*4882a593Smuzhiyun #define RK817_RTC_CTRL_REG		0xd
866*4882a593Smuzhiyun #define RK817_RTC_STATUS_REG		0xe
867*4882a593Smuzhiyun #define RK817_RTC_INT_REG		0xf
868*4882a593Smuzhiyun #define RK817_RTC_COMP_LSB_REG		0x10
869*4882a593Smuzhiyun #define RK817_RTC_COMP_MSB_REG		0x11
870*4882a593Smuzhiyun #define RK817_ADC_CONFIG0		0x50
871*4882a593Smuzhiyun #define RK817_CURE_ADC_K0		0xb0
872*4882a593Smuzhiyun #define RK817_POWER_EN_SAVE0            0x99
873*4882a593Smuzhiyun #define RK817_POWER_EN_SAVE1            0xa4
874*4882a593Smuzhiyun 
875*4882a593Smuzhiyun #define RK817_POWER_EN_REG(i)		(0xb1 + (i))
876*4882a593Smuzhiyun #define RK817_POWER_SLP_EN_REG(i)	(0xb5 + (i))
877*4882a593Smuzhiyun 
878*4882a593Smuzhiyun #define RK817_POWER_CONFIG		(0xb9)
879*4882a593Smuzhiyun 
880*4882a593Smuzhiyun #define RK817_BUCK_CONFIG_REG(i)	(0xba + (i) * 3)
881*4882a593Smuzhiyun 
882*4882a593Smuzhiyun #define RK817_BUCK1_ON_VSEL_REG		0xBB
883*4882a593Smuzhiyun #define RK817_BUCK1_SLP_VSEL_REG	0xBC
884*4882a593Smuzhiyun 
885*4882a593Smuzhiyun #define RK817_BUCK2_CONFIG_REG		0xBD
886*4882a593Smuzhiyun #define RK817_BUCK2_ON_VSEL_REG		0xBE
887*4882a593Smuzhiyun #define RK817_BUCK2_SLP_VSEL_REG	0xBF
888*4882a593Smuzhiyun 
889*4882a593Smuzhiyun #define RK817_BUCK3_CONFIG_REG		0xC0
890*4882a593Smuzhiyun #define RK817_BUCK3_ON_VSEL_REG		0xC1
891*4882a593Smuzhiyun #define RK817_BUCK3_SLP_VSEL_REG	0xC2
892*4882a593Smuzhiyun 
893*4882a593Smuzhiyun #define RK817_BUCK4_CONFIG_REG		0xC3
894*4882a593Smuzhiyun #define RK817_BUCK4_ON_VSEL_REG		0xC4
895*4882a593Smuzhiyun #define RK817_BUCK4_SLP_VSEL_REG	0xC5
896*4882a593Smuzhiyun 
897*4882a593Smuzhiyun #define RK817_LDO_ON_VSEL_REG(idx)	(0xcc + (idx) * 2)
898*4882a593Smuzhiyun #define RK817_BOOST_OTG_CFG		(0xde)
899*4882a593Smuzhiyun 
900*4882a593Smuzhiyun #define RK817_CHRG_OUT			0xe4
901*4882a593Smuzhiyun #define RK817_CHRG_IN			0xe5
902*4882a593Smuzhiyun #define RK817_CHRG_STS			0xeb
903*4882a593Smuzhiyun #define RK817_ID_MSB			0xed
904*4882a593Smuzhiyun #define RK817_ID_LSB			0xee
905*4882a593Smuzhiyun 
906*4882a593Smuzhiyun #define RK817_SYS_STS			0xf0
907*4882a593Smuzhiyun #define RK817_SYS_CFG(i)		(0xf1 + (i))
908*4882a593Smuzhiyun 
909*4882a593Smuzhiyun #define RK817_ON_SOURCE_REG		0xf5
910*4882a593Smuzhiyun #define RK817_OFF_SOURCE_REG		0xf6
911*4882a593Smuzhiyun 
912*4882a593Smuzhiyun /* INTERRUPT REGISTER */
913*4882a593Smuzhiyun #define RK817_INT_STS_REG0		0xf8
914*4882a593Smuzhiyun #define RK817_INT_STS_MSK_REG0		0xf9
915*4882a593Smuzhiyun #define RK817_INT_STS_REG1		0xfa
916*4882a593Smuzhiyun #define RK817_INT_STS_MSK_REG1		0xfb
917*4882a593Smuzhiyun #define RK817_INT_STS_REG2		0xfc
918*4882a593Smuzhiyun #define RK817_INT_STS_MSK_REG2		0xfd
919*4882a593Smuzhiyun #define RK817_GPIO_INT_CFG		0xfe
920*4882a593Smuzhiyun 
921*4882a593Smuzhiyun /* IRQ Definitions */
922*4882a593Smuzhiyun #define RK817_IRQ_PWRON_FALL		0
923*4882a593Smuzhiyun #define RK817_IRQ_PWRON_RISE		1
924*4882a593Smuzhiyun #define RK817_IRQ_PWRON			2
925*4882a593Smuzhiyun #define RK817_IRQ_PWMON_LP		3
926*4882a593Smuzhiyun #define RK817_IRQ_HOTDIE		4
927*4882a593Smuzhiyun #define RK817_IRQ_RTC_ALARM		5
928*4882a593Smuzhiyun #define RK817_IRQ_RTC_PERIOD		6
929*4882a593Smuzhiyun #define RK817_IRQ_VB_LO			7
930*4882a593Smuzhiyun #define RK817_IRQ_PLUG_IN		8
931*4882a593Smuzhiyun #define RK817_IRQ_PLUG_OUT		9
932*4882a593Smuzhiyun #define RK817_IRQ_CHRG_TERM		10
933*4882a593Smuzhiyun #define RK817_IRQ_CHRG_TIME		11
934*4882a593Smuzhiyun #define RK817_IRQ_CHRG_TS		12
935*4882a593Smuzhiyun #define RK817_IRQ_USB_OV		13
936*4882a593Smuzhiyun #define RK817_IRQ_CHRG_IN_CLMP		14
937*4882a593Smuzhiyun #define RK817_IRQ_BAT_DIS_ILIM		15
938*4882a593Smuzhiyun #define RK817_IRQ_GATE_GPIO		16
939*4882a593Smuzhiyun #define RK817_IRQ_TS_GPIO		17
940*4882a593Smuzhiyun #define RK817_IRQ_CODEC_PD		18
941*4882a593Smuzhiyun #define RK817_IRQ_CODEC_PO		19
942*4882a593Smuzhiyun #define RK817_IRQ_CLASSD_MUTE_DONE	20
943*4882a593Smuzhiyun #define RK817_IRQ_CLASSD_OCP		21
944*4882a593Smuzhiyun #define RK817_IRQ_BAT_OVP               22
945*4882a593Smuzhiyun #define RK817_IRQ_CHRG_BAT_HI		23
946*4882a593Smuzhiyun #define RK817_IRQ_END			(RK817_IRQ_CHRG_BAT_HI + 1)
947*4882a593Smuzhiyun 
948*4882a593Smuzhiyun /*
949*4882a593Smuzhiyun  * rtc_ctrl 0xd
950*4882a593Smuzhiyun  * same as 808, except bit4
951*4882a593Smuzhiyun  */
952*4882a593Smuzhiyun #define RK817_RTC_CTRL_RSV4		BIT(4)
953*4882a593Smuzhiyun 
954*4882a593Smuzhiyun /* power config 0xb9 */
955*4882a593Smuzhiyun #define RK817_BUCK3_FB_RES_MSK		BIT(6)
956*4882a593Smuzhiyun #define RK817_BUCK3_FB_RES_INTER	BIT(6)
957*4882a593Smuzhiyun #define RK817_BUCK3_FB_RES_EXT		0
958*4882a593Smuzhiyun 
959*4882a593Smuzhiyun /* buck config 0xba */
960*4882a593Smuzhiyun #define RK817_RAMP_RATE_OFFSET		6
961*4882a593Smuzhiyun #define RK817_RAMP_RATE_MASK		(0x3 << RK817_RAMP_RATE_OFFSET)
962*4882a593Smuzhiyun #define RK817_RAMP_RATE_3MV_PER_US	(0x0 << RK817_RAMP_RATE_OFFSET)
963*4882a593Smuzhiyun #define RK817_RAMP_RATE_6_3MV_PER_US	(0x1 << RK817_RAMP_RATE_OFFSET)
964*4882a593Smuzhiyun #define RK817_RAMP_RATE_12_5MV_PER_US	(0x2 << RK817_RAMP_RATE_OFFSET)
965*4882a593Smuzhiyun #define RK817_RAMP_RATE_25MV_PER_US	(0x3 << RK817_RAMP_RATE_OFFSET)
966*4882a593Smuzhiyun 
967*4882a593Smuzhiyun /* sys_cfg1 0xf2 */
968*4882a593Smuzhiyun #define RK817_HOTDIE_TEMP_MSK		(0x3 << 4)
969*4882a593Smuzhiyun #define RK817_HOTDIE_85			(0x0 << 4)
970*4882a593Smuzhiyun #define RK817_HOTDIE_95			(0x1 << 4)
971*4882a593Smuzhiyun #define RK817_HOTDIE_105		(0x2 << 4)
972*4882a593Smuzhiyun #define RK817_HOTDIE_115		(0x3 << 4)
973*4882a593Smuzhiyun 
974*4882a593Smuzhiyun #define RK817_TSD_TEMP_MSK		BIT(6)
975*4882a593Smuzhiyun #define RK817_TSD_140			0
976*4882a593Smuzhiyun #define RK817_TSD_160			BIT(6)
977*4882a593Smuzhiyun 
978*4882a593Smuzhiyun #define RK817_CLK32KOUT2_EN		BIT(7)
979*4882a593Smuzhiyun 
980*4882a593Smuzhiyun /* sys_cfg3 0xf4 */
981*4882a593Smuzhiyun #define RK817_SLPPIN_FUNC_MSK		(0x3 << 3)
982*4882a593Smuzhiyun #define SLPPIN_NULL_FUN			(0x0 << 3)
983*4882a593Smuzhiyun #define SLPPIN_SLP_FUN			(0x1 << 3)
984*4882a593Smuzhiyun #define SLPPIN_DN_FUN			(0x2 << 3)
985*4882a593Smuzhiyun #define SLPPIN_RST_FUN			(0x3 << 3)
986*4882a593Smuzhiyun 
987*4882a593Smuzhiyun #define RK817_RST_FUNC_MSK		(0x3 << 6)
988*4882a593Smuzhiyun #define RK817_RST_FUNC_SFT		(6)
989*4882a593Smuzhiyun #define RK817_RST_FUNC_CNT		(3)
990*4882a593Smuzhiyun #define RK817_RST_FUNC_DEV		(0) /* reset the dev */
991*4882a593Smuzhiyun #define RK817_RST_FUNC_REG		(0x1 << 6) /* reset the reg only */
992*4882a593Smuzhiyun 
993*4882a593Smuzhiyun #define RK817_SLPPOL_MSK		BIT(5)
994*4882a593Smuzhiyun #define RK817_SLPPOL_H			BIT(5)
995*4882a593Smuzhiyun #define RK817_SLPPOL_L			(0)
996*4882a593Smuzhiyun 
997*4882a593Smuzhiyun /* gpio&int 0xfe */
998*4882a593Smuzhiyun #define RK817_INT_POL_MSK		BIT(1)
999*4882a593Smuzhiyun #define RK817_INT_POL_H			BIT(1)
1000*4882a593Smuzhiyun #define RK817_INT_POL_L			0
1001*4882a593Smuzhiyun #define RK809_BUCK5_CONFIG(i)		(RK817_BOOST_OTG_CFG + (i) * 1)
1002*4882a593Smuzhiyun 
1003*4882a593Smuzhiyun enum {
1004*4882a593Smuzhiyun 	BUCK_ILMIN_50MA,
1005*4882a593Smuzhiyun 	BUCK_ILMIN_100MA,
1006*4882a593Smuzhiyun 	BUCK_ILMIN_150MA,
1007*4882a593Smuzhiyun 	BUCK_ILMIN_200MA,
1008*4882a593Smuzhiyun 	BUCK_ILMIN_250MA,
1009*4882a593Smuzhiyun 	BUCK_ILMIN_300MA,
1010*4882a593Smuzhiyun 	BUCK_ILMIN_350MA,
1011*4882a593Smuzhiyun 	BUCK_ILMIN_400MA,
1012*4882a593Smuzhiyun };
1013*4882a593Smuzhiyun 
1014*4882a593Smuzhiyun enum {
1015*4882a593Smuzhiyun 	BOOST_ILMIN_75MA,
1016*4882a593Smuzhiyun 	BOOST_ILMIN_100MA,
1017*4882a593Smuzhiyun 	BOOST_ILMIN_125MA,
1018*4882a593Smuzhiyun 	BOOST_ILMIN_150MA,
1019*4882a593Smuzhiyun 	BOOST_ILMIN_175MA,
1020*4882a593Smuzhiyun 	BOOST_ILMIN_200MA,
1021*4882a593Smuzhiyun 	BOOST_ILMIN_225MA,
1022*4882a593Smuzhiyun 	BOOST_ILMIN_250MA,
1023*4882a593Smuzhiyun };
1024*4882a593Smuzhiyun 
1025*4882a593Smuzhiyun enum {
1026*4882a593Smuzhiyun 	RK805_BUCK1_2_ILMAX_2500MA,
1027*4882a593Smuzhiyun 	RK805_BUCK1_2_ILMAX_3000MA,
1028*4882a593Smuzhiyun 	RK805_BUCK1_2_ILMAX_3500MA,
1029*4882a593Smuzhiyun 	RK805_BUCK1_2_ILMAX_4000MA,
1030*4882a593Smuzhiyun };
1031*4882a593Smuzhiyun 
1032*4882a593Smuzhiyun enum {
1033*4882a593Smuzhiyun 	RK805_BUCK3_ILMAX_1500MA,
1034*4882a593Smuzhiyun 	RK805_BUCK3_ILMAX_2000MA,
1035*4882a593Smuzhiyun 	RK805_BUCK3_ILMAX_2500MA,
1036*4882a593Smuzhiyun 	RK805_BUCK3_ILMAX_3000MA,
1037*4882a593Smuzhiyun };
1038*4882a593Smuzhiyun 
1039*4882a593Smuzhiyun enum {
1040*4882a593Smuzhiyun 	RK805_BUCK4_ILMAX_2000MA,
1041*4882a593Smuzhiyun 	RK805_BUCK4_ILMAX_2500MA,
1042*4882a593Smuzhiyun 	RK805_BUCK4_ILMAX_3000MA,
1043*4882a593Smuzhiyun 	RK805_BUCK4_ILMAX_3500MA,
1044*4882a593Smuzhiyun };
1045*4882a593Smuzhiyun 
1046*4882a593Smuzhiyun enum {
1047*4882a593Smuzhiyun 	RK805_ID = 0x8050,
1048*4882a593Smuzhiyun 	RK808_ID = 0x0000,
1049*4882a593Smuzhiyun 	RK809_ID = 0x8090,
1050*4882a593Smuzhiyun 	RK816_ID = 0x8160,
1051*4882a593Smuzhiyun 	RK817_ID = 0x8170,
1052*4882a593Smuzhiyun 	RK818_ID = 0x8180,
1053*4882a593Smuzhiyun };
1054*4882a593Smuzhiyun 
1055*4882a593Smuzhiyun struct rk808_pin_info {
1056*4882a593Smuzhiyun 	struct pinctrl *p;
1057*4882a593Smuzhiyun 	struct pinctrl_state *reset;
1058*4882a593Smuzhiyun 	struct pinctrl_state *power_off;
1059*4882a593Smuzhiyun 	struct pinctrl_state *sleep;
1060*4882a593Smuzhiyun };
1061*4882a593Smuzhiyun 
1062*4882a593Smuzhiyun struct rk808 {
1063*4882a593Smuzhiyun 	struct i2c_client		*i2c;
1064*4882a593Smuzhiyun 	struct regmap_irq_chip_data	*irq_data;
1065*4882a593Smuzhiyun 	struct regmap_irq_chip_data	*battery_irq_data;
1066*4882a593Smuzhiyun 	struct regmap			*regmap;
1067*4882a593Smuzhiyun 	long				variant;
1068*4882a593Smuzhiyun 	const struct regmap_config	*regmap_cfg;
1069*4882a593Smuzhiyun 	const struct regmap_irq_chip	*regmap_irq_chip;
1070*4882a593Smuzhiyun 	void				(*pm_pwroff_prep_fn)(void);
1071*4882a593Smuzhiyun 	struct rk808_pin_info *pins;
1072*4882a593Smuzhiyun };
1073*4882a593Smuzhiyun #endif /* __LINUX_REGULATOR_RK808_H */
1074