xref: /rk3399_rockchip-uboot/include/power/rk801_pmic.h (revision 2b3603a89d8e9dcaf81eec8513888c0139b2644f)
123814f50SJoseph Chen /*
223814f50SJoseph Chen  * (C) Copyright 2025 Rockchip Electronics Co., Ltd.
323814f50SJoseph Chen  *
423814f50SJoseph Chen  * SPDX-License-Identifier:     GPL-2.0+
523814f50SJoseph Chen  */
623814f50SJoseph Chen 
723814f50SJoseph Chen #ifndef _PMIC_RK801_H_
823814f50SJoseph Chen #define _PMIC_RK801_H_
923814f50SJoseph Chen 
1023814f50SJoseph Chen #define DEV_OFF		BIT(0)
1123814f50SJoseph Chen 
1223814f50SJoseph Chen #define RK8XX_ID_MSK	0xfff0
1323814f50SJoseph Chen 
1423814f50SJoseph Chen enum rk801_reg {
1523814f50SJoseph Chen 	RK801_ID_DCDC1,
1623814f50SJoseph Chen 	RK801_ID_DCDC2,
1723814f50SJoseph Chen 	RK801_ID_DCDC4,
1823814f50SJoseph Chen 	RK801_ID_DCDC3,
1923814f50SJoseph Chen 	RK801_ID_LDO1,
2023814f50SJoseph Chen 	RK801_ID_LDO2,
2123814f50SJoseph Chen 	RK801_ID_SWITCH,
2223814f50SJoseph Chen 	RK801_ID_MAX,
2323814f50SJoseph Chen };
2423814f50SJoseph Chen 
2523814f50SJoseph Chen #define RK801_SLP_REG_OFFSET                     5
2623814f50SJoseph Chen #define RK801_NUM_REGULATORS                     7
2723814f50SJoseph Chen 
2823814f50SJoseph Chen /* RK801 Register Definitions */
2923814f50SJoseph Chen #define RK801_ID_MSB                             0x00
3023814f50SJoseph Chen #define RK801_ID_LSB                             0x01
3123814f50SJoseph Chen #define RK801_OTP_VER_REG                        0x02
3223814f50SJoseph Chen #define RK801_POWER_EN0_REG                      0x03
3323814f50SJoseph Chen #define RK801_POWER_EN1_REG                      0x04
3423814f50SJoseph Chen #define RK801_POWER_SLP_EN_REG                   0x05
3523814f50SJoseph Chen #define RK801_POWER_FPWM_EN_REG                  0x06
3623814f50SJoseph Chen #define RK801_SLP_LP_CONFIG_REG                  0x07
3723814f50SJoseph Chen #define RK801_BUCK_CONFIG_REG                    0x08
3823814f50SJoseph Chen #define RK801_BUCK1_ON_VSEL_REG                  0x09
3923814f50SJoseph Chen #define RK801_BUCK2_ON_VSEL_REG                  0x0a
4023814f50SJoseph Chen #define RK801_BUCK4_ON_VSEL_REG                  0x0b
4123814f50SJoseph Chen #define RK801_LDO1_ON_VSEL_REG                   0x0c
4223814f50SJoseph Chen #define RK801_LDO2_ON_VSEL_REG                   0x0d
4323814f50SJoseph Chen #define RK801_BUCK1_SLP_VSEL_REG                 0x0e
4423814f50SJoseph Chen #define RK801_BUCK2_SLP_VSEL_REG                 0x0f
4523814f50SJoseph Chen #define RK801_BUCK4_SLP_VSEL_REG                 0x10
4623814f50SJoseph Chen #define RK801_LDO1_SLP_VSEL_REG                  0x11
4723814f50SJoseph Chen #define RK801_LDO2_SLP_VSEL_REG                  0x12
4823814f50SJoseph Chen #define RK801_LDO_SW_IMAX_REG                    0x13
4923814f50SJoseph Chen #define RK801_SYS_STS_REG                        0x14
5023814f50SJoseph Chen #define RK801_SYS_CFG0_REG                       0x15
5123814f50SJoseph Chen #define RK801_SYS_CFG1_REG                       0x16
5223814f50SJoseph Chen #define RK801_SYS_CFG2_REG                       0x17
5323814f50SJoseph Chen #define RK801_SYS_CFG3_REG                       0x18
5423814f50SJoseph Chen #define RK801_SYS_CFG4_REG                       0x19
5523814f50SJoseph Chen #define RK801_SLEEP_CFG_REG                      0x1a
5623814f50SJoseph Chen #define RK801_ON_SOURCE_REG                      0x1b
5723814f50SJoseph Chen #define RK801_OFF_SOURCE_REG                     0x1c
5823814f50SJoseph Chen #define RK801_PWRON_KEY_REG                      0x1d
5923814f50SJoseph Chen #define RK801_INT_STS0_REG                       0x1e
6023814f50SJoseph Chen #define RK801_INT_MASK0_REG                      0x1f
6123814f50SJoseph Chen #define RK801_INT_CONFIG_REG                     0x20
6223814f50SJoseph Chen #define RK801_CON_BACK1_REG                      0x21
6323814f50SJoseph Chen #define RK801_CON_BACK2_REG                      0x22
6423814f50SJoseph Chen #define RK801_DATA_CON0_REG                      0x23
6523814f50SJoseph Chen #define RK801_DATA_CON1_REG                      0x24
6623814f50SJoseph Chen #define RK801_DATA_CON2_REG                      0x25
6723814f50SJoseph Chen #define RK801_DATA_CON3_REG                      0x26
6823814f50SJoseph Chen #define RK801_POWER_EXIT_SLP_SEQ0_REG            0x27
6923814f50SJoseph Chen #define RK801_POWER_EXIT_SLP_SEQ1_REG            0x28
7023814f50SJoseph Chen #define RK801_POWER_EXIT_SLP_SEQ2_REG            0x29
7123814f50SJoseph Chen #define RK801_POWER_EXIT_SLP_SEQ3_REG            0x2a
7223814f50SJoseph Chen #define RK801_POWER_ENTER_SLP_OR_SHTD_SEQ0_REG   0x2b
7323814f50SJoseph Chen #define RK801_POWER_ENTER_SLP_OR_SHTD_SEQ1_REG   0x2c
7423814f50SJoseph Chen #define RK801_POWER_ENTER_SLP_OR_SHTD_SEQ2_REG   0x2d
7523814f50SJoseph Chen #define RK801_POWER_ENTER_SLP_OR_SHTD_SEQ3_REG   0x2e
7623814f50SJoseph Chen #define RK801_BUCK_DEBUG1_REG                    0x2f
7723814f50SJoseph Chen #define RK801_BUCK_DEBUG2_REG                    0x30
7823814f50SJoseph Chen #define RK801_BUCK_DEBUG3_REG                    0x31
7923814f50SJoseph Chen #define RK801_BUCK_DEBUG4_REG                    0x32
8023814f50SJoseph Chen #define RK801_BUCK_DEBUG5_REG                    0x33
8123814f50SJoseph Chen #define RK801_BUCK_DEBUG7_REG                    0x34
8223814f50SJoseph Chen #define RK801_OTP_EN_CON_REG                     0x35
8323814f50SJoseph Chen #define RK801_TEST_CON_REG                       0x36
8423814f50SJoseph Chen #define RK801_EFUSE_CONTROL_REG                  0x37
8523814f50SJoseph Chen #define RK801_SYS_CFG3_OTP_REG                   0x38
8623814f50SJoseph Chen 
8723814f50SJoseph Chen /* RK801 IRQ Definitions */
8823814f50SJoseph Chen #define RK801_IRQ_PWRON_FALL                     0
8923814f50SJoseph Chen #define RK801_IRQ_PWRON_RISE                     1
9023814f50SJoseph Chen #define RK801_IRQ_PWRON                          2
9123814f50SJoseph Chen #define RK801_IRQ_PWRON_LP                       3
9223814f50SJoseph Chen #define RK801_IRQ_HOTDIE                         4
9323814f50SJoseph Chen #define RK801_IRQ_VDC_RISE                       5
9423814f50SJoseph Chen #define RK801_IRQ_VDC_FALL                       6
9523814f50SJoseph Chen #define RK801_IRQ_PWRON_FALL_MSK                 BIT(0)
9623814f50SJoseph Chen #define RK801_IRQ_PWRON_RISE_MSK                 BIT(1)
9723814f50SJoseph Chen #define RK801_IRQ_PWRON_MSK                      BIT(2)
9823814f50SJoseph Chen #define RK801_IRQ_PWRON_LP_MSK                   BIT(3)
9923814f50SJoseph Chen #define RK801_IRQ_HOTDIE_MSK                     BIT(4)
10023814f50SJoseph Chen #define RK801_IRQ_VDC_RISE_MSK                   BIT(5)
10123814f50SJoseph Chen #define RK801_IRQ_VDC_FALL_MSK                   BIT(6)
10223814f50SJoseph Chen 
10323814f50SJoseph Chen /* RK801_SLP_LP_CONFIG_REG */
10423814f50SJoseph Chen #define RK801_BUCK_SLP_LP_EN                     BIT(3)
10523814f50SJoseph Chen #define RK801_PLDO_SLP_LP_EN                     BIT(1)
10623814f50SJoseph Chen #define RK801_SLP_LP_MASK                        (RK801_PLDO_SLP_LP_EN | RK801_BUCK_SLP_LP_EN)
10723814f50SJoseph Chen 
10823814f50SJoseph Chen /* RK801_SLEEP_CFG_REG */
10923814f50SJoseph Chen #define RK801_SLEEP_FUN_MSK                      0x3
11023814f50SJoseph Chen #define RK801_NONE_FUN                           0x0
11123814f50SJoseph Chen #define RK801_SLEEP_FUN                          0x1
11223814f50SJoseph Chen #define RK801_SHUTDOWN_FUN                       0x2
11323814f50SJoseph Chen #define RK801_RESET_FUN                          0x3
11423814f50SJoseph Chen 
11523814f50SJoseph Chen /* RK801_SYS_CFG2_REG */
11623814f50SJoseph Chen #define RK801_SLEEP_POL_MSK                      BIT(1)
11723814f50SJoseph Chen #define RK801_SLEEP_ACT_H                        BIT(1)
11823814f50SJoseph Chen #define RK801_SLEEP_ACT_L                        0
11923814f50SJoseph Chen 
120*2b3603a8SJoseph Chen #define RK801_RST_MSK                            (0x3 << 4)
121*2b3603a8SJoseph Chen #define RK801_RST_RESTART_PMU                    (0x0 << 4)
122*2b3603a8SJoseph Chen #define RK801_RST_RESTART_REG                    (0x1 << 4)
123*2b3603a8SJoseph Chen #define RK801_RST_RESTART_REG_RESETB             (0x2 << 4)
124*2b3603a8SJoseph Chen 
12523814f50SJoseph Chen /* RK801_INT_CONFIG_REG */
12623814f50SJoseph Chen #define RK801_INT_POL_MSK                        BIT(1)
12723814f50SJoseph Chen #define RK801_INT_ACT_H                          BIT(1)
12823814f50SJoseph Chen #define RK801_INT_ACT_L                          0
12923814f50SJoseph Chen 
13023814f50SJoseph Chen #define RK801_FPWM_MODE                          1
13123814f50SJoseph Chen #define RK801_AUTO_PWM_MODE                      0
13223814f50SJoseph Chen #define RK801_PLDO_HRDEC_EN                      BIT(6)
13323814f50SJoseph Chen 
13423814f50SJoseph Chen struct reg_data {
13523814f50SJoseph Chen 	u8 reg;
13623814f50SJoseph Chen 	u8 val;
13723814f50SJoseph Chen 	u8 mask;
13823814f50SJoseph Chen };
13923814f50SJoseph Chen 
14023814f50SJoseph Chen struct rk801_priv {
14123814f50SJoseph Chen 	struct virq_chip *irq_chip;
14223814f50SJoseph Chen 	struct gpio_desc pwrctrl_gpio;
14323814f50SJoseph Chen 	bool req_pwrctrl_dvs;
14423814f50SJoseph Chen 	int variant;
14523814f50SJoseph Chen 	int irq;
14623814f50SJoseph Chen };
14723814f50SJoseph Chen #endif
148