xref: /rk3399_rockchip-uboot/include/power/rk801_pmic.h (revision 23814f509ff4a89d5411fab361a4e004a8a01a8b)
1*23814f50SJoseph Chen /*
2*23814f50SJoseph Chen  * (C) Copyright 2025 Rockchip Electronics Co., Ltd.
3*23814f50SJoseph Chen  *
4*23814f50SJoseph Chen  * SPDX-License-Identifier:     GPL-2.0+
5*23814f50SJoseph Chen  */
6*23814f50SJoseph Chen 
7*23814f50SJoseph Chen #ifndef _PMIC_RK801_H_
8*23814f50SJoseph Chen #define _PMIC_RK801_H_
9*23814f50SJoseph Chen 
10*23814f50SJoseph Chen #define DEV_OFF		BIT(0)
11*23814f50SJoseph Chen 
12*23814f50SJoseph Chen #define RK8XX_ID_MSK	0xfff0
13*23814f50SJoseph Chen 
14*23814f50SJoseph Chen enum rk801_reg {
15*23814f50SJoseph Chen 	RK801_ID_DCDC1,
16*23814f50SJoseph Chen 	RK801_ID_DCDC2,
17*23814f50SJoseph Chen 	RK801_ID_DCDC4,
18*23814f50SJoseph Chen 	RK801_ID_DCDC3,
19*23814f50SJoseph Chen 	RK801_ID_LDO1,
20*23814f50SJoseph Chen 	RK801_ID_LDO2,
21*23814f50SJoseph Chen 	RK801_ID_SWITCH,
22*23814f50SJoseph Chen 	RK801_ID_MAX,
23*23814f50SJoseph Chen };
24*23814f50SJoseph Chen 
25*23814f50SJoseph Chen #define RK801_SLP_REG_OFFSET                     5
26*23814f50SJoseph Chen #define RK801_NUM_REGULATORS                     7
27*23814f50SJoseph Chen 
28*23814f50SJoseph Chen /* RK801 Register Definitions */
29*23814f50SJoseph Chen #define RK801_ID_MSB                             0x00
30*23814f50SJoseph Chen #define RK801_ID_LSB                             0x01
31*23814f50SJoseph Chen #define RK801_OTP_VER_REG                        0x02
32*23814f50SJoseph Chen #define RK801_POWER_EN0_REG                      0x03
33*23814f50SJoseph Chen #define RK801_POWER_EN1_REG                      0x04
34*23814f50SJoseph Chen #define RK801_POWER_SLP_EN_REG                   0x05
35*23814f50SJoseph Chen #define RK801_POWER_FPWM_EN_REG                  0x06
36*23814f50SJoseph Chen #define RK801_SLP_LP_CONFIG_REG                  0x07
37*23814f50SJoseph Chen #define RK801_BUCK_CONFIG_REG                    0x08
38*23814f50SJoseph Chen #define RK801_BUCK1_ON_VSEL_REG                  0x09
39*23814f50SJoseph Chen #define RK801_BUCK2_ON_VSEL_REG                  0x0a
40*23814f50SJoseph Chen #define RK801_BUCK4_ON_VSEL_REG                  0x0b
41*23814f50SJoseph Chen #define RK801_LDO1_ON_VSEL_REG                   0x0c
42*23814f50SJoseph Chen #define RK801_LDO2_ON_VSEL_REG                   0x0d
43*23814f50SJoseph Chen #define RK801_BUCK1_SLP_VSEL_REG                 0x0e
44*23814f50SJoseph Chen #define RK801_BUCK2_SLP_VSEL_REG                 0x0f
45*23814f50SJoseph Chen #define RK801_BUCK4_SLP_VSEL_REG                 0x10
46*23814f50SJoseph Chen #define RK801_LDO1_SLP_VSEL_REG                  0x11
47*23814f50SJoseph Chen #define RK801_LDO2_SLP_VSEL_REG                  0x12
48*23814f50SJoseph Chen #define RK801_LDO_SW_IMAX_REG                    0x13
49*23814f50SJoseph Chen #define RK801_SYS_STS_REG                        0x14
50*23814f50SJoseph Chen #define RK801_SYS_CFG0_REG                       0x15
51*23814f50SJoseph Chen #define RK801_SYS_CFG1_REG                       0x16
52*23814f50SJoseph Chen #define RK801_SYS_CFG2_REG                       0x17
53*23814f50SJoseph Chen #define RK801_SYS_CFG3_REG                       0x18
54*23814f50SJoseph Chen #define RK801_SYS_CFG4_REG                       0x19
55*23814f50SJoseph Chen #define RK801_SLEEP_CFG_REG                      0x1a
56*23814f50SJoseph Chen #define RK801_ON_SOURCE_REG                      0x1b
57*23814f50SJoseph Chen #define RK801_OFF_SOURCE_REG                     0x1c
58*23814f50SJoseph Chen #define RK801_PWRON_KEY_REG                      0x1d
59*23814f50SJoseph Chen #define RK801_INT_STS0_REG                       0x1e
60*23814f50SJoseph Chen #define RK801_INT_MASK0_REG                      0x1f
61*23814f50SJoseph Chen #define RK801_INT_CONFIG_REG                     0x20
62*23814f50SJoseph Chen #define RK801_CON_BACK1_REG                      0x21
63*23814f50SJoseph Chen #define RK801_CON_BACK2_REG                      0x22
64*23814f50SJoseph Chen #define RK801_DATA_CON0_REG                      0x23
65*23814f50SJoseph Chen #define RK801_DATA_CON1_REG                      0x24
66*23814f50SJoseph Chen #define RK801_DATA_CON2_REG                      0x25
67*23814f50SJoseph Chen #define RK801_DATA_CON3_REG                      0x26
68*23814f50SJoseph Chen #define RK801_POWER_EXIT_SLP_SEQ0_REG            0x27
69*23814f50SJoseph Chen #define RK801_POWER_EXIT_SLP_SEQ1_REG            0x28
70*23814f50SJoseph Chen #define RK801_POWER_EXIT_SLP_SEQ2_REG            0x29
71*23814f50SJoseph Chen #define RK801_POWER_EXIT_SLP_SEQ3_REG            0x2a
72*23814f50SJoseph Chen #define RK801_POWER_ENTER_SLP_OR_SHTD_SEQ0_REG   0x2b
73*23814f50SJoseph Chen #define RK801_POWER_ENTER_SLP_OR_SHTD_SEQ1_REG   0x2c
74*23814f50SJoseph Chen #define RK801_POWER_ENTER_SLP_OR_SHTD_SEQ2_REG   0x2d
75*23814f50SJoseph Chen #define RK801_POWER_ENTER_SLP_OR_SHTD_SEQ3_REG   0x2e
76*23814f50SJoseph Chen #define RK801_BUCK_DEBUG1_REG                    0x2f
77*23814f50SJoseph Chen #define RK801_BUCK_DEBUG2_REG                    0x30
78*23814f50SJoseph Chen #define RK801_BUCK_DEBUG3_REG                    0x31
79*23814f50SJoseph Chen #define RK801_BUCK_DEBUG4_REG                    0x32
80*23814f50SJoseph Chen #define RK801_BUCK_DEBUG5_REG                    0x33
81*23814f50SJoseph Chen #define RK801_BUCK_DEBUG7_REG                    0x34
82*23814f50SJoseph Chen #define RK801_OTP_EN_CON_REG                     0x35
83*23814f50SJoseph Chen #define RK801_TEST_CON_REG                       0x36
84*23814f50SJoseph Chen #define RK801_EFUSE_CONTROL_REG                  0x37
85*23814f50SJoseph Chen #define RK801_SYS_CFG3_OTP_REG                   0x38
86*23814f50SJoseph Chen 
87*23814f50SJoseph Chen /* RK801 IRQ Definitions */
88*23814f50SJoseph Chen #define RK801_IRQ_PWRON_FALL                     0
89*23814f50SJoseph Chen #define RK801_IRQ_PWRON_RISE                     1
90*23814f50SJoseph Chen #define RK801_IRQ_PWRON                          2
91*23814f50SJoseph Chen #define RK801_IRQ_PWRON_LP                       3
92*23814f50SJoseph Chen #define RK801_IRQ_HOTDIE                         4
93*23814f50SJoseph Chen #define RK801_IRQ_VDC_RISE                       5
94*23814f50SJoseph Chen #define RK801_IRQ_VDC_FALL                       6
95*23814f50SJoseph Chen #define RK801_IRQ_PWRON_FALL_MSK                 BIT(0)
96*23814f50SJoseph Chen #define RK801_IRQ_PWRON_RISE_MSK                 BIT(1)
97*23814f50SJoseph Chen #define RK801_IRQ_PWRON_MSK                      BIT(2)
98*23814f50SJoseph Chen #define RK801_IRQ_PWRON_LP_MSK                   BIT(3)
99*23814f50SJoseph Chen #define RK801_IRQ_HOTDIE_MSK                     BIT(4)
100*23814f50SJoseph Chen #define RK801_IRQ_VDC_RISE_MSK                   BIT(5)
101*23814f50SJoseph Chen #define RK801_IRQ_VDC_FALL_MSK                   BIT(6)
102*23814f50SJoseph Chen 
103*23814f50SJoseph Chen /* RK801_SLP_LP_CONFIG_REG */
104*23814f50SJoseph Chen #define RK801_BUCK_SLP_LP_EN                     BIT(3)
105*23814f50SJoseph Chen #define RK801_PLDO_SLP_LP_EN                     BIT(1)
106*23814f50SJoseph Chen #define RK801_SLP_LP_MASK                        (RK801_PLDO_SLP_LP_EN | RK801_BUCK_SLP_LP_EN)
107*23814f50SJoseph Chen 
108*23814f50SJoseph Chen /* RK801_SLEEP_CFG_REG */
109*23814f50SJoseph Chen #define RK801_SLEEP_FUN_MSK                      0x3
110*23814f50SJoseph Chen #define RK801_NONE_FUN                           0x0
111*23814f50SJoseph Chen #define RK801_SLEEP_FUN                          0x1
112*23814f50SJoseph Chen #define RK801_SHUTDOWN_FUN                       0x2
113*23814f50SJoseph Chen #define RK801_RESET_FUN                          0x3
114*23814f50SJoseph Chen 
115*23814f50SJoseph Chen /* RK801_SYS_CFG2_REG */
116*23814f50SJoseph Chen #define RK801_SLEEP_POL_MSK                      BIT(1)
117*23814f50SJoseph Chen #define RK801_SLEEP_ACT_H                        BIT(1)
118*23814f50SJoseph Chen #define RK801_SLEEP_ACT_L                        0
119*23814f50SJoseph Chen 
120*23814f50SJoseph Chen /* RK801_INT_CONFIG_REG */
121*23814f50SJoseph Chen #define RK801_INT_POL_MSK                        BIT(1)
122*23814f50SJoseph Chen #define RK801_INT_ACT_H                          BIT(1)
123*23814f50SJoseph Chen #define RK801_INT_ACT_L                          0
124*23814f50SJoseph Chen 
125*23814f50SJoseph Chen #define RK801_FPWM_MODE                          1
126*23814f50SJoseph Chen #define RK801_AUTO_PWM_MODE                      0
127*23814f50SJoseph Chen #define RK801_PLDO_HRDEC_EN                      BIT(6)
128*23814f50SJoseph Chen 
129*23814f50SJoseph Chen struct reg_data {
130*23814f50SJoseph Chen 	u8 reg;
131*23814f50SJoseph Chen 	u8 val;
132*23814f50SJoseph Chen 	u8 mask;
133*23814f50SJoseph Chen };
134*23814f50SJoseph Chen 
135*23814f50SJoseph Chen struct rk801_priv {
136*23814f50SJoseph Chen 	struct virq_chip *irq_chip;
137*23814f50SJoseph Chen 	struct gpio_desc pwrctrl_gpio;
138*23814f50SJoseph Chen 	bool req_pwrctrl_dvs;
139*23814f50SJoseph Chen 	int variant;
140*23814f50SJoseph Chen 	int irq;
141*23814f50SJoseph Chen };
142*23814f50SJoseph Chen #endif
143