xref: /rk3399_rockchip-uboot/include/power/rk8xx_pmic.h (revision 063fcc919b3240627577bda8d106e539c8b167d6)
1453c5a92SJacob Chen /*
2453c5a92SJacob Chen  * Copyright (C) 2015 Google, Inc
3453c5a92SJacob Chen  * Written by Simon Glass <sjg@chromium.org>
4453c5a92SJacob Chen  *
5453c5a92SJacob Chen  * SPDX-License-Identifier:	GPL-2.0+
6453c5a92SJacob Chen  */
7453c5a92SJacob Chen 
8453c5a92SJacob Chen #ifndef _PMIC_RK8XX_H_
9453c5a92SJacob Chen #define _PMIC_RK8XX_H_
10453c5a92SJacob Chen 
11453c5a92SJacob Chen enum {
12453c5a92SJacob Chen 	REG_SECONDS			= 0x00,
13453c5a92SJacob Chen 	REG_MINUTES,
14453c5a92SJacob Chen 	REG_HOURS,
15453c5a92SJacob Chen 	REG_DAYS,
16453c5a92SJacob Chen 	REG_MONTHS,
17453c5a92SJacob Chen 	REG_YEARS,
18453c5a92SJacob Chen 	REG_WEEKS,
19453c5a92SJacob Chen 	REG_ALARM_SECONDS,
20453c5a92SJacob Chen 	REG_ALARM_MINUTES,
21453c5a92SJacob Chen 	REG_ALARM_HOURS,
22453c5a92SJacob Chen 	REG_ALARM_DAYS,
23453c5a92SJacob Chen 	REG_ALARM_MONTHS,
24453c5a92SJacob Chen 	REG_ALARM_YEARS,
25453c5a92SJacob Chen 
26453c5a92SJacob Chen 	REG_RTC_CTRL			= 0x10,
27453c5a92SJacob Chen 	REG_RTC_STATUS,
28453c5a92SJacob Chen 	REG_RTC_INT,
29453c5a92SJacob Chen 	REG_RTC_COMP_LSB,
30453c5a92SJacob Chen 	REG_RTC_COMP_MSB,
31453c5a92SJacob Chen 
32453c5a92SJacob Chen 	ID_MSB				= 0x17,
33453c5a92SJacob Chen 	ID_LSB,
34453c5a92SJacob Chen 
35453c5a92SJacob Chen 	REG_CLK32OUT			= 0x20,
36453c5a92SJacob Chen 	REG_VB_MON,
37453c5a92SJacob Chen 	REG_THERMAL,
38453c5a92SJacob Chen 	REG_DCDC_EN,
39453c5a92SJacob Chen 	REG_LDO_EN,
40453c5a92SJacob Chen 	REG_SLEEP_SET_OFF1,
41453c5a92SJacob Chen 	REG_SLEEP_SET_OFF2,
42453c5a92SJacob Chen 	REG_DCDC_UV_STS,
43453c5a92SJacob Chen 	REG_DCDC_UV_ACT,
44453c5a92SJacob Chen 	REG_LDO_UV_STS,
45453c5a92SJacob Chen 	REG_LDO_UV_ACT,
46453c5a92SJacob Chen 	REG_DCDC_PG,
47453c5a92SJacob Chen 	REG_LDO_PG,
48453c5a92SJacob Chen 	REG_VOUT_MON_TDB,
49453c5a92SJacob Chen 	REG_BUCK1_CONFIG,
50453c5a92SJacob Chen 	REG_BUCK1_ON_VSEL,
51453c5a92SJacob Chen 	REG_BUCK1_SLP_VSEL,
52453c5a92SJacob Chen 	REG_BUCK1_DVS_VSEL,
53453c5a92SJacob Chen 	REG_BUCK2_CONFIG,
54453c5a92SJacob Chen 	REG_BUCK2_ON_VSEL,
55453c5a92SJacob Chen 	REG_BUCK2_SLP_VSEL,
56453c5a92SJacob Chen 	REG_BUCK2_DVS_VSEL,
57453c5a92SJacob Chen 	REG_BUCK3_CONFIG,
58453c5a92SJacob Chen 	REG_BUCK4_CONFIG,
59453c5a92SJacob Chen 	REG_BUCK4_ON_VSEL,
60453c5a92SJacob Chen 	REG_BUCK4_SLP_VSEL,
61453c5a92SJacob Chen 	REG_BOOST_CONFIG_REG,
62453c5a92SJacob Chen 	REG_LDO1_ON_VSEL,
63453c5a92SJacob Chen 	REG_LDO1_SLP_VSEL,
64453c5a92SJacob Chen 	REG_LDO2_ON_VSEL,
65453c5a92SJacob Chen 	REG_LDO2_SLP_VSEL,
66453c5a92SJacob Chen 	REG_LDO3_ON_VSEL,
67453c5a92SJacob Chen 	REG_LDO3_SLP_VSEL,
68453c5a92SJacob Chen 	REG_LDO4_ON_VSEL,
69453c5a92SJacob Chen 	REG_LDO4_SLP_VSEL,
70453c5a92SJacob Chen 	REG_LDO5_ON_VSEL,
71453c5a92SJacob Chen 	REG_LDO5_SLP_VSEL,
72453c5a92SJacob Chen 	REG_LDO6_ON_VSEL,
73453c5a92SJacob Chen 	REG_LDO6_SLP_VSEL,
74453c5a92SJacob Chen 	REG_LDO7_ON_VSEL,
75453c5a92SJacob Chen 	REG_LDO7_SLP_VSEL,
76453c5a92SJacob Chen 	REG_LDO8_ON_VSEL,
77453c5a92SJacob Chen 	REG_LDO8_SLP_VSEL,
78453c5a92SJacob Chen 	REG_DEVCTRL,
79453c5a92SJacob Chen 	REG_INT_STS1,
80453c5a92SJacob Chen 	REG_INT_STS_MSK1,
81453c5a92SJacob Chen 	REG_INT_STS2,
82453c5a92SJacob Chen 	REG_INT_STS_MSK2,
83453c5a92SJacob Chen 	REG_IO_POL,
84453c5a92SJacob Chen 	REG_OTP_VDD_EN,
85453c5a92SJacob Chen 	REG_H5V_EN,
86453c5a92SJacob Chen 	REG_SLEEP_SET_OFF,
87453c5a92SJacob Chen 	REG_BOOST_LDO9_ON_VSEL,
88453c5a92SJacob Chen 	REG_BOOST_LDO9_SLP_VSEL,
89453c5a92SJacob Chen 	REG_BOOST_CTRL,
90453c5a92SJacob Chen 
91453c5a92SJacob Chen 	/* Not sure what this does */
92453c5a92SJacob Chen 	REG_DCDC_ILMAX			= 0x90,
93453c5a92SJacob Chen 	REG_CHRG_COMP			= 0x9a,
94453c5a92SJacob Chen 	REG_SUP_STS			= 0xa0,
95453c5a92SJacob Chen 	REG_USB_CTRL,
96453c5a92SJacob Chen 	REG1_CHRG_CTRL,
97453c5a92SJacob Chen 	REG2_CHRG_CTRL,
98453c5a92SJacob Chen 	REG3_CHRG_CTRL,
99453c5a92SJacob Chen 	REG_BAT_CTRL,
100453c5a92SJacob Chen 	REG_BAT_HTS_TS1,
101453c5a92SJacob Chen 	REG_BAT_LTS_TS1,
102453c5a92SJacob Chen 	REG_BAT_HTS_TS2,
103453c5a92SJacob Chen 	REG_BAT_LTS_TS2,
104453c5a92SJacob Chen 	REG_TS_CTRL,
105453c5a92SJacob Chen 	REG_ADC_CTRL,
106453c5a92SJacob Chen 	REG_ON_SOURCE,
107453c5a92SJacob Chen 	REG_OFF_SOURCE,
108453c5a92SJacob Chen 	REG_GGCON,
109453c5a92SJacob Chen 	REG_GGSTS,
110453c5a92SJacob Chen 	REG_FRAME_SMP_INTERV,
111453c5a92SJacob Chen 	REG_AUTO_SLP_CUR_THR,
112453c5a92SJacob Chen 	REG3_GASCNT_CAL,
113453c5a92SJacob Chen 	REG2_GASCNT_CAL,
114453c5a92SJacob Chen 	REG1_GASCNT_CAL,
115453c5a92SJacob Chen 	REG0_GASCNT_CAL,
116453c5a92SJacob Chen 	REG3_GASCNT,
117453c5a92SJacob Chen 	REG2_GASCNT,
118453c5a92SJacob Chen 	REG1_GASCNT,
119453c5a92SJacob Chen 	REG0_GASCNT,
120453c5a92SJacob Chen 	REGH_BAT_CUR_AVG,
121453c5a92SJacob Chen 	REGL_BAT_CUR_AVG,
122453c5a92SJacob Chen 	REGH_TS1_ADC,
123453c5a92SJacob Chen 	REGL_TS1_ADC,
124453c5a92SJacob Chen 	REGH_TS2_ADC,
125453c5a92SJacob Chen 	REGL_TS2_ADC,
126453c5a92SJacob Chen 	REGH_BAT_OCV,
127453c5a92SJacob Chen 	REGL_BAT_OCV,
128453c5a92SJacob Chen 	REGH_BAT_VOL,
129453c5a92SJacob Chen 	REGL_BAT_VOL,
130453c5a92SJacob Chen 	REGH_RELAX_ENTRY_THRES,
131453c5a92SJacob Chen 	REGL_RELAX_ENTRY_THRES,
132453c5a92SJacob Chen 	REGH_RELAX_EXIT_THRES,
133453c5a92SJacob Chen 	REGL_RELAX_EXIT_THRES,
134453c5a92SJacob Chen 	REGH_RELAX_VOL1,
135453c5a92SJacob Chen 	REGL_RELAX_VOL1,
136453c5a92SJacob Chen 	REGH_RELAX_VOL2,
137453c5a92SJacob Chen 	REGL_RELAX_VOL2,
138453c5a92SJacob Chen 	REGH_BAT_CUR_R_CALC,
139453c5a92SJacob Chen 	REGL_BAT_CUR_R_CALC,
140453c5a92SJacob Chen 	REGH_BAT_VOL_R_CALC,
141453c5a92SJacob Chen 	REGL_BAT_VOL_R_CALC,
142453c5a92SJacob Chen 	REGH_CAL_OFFSET,
143453c5a92SJacob Chen 	REGL_CAL_OFFSET,
144453c5a92SJacob Chen 	REG_NON_ACT_TIMER_CNT,
145453c5a92SJacob Chen 	REGH_VCALIB0,
146453c5a92SJacob Chen 	REGL_VCALIB0,
147453c5a92SJacob Chen 	REGH_VCALIB1,
148453c5a92SJacob Chen 	REGL_VCALIB1,
149453c5a92SJacob Chen 	REGH_IOFFSET,
150453c5a92SJacob Chen 	REGL_IOFFSET,
151453c5a92SJacob Chen 	REG_SOC,
152453c5a92SJacob Chen 	REG3_REMAIN_CAP,
153453c5a92SJacob Chen 	REG2_REMAIN_CAP,
154453c5a92SJacob Chen 	REG1_REMAIN_CAP,
155453c5a92SJacob Chen 	REG0_REMAIN_CAP,
156453c5a92SJacob Chen 	REG_UPDAT_LEVE,
157453c5a92SJacob Chen 	REG3_NEW_FCC,
158453c5a92SJacob Chen 	REG2_NEW_FCC,
159453c5a92SJacob Chen 	REG1_NEW_FCC,
160453c5a92SJacob Chen 	REG0_NEW_FCC,
161453c5a92SJacob Chen 	REG_NON_ACT_TIMER_CNT_SAVE,
162453c5a92SJacob Chen 	REG_OCV_VOL_VALID,
163453c5a92SJacob Chen 	REG_REBOOT_CNT,
164453c5a92SJacob Chen 	REG_POFFSET,
165453c5a92SJacob Chen 	REG_MISC_MARK,
166453c5a92SJacob Chen 	REG_HALT_CNT,
167453c5a92SJacob Chen 	REGH_CALC_REST,
168453c5a92SJacob Chen 	REGL_CALC_REST,
169453c5a92SJacob Chen 	SAVE_DATA19,
170453c5a92SJacob Chen 	RK808_NUM_OF_REGS,
171453c5a92SJacob Chen };
172453c5a92SJacob Chen 
173453c5a92SJacob Chen enum {
1747f18d96cSJoseph Chen 	RK817_REG_SYS_CFG3 = 0xf4,
1757f18d96cSJoseph Chen };
1767f18d96cSJoseph Chen 
1777f18d96cSJoseph Chen enum {
1785e1bceeaSElaine Zhang 	RK816_REG_DCDC_EN1 = 0x23,
1795e1bceeaSElaine Zhang 	RK816_REG_DCDC_EN2,
180e917b032SJoseph Chen 	RK816_REG_DCDC_SLP_EN,
181e917b032SJoseph Chen 	RK816_REG_LDO_SLP_EN,
1825e1bceeaSElaine Zhang 	RK816_REG_LDO_EN1 = 0x27,
1835e1bceeaSElaine Zhang 	RK816_REG_LDO_EN2,
1845e1bceeaSElaine Zhang };
1855e1bceeaSElaine Zhang 
1865e1bceeaSElaine Zhang enum {
1874b6f5dc9SElaine Zhang 	RK805_ID = 0x8050,
1889361c683Sshengfei Xu 	RK806_ID = 0x8060,
189453c5a92SJacob Chen 	RK808_ID = 0x0000,
1901b6b965cSJoseph Chen 	RK809_ID = 0x8090,
1915e1bceeaSElaine Zhang 	RK816_ID = 0x8160,
1927f18d96cSJoseph Chen 	RK817_ID = 0x8170,
193453c5a92SJacob Chen 	RK818_ID = 0x8180,
194453c5a92SJacob Chen };
195453c5a92SJacob Chen 
1969e9e0e07SShengfei Xu enum {
1979e9e0e07SShengfei Xu 	RK817_POWER_EN0 = 0xb1,
1989e9e0e07SShengfei Xu 	RK817_POWER_EN1,
1999e9e0e07SShengfei Xu 	RK817_POWER_EN2,
2009e9e0e07SShengfei Xu 	RK817_POWER_EN3,
2019e9e0e07SShengfei Xu };
202f8797432SShengfei Xu 
203f8797432SShengfei Xu #define RK8xx_RST_MODE0		0x00
204f8797432SShengfei Xu #define RK8xx_RST_MODE1		0x01
205f8797432SShengfei Xu #define RK8xx_RST_MODE2		0x02
206f8797432SShengfei Xu #define RK8xx_RESET_FUN_CLR	0x3f
207f8797432SShengfei Xu 
2089e9e0e07SShengfei Xu #define RK817_POWER_EN_SAVE0	0x99
2099e9e0e07SShengfei Xu #define RK817_POWER_EN_SAVE1	0xa4
2109e9e0e07SShengfei Xu 
2117f18d96cSJoseph Chen #define RK817_ID_MSB	0xed
2127f18d96cSJoseph Chen #define RK817_ID_LSB	0xee
213453c5a92SJacob Chen #define RK8XX_ID_MSK	0xfff0
214453c5a92SJacob Chen 
215d76e1bedSshengfei Xu #define RK817_PMIC_CHRG_TERM	0xe6
216465b1b6cSshengfei Xu #define RK817_PMIC_SYS_CFG1	0xf1
2171c223666SJoseph Chen #define RK817_PMIC_SYS_CFG3	0xf4
2181c223666SJoseph Chen #define RK817_GPIO_INT_CFG	0xfe
2191c223666SJoseph Chen 
2207623c170SJoseph Chen #define RK8XX_ON_SOURCE		0xae
2217623c170SJoseph Chen #define RK8XX_OFF_SOURCE	0xaf
222ba76dc00SShengfei Xu #define RK817_BUCK4_CMIN	0xc6
2237623c170SJoseph Chen #define RK817_ON_SOURCE		0xf5
2247623c170SJoseph Chen #define RK817_OFF_SOURCE	0xf6
2253ec172baSJoseph Chen #define RK817_NUM_OF_REGS	0xff
2267623c170SJoseph Chen 
22700d11ef2SShunqing Chen #define RK8XX_DEVCTRL_REG	0x4b
22800d11ef2SShunqing Chen #define RK817_PWRON_KEY		0xf7
22900d11ef2SShunqing Chen #define RK8XX_LP_ACTION_MSK	BIT(6)
23000d11ef2SShunqing Chen #define RK8XX_LP_OFF		(0 << 6)
23100d11ef2SShunqing Chen #define RK8XX_LP_RESTART	(1 << 6)
23200d11ef2SShunqing Chen #define RK8XX_LP_OFF_MSK	BIT(4) | BIT(5)
23300d11ef2SShunqing Chen #define RK8XX_LP_TIME_6S	(0 << 4)
23400d11ef2SShunqing Chen #define RK8XX_LP_TIME_8S	(1 << 4)
23500d11ef2SShunqing Chen #define RK8XX_LP_TIME_10S	(2 << 4)
23600d11ef2SShunqing Chen #define RK8XX_LP_TIME_12S	(3 << 4)
23700d11ef2SShunqing Chen 
238ded32713SJoseph Chen /* IRQ definitions */
239ded32713SJoseph Chen #define RK8XX_IRQ_PWRON_FALL		0
240ded32713SJoseph Chen #define RK8XX_IRQ_PWRON_RISE		1
241ded32713SJoseph Chen #define RK8XX_IRQ_PLUG_OUT		2
242ded32713SJoseph Chen #define RK8XX_IRQ_PLUG_IN		3
243ded32713SJoseph Chen #define RK8XX_IRQ_CHG_OK		4
244*063fcc91SShengfei Xu #define RK8XX_IRQ_RTC_ALARM		5
245ded32713SJoseph Chen 
246ded32713SJoseph Chen #define RK808_INT_STS_REG1		0x4c
247ded32713SJoseph Chen #define RK808_INT_MSK_REG1		0x4d
248*063fcc91SShengfei Xu #define RK808_IRQ_VOUT_LOW_MSK		BIT(0)
249ded32713SJoseph Chen #define RK808_IRQ_PLUG_OUT_MSK		BIT(1)
250*063fcc91SShengfei Xu #define RK808_IRQ_RTC_ALARM_MSK		BIT(5)
251*063fcc91SShengfei Xu #define RK808_IRQ_RTC_PERIOD_MSK	BIT(6)
252ded32713SJoseph Chen 
253ded32713SJoseph Chen #define RK805_INT_STS_REG		0x4c
254ded32713SJoseph Chen #define RK805_INT_MSK_REG		0x4d
255ded32713SJoseph Chen #define RK805_IRQ_PWRON_FALL_MSK	BIT(7)
256ded32713SJoseph Chen #define RK805_IRQ_PWRON_RISE_MSK	BIT(0)
257*063fcc91SShengfei Xu #define RK805_IRQ_RTC_ALARM_MSK		BIT(5)
258*063fcc91SShengfei Xu #define RK805_IRQ_RTC_PERIOD_MSK	BIT(6)
259ded32713SJoseph Chen 
2601eb4ab17SShengfei Xu enum rk806_reg_id {
2611eb4ab17SShengfei Xu 	RK806_ID_DCDC1 = 0,
2621eb4ab17SShengfei Xu 	RK806_ID_DCDC2,
2631eb4ab17SShengfei Xu 	RK806_ID_DCDC3,
2641eb4ab17SShengfei Xu 	RK806_ID_DCDC4,
2651eb4ab17SShengfei Xu 	RK806_ID_DCDC5,
2661eb4ab17SShengfei Xu 	RK806_ID_DCDC6,
2671eb4ab17SShengfei Xu 	RK806_ID_DCDC7,
2681eb4ab17SShengfei Xu 	RK806_ID_DCDC8,
2691eb4ab17SShengfei Xu 	RK806_ID_DCDC9,
2701eb4ab17SShengfei Xu 	RK806_ID_DCDC10,
2711eb4ab17SShengfei Xu 
2721eb4ab17SShengfei Xu 	RK806_ID_NLDO1,
2731eb4ab17SShengfei Xu 	RK806_ID_NLDO2,
2741eb4ab17SShengfei Xu 	RK806_ID_NLDO3,
2751eb4ab17SShengfei Xu 	RK806_ID_NLDO4,
2761eb4ab17SShengfei Xu 	RK806_ID_NLDO5,
2771eb4ab17SShengfei Xu 
2781eb4ab17SShengfei Xu 	RK806_ID_PLDO1,
2791eb4ab17SShengfei Xu 	RK806_ID_PLDO2,
2801eb4ab17SShengfei Xu 	RK806_ID_PLDO3,
2811eb4ab17SShengfei Xu 	RK806_ID_PLDO4,
2821eb4ab17SShengfei Xu 	RK806_ID_PLDO5,
2831eb4ab17SShengfei Xu 	RK806_ID_PLDO6,
2841eb4ab17SShengfei Xu 	RK806_ID_END,
2851eb4ab17SShengfei Xu };
2861eb4ab17SShengfei Xu 
287ef9c5d10Sshengfei Xu #define RK806_CHIP_NAME			0x5A
288ef9c5d10Sshengfei Xu #define RK806_CHIP_VER			0x5B
289ef9c5d10Sshengfei Xu #define RK806_HW_VER			0x21
290ef9c5d10Sshengfei Xu #define HW_DUAL_PMIC			0x28
291ef9c5d10Sshengfei Xu #define HW_SINGLE_PMIC			0xe8
292ef9c5d10Sshengfei Xu 
293ef9c5d10Sshengfei Xu #define RK806_CMD_READ			0
294ef9c5d10Sshengfei Xu #define RK806_CMD_WRITE			BIT(7)
295ef9c5d10Sshengfei Xu #define RK806_CMD_CRC_EN		BIT(6)
296ef9c5d10Sshengfei Xu #define RK806_CMD_CRC_DIS		0
297ef9c5d10Sshengfei Xu #define RK806_CMD_LEN_MSK		0x0f
298ef9c5d10Sshengfei Xu #define RK806_REG_H			0x00
299ef9c5d10Sshengfei Xu 
300ef9c5d10Sshengfei Xu #define RK806_SYS_CFG1			0x5f
301ef9c5d10Sshengfei Xu #define RK806_PWRCTRL_CONFIG0		0x62
302ef9c5d10Sshengfei Xu #define RK806_PWRCTRL_CONFIG1		0x63
303ef9c5d10Sshengfei Xu #define RK806_VSEL_CTR_SEL0		0x64
304ef9c5d10Sshengfei Xu #define RK806_DVS_CTR_SEL4		0x6e
3054e54e501Sshengfei Xu #define RK806_PWRCTRL_GPIO		0x71
306ef9c5d10Sshengfei Xu #define RK806_SYS_CFG3			0x72
307ef9c5d10Sshengfei Xu #define RK806_PWRON_KEY			0x76
308ef9c5d10Sshengfei Xu #define RK806_INT_STS0			0x77
309ef9c5d10Sshengfei Xu #define RK806_INT_MSK0			0x78
310ef9c5d10Sshengfei Xu #define RK806_INT_STS1			0x79
311ef9c5d10Sshengfei Xu #define RK806_INT_MSK1			0x7A
312ef9c5d10Sshengfei Xu #define RK806_GPIO_INT_CONFIG		0x7B
313ef9c5d10Sshengfei Xu #define RK806_ON_SOURCE			0x74
314ef9c5d10Sshengfei Xu #define RK806_OFF_SOURCE		0x75
315f335f73cSshengfei Xu #define RK806_BUCK_RSERVE_REG3		0xfd
316ef9c5d10Sshengfei Xu 
3171eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG0		0xB2
3181eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG1		0xB3
3191eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG2		0xB4
3201eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG3		0xB5
3211eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG4		0xB6
3221eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG5		0xB7
3231eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG6		0xB8
3241eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG7		0xB9
3251eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG8		0xBA
3261eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG9		0xBB
3271eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG10	0xBC
3281eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG11	0xBD
3291eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG12	0xBE
3301eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG13	0xBF
3311eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG14	0xC0
3321eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG15	0xC1
3331eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG16	0xC2
3341eb4ab17SShengfei Xu 
3354e54e501Sshengfei Xu #define RK806_PWRCTRL1			0x01
3364e54e501Sshengfei Xu #define RK806_PWRCTRL2			0x02
3374e54e501Sshengfei Xu #define RK806_PWRCTRL3			0x03
3384e54e501Sshengfei Xu 
3394e54e501Sshengfei Xu #define RK806_PWRCTR_GPIO_FUN		0x05
3404e54e501Sshengfei Xu #define RK806_PWRCTR_MSK_FUN		0x07
3414e54e501Sshengfei Xu #define RK806_PWRCTR_OUTPUT_MSK		0x11
3424e54e501Sshengfei Xu #define RK806_PWRCTR_OUTPUT0		0x01
3434e54e501Sshengfei Xu #define RK806_PWRCTR_OUTPUT1		0x11
3444e54e501Sshengfei Xu 
345ece79c0fSshengfei Xu #define RK806_INT_POL_HIGH		BIT(1)
346ef9c5d10Sshengfei Xu #define RK806_IRQ_PWRON_FALL_MSK	BIT(0)
347ef9c5d10Sshengfei Xu #define RK806_IRQ_PWRON_RISE_MSK	BIT(1)
348ef9c5d10Sshengfei Xu #define RK806_DEV_OFF			BIT(0)
349ef9c5d10Sshengfei Xu #define RK806_RST_MODE1			0x01
350ef9c5d10Sshengfei Xu #define RK806_RST_MODE2			0x02
351ef9c5d10Sshengfei Xu #define RK806_PWRCTRL_FUN_MSK		0x88
352ef9c5d10Sshengfei Xu #define RK806_VSEL_CTRL_MSK		0xcc
353ef9c5d10Sshengfei Xu #define RK806_VSEL_PWRCTRL1		0x11
354ef9c5d10Sshengfei Xu #define RK806_ENABLE_PWRCTRL		0x04
355ef9c5d10Sshengfei Xu #define RK806_VERSION_AB		0x01
356ef9c5d10Sshengfei Xu 
357ef9c5d10Sshengfei Xu #define RK806_ABNORDET_EN		0x80
358ef9c5d10Sshengfei Xu #define RK806_VERSION_MSK		0x0f
359ef9c5d10Sshengfei Xu #define RK806_RESET_FUN_CLR		0x3f
360f335f73cSshengfei Xu #define RK806_BUCK5_EX_RES_EN		0x10
361ef9c5d10Sshengfei Xu 
362ef9c5d10Sshengfei Xu /* RK806 buck*/
363ef9c5d10Sshengfei Xu #define RK806_BUCK_ON_VSEL(n)		(0x1a + n - 1)
364ef9c5d10Sshengfei Xu #define RK806_BUCK_SLP_VSEL(n)		(0x24 + n - 1)
365ef9c5d10Sshengfei Xu #define RK806_BUCK_CONFIG(n)		(0x10 + n - 1)
366ef9c5d10Sshengfei Xu #define RK806_BUCK_VSEL_MASK		0xff
367ef9c5d10Sshengfei Xu 
368ef9c5d10Sshengfei Xu /* RK806 LDO */
369ef9c5d10Sshengfei Xu #define RK806_NLDO_ON_VSEL(n)		(0x43 + n - 1)
370ef9c5d10Sshengfei Xu #define RK806_NLDO_SLP_VSEL(n)		(0x48 + n - 1)
371ef9c5d10Sshengfei Xu #define RK806_NLDO_VSEL_MASK		0xff
372ef9c5d10Sshengfei Xu #define RK806_PLDO_ON_VSEL(n)		(0x4e + n - 1)
373ef9c5d10Sshengfei Xu #define RK806_PLDO_SLP_VSEL(n)		(0x54 + n - 1)
374ef9c5d10Sshengfei Xu #define RK806_PLDO_VSEL_MASK		0xff
375ef9c5d10Sshengfei Xu 
376ef9c5d10Sshengfei Xu /* RK806 ENABLE */
377ef9c5d10Sshengfei Xu #define RK806_POWER_EN(n)		(0x00 + n)
378ef9c5d10Sshengfei Xu #define RK806_NLDO_EN(n)		(0x03 + n)
379ef9c5d10Sshengfei Xu #define RK806_PLDO_EN(n)		(0x04 + n)
380ef9c5d10Sshengfei Xu 
381ef9c5d10Sshengfei Xu #define RK806_BUCK_SUSPEND_EN		0x06
382ef9c5d10Sshengfei Xu #define RK806_NLDO_SUSPEND_EN		0x07
383ef9c5d10Sshengfei Xu #define RK806_PLDO_SUSPEND_EN		0x08
384ef9c5d10Sshengfei Xu 
385ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_MASK1		0xc0
386ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_REG1(n)		(0x10 + n)
387ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_REG1_8		0xeb
388ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_REG9_10		0xea
389ef9c5d10Sshengfei Xu 
390ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_4LSB_PER_1CLK	0x00/* LDO 100mV/uS buck 50mV/us */
391ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_2LSB_PER_1CLK	0x01/* LDO 50mV/uS buck 25mV/us */
392ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_1CLK	0x02/* LDO 25mV/uS buck 12.5mV/us */
393ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_2CLK	0x03/* LDO 12.5mV/uS buck 6.25mV/us */
394ef9c5d10Sshengfei Xu 
395ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_4CLK	0x04/* LDO 6.28/2mV/uS buck 3.125mV/us */
396ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_8CLK	0x05/* LDO 3.12mV/uS buck 1.56mV/us */
397ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_13CLK	0x06/* LDO 1.9mV/uS buck 961mV/us */
398ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_32CLK	0x07/* LDO 0.78mV/uS buck 0.39mV/us */
399ef9c5d10Sshengfei Xu 
400ef9c5d10Sshengfei Xu #define RK806_PLDO0_2_MSK(pldo)		(BIT(pldo + 5))
401ef9c5d10Sshengfei Xu #define RK806_PLDO0_2_SET(pldo)		(BIT(pldo + 1) | RK806_PLDO0_2_MSK(pldo))
402ef9c5d10Sshengfei Xu #define RK806_PLDO0_2_CLR(pldo)		RK806_PLDO0_2_MSK(pldo)
403ef9c5d10Sshengfei Xu 
404ded32713SJoseph Chen #define RK816_INT_STS_REG1		0x49
405ded32713SJoseph Chen #define RK816_INT_MSK_REG1		0x4a
406ded32713SJoseph Chen #define RK816_INT_STS_REG3		0x4e
407ded32713SJoseph Chen #define RK816_INT_STS_MSK_REG3		0x4f
408ded32713SJoseph Chen #define RK816_IRQ_PWRON_RISE_MSK	BIT(6)
409ded32713SJoseph Chen #define RK816_IRQ_PWRON_FALL_MSK	BIT(5)
410ded32713SJoseph Chen #define RK816_IRQ_PLUG_OUT_MSK		BIT(1)
411ded32713SJoseph Chen #define RK816_IRQ_CHR_OK_MSK		BIT(2)
412*063fcc91SShengfei Xu #define RK816_IRQ_RTC_ALARM_MSK		BIT(5)
413*063fcc91SShengfei Xu #define RK816_IRQ_RTC_PERIOD_MSK	BIT(6)
414ded32713SJoseph Chen 
415ded32713SJoseph Chen #define RK818_INT_STS_REG1		0x4c
416ded32713SJoseph Chen #define RK818_INT_MSK_REG1		0x4d
417ded32713SJoseph Chen #define RK818_IRQ_PLUG_OUT_MSK		BIT(1)
418ded32713SJoseph Chen #define RK818_IRQ_CHR_OK_MSK		BIT(2)
419*063fcc91SShengfei Xu #define RK818_IRQ_RTC_ALARM_MSK		BIT(5)
420*063fcc91SShengfei Xu #define RK818_IRQ_RTC_PERIOD_MSK	BIT(6)
421ded32713SJoseph Chen 
422ded32713SJoseph Chen #define	RK817_INT_STS_REG0		0xf8
423ded32713SJoseph Chen #define	RK817_INT_MSK_REG0		0xf9
424ded32713SJoseph Chen #define RK817_IRQ_PWRON_FALL_MSK	BIT(0)
425ded32713SJoseph Chen #define RK817_IRQ_PWRON_RISE_MSK	BIT(1)
426ded32713SJoseph Chen #define RK817_IRQ_PLUG_OUT_MSK		BIT(1)
427ded32713SJoseph Chen #define RK817_IRQ_PLUG_IN_MSK		BIT(0)
428*063fcc91SShengfei Xu #define RK817_IRQ_RTC_ALARM_MSK		BIT(5)
429*063fcc91SShengfei Xu #define RK817_IRQ_RTC_PERIOD_MSK	BIT(6)
430ded32713SJoseph Chen 
4311c223666SJoseph Chen struct reg_data {
4321c223666SJoseph Chen 	u8 reg;
4331c223666SJoseph Chen 	u8 val;
4341c223666SJoseph Chen 	u8 mask;
4351c223666SJoseph Chen };
4361c223666SJoseph Chen 
437453c5a92SJacob Chen struct rk8xx_reg_table {
438453c5a92SJacob Chen 	char *name;
439453c5a92SJacob Chen 	u8 reg_ctl;
440453c5a92SJacob Chen 	u8 reg_vol;
441453c5a92SJacob Chen };
442453c5a92SJacob Chen 
443453c5a92SJacob Chen struct rk8xx_priv {
44440db7404SJoseph Chen 	struct virq_chip *irq_chip;
4459361c683Sshengfei Xu 	struct spi_slave *slave;
446453c5a92SJacob Chen 	int variant;
447ded32713SJoseph Chen 	int irq;
44800d11ef2SShunqing Chen 	int lp_off_time;
44900d11ef2SShunqing Chen 	int lp_action;
45040db7404SJoseph Chen 	uint8_t sleep_pin;
451467c0e51Sshengfei Xu 	uint8_t rst_fun;
452b9e9168cSshengfei Xu 	int not_save_power_en;
453d76e1bedSshengfei Xu 	int sys_can_sd;
454f335f73cSshengfei Xu 	int buck5_feedback_dis;
4554e54e501Sshengfei Xu 	int pwr_ctr[3];
4561eb4ab17SShengfei Xu 	u32 *shutdown_sequence;
4571eb4ab17SShengfei Xu 	u32 *vb_shutdown_sequence;
4581eb4ab17SShengfei Xu 	int support_shutdown_sequence;
4591eb4ab17SShengfei Xu 	int support_vb_sequence;
460453c5a92SJacob Chen };
461453c5a92SJacob Chen 
462453c5a92SJacob Chen int rk8xx_spl_configure_buck(struct udevice *pmic, int buck, int uvolt);
463ad98f882SWadim Egorov int rk818_spl_configure_usb_input_current(struct udevice *pmic, int current_ma);
464ad98f882SWadim Egorov int rk818_spl_configure_usb_chrg_shutdown(struct udevice *pmic, int uvolt);
465453c5a92SJacob Chen 
466453c5a92SJacob Chen #endif
467