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