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