1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* Copyright 2020 NXP. */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef __LINUX_REG_PCA9450_H__ 5*4882a593Smuzhiyun #define __LINUX_REG_PCA9450_H__ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <linux/regmap.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun enum pca9450_chip_type { 10*4882a593Smuzhiyun PCA9450_TYPE_PCA9450A = 0, 11*4882a593Smuzhiyun PCA9450_TYPE_PCA9450BC, 12*4882a593Smuzhiyun PCA9450_TYPE_AMOUNT, 13*4882a593Smuzhiyun }; 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun enum { 16*4882a593Smuzhiyun PCA9450_BUCK1 = 0, 17*4882a593Smuzhiyun PCA9450_BUCK2, 18*4882a593Smuzhiyun PCA9450_BUCK3, 19*4882a593Smuzhiyun PCA9450_BUCK4, 20*4882a593Smuzhiyun PCA9450_BUCK5, 21*4882a593Smuzhiyun PCA9450_BUCK6, 22*4882a593Smuzhiyun PCA9450_LDO1, 23*4882a593Smuzhiyun PCA9450_LDO2, 24*4882a593Smuzhiyun PCA9450_LDO3, 25*4882a593Smuzhiyun PCA9450_LDO4, 26*4882a593Smuzhiyun PCA9450_LDO5, 27*4882a593Smuzhiyun PCA9450_REGULATOR_CNT, 28*4882a593Smuzhiyun }; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun enum { 31*4882a593Smuzhiyun PCA9450_DVS_LEVEL_RUN = 0, 32*4882a593Smuzhiyun PCA9450_DVS_LEVEL_STANDBY, 33*4882a593Smuzhiyun PCA9450_DVS_LEVEL_MAX, 34*4882a593Smuzhiyun }; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define PCA9450_BUCK1_VOLTAGE_NUM 0x80 37*4882a593Smuzhiyun #define PCA9450_BUCK2_VOLTAGE_NUM 0x80 38*4882a593Smuzhiyun #define PCA9450_BUCK3_VOLTAGE_NUM 0x80 39*4882a593Smuzhiyun #define PCA9450_BUCK4_VOLTAGE_NUM 0x80 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define PCA9450_BUCK5_VOLTAGE_NUM 0x80 42*4882a593Smuzhiyun #define PCA9450_BUCK6_VOLTAGE_NUM 0x80 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define PCA9450_LDO1_VOLTAGE_NUM 0x08 45*4882a593Smuzhiyun #define PCA9450_LDO2_VOLTAGE_NUM 0x08 46*4882a593Smuzhiyun #define PCA9450_LDO3_VOLTAGE_NUM 0x20 47*4882a593Smuzhiyun #define PCA9450_LDO4_VOLTAGE_NUM 0x20 48*4882a593Smuzhiyun #define PCA9450_LDO5_VOLTAGE_NUM 0x10 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun enum { 51*4882a593Smuzhiyun PCA9450_REG_DEV_ID = 0x00, 52*4882a593Smuzhiyun PCA9450_REG_INT1 = 0x01, 53*4882a593Smuzhiyun PCA9450_REG_INT1_MSK = 0x02, 54*4882a593Smuzhiyun PCA9450_REG_STATUS1 = 0x03, 55*4882a593Smuzhiyun PCA9450_REG_STATUS2 = 0x04, 56*4882a593Smuzhiyun PCA9450_REG_PWRON_STAT = 0x05, 57*4882a593Smuzhiyun PCA9450_REG_SWRST = 0x06, 58*4882a593Smuzhiyun PCA9450_REG_PWRCTRL = 0x07, 59*4882a593Smuzhiyun PCA9450_REG_RESET_CTRL = 0x08, 60*4882a593Smuzhiyun PCA9450_REG_CONFIG1 = 0x09, 61*4882a593Smuzhiyun PCA9450_REG_CONFIG2 = 0x0A, 62*4882a593Smuzhiyun PCA9450_REG_BUCK123_DVS = 0x0C, 63*4882a593Smuzhiyun PCA9450_REG_BUCK1OUT_LIMIT = 0x0D, 64*4882a593Smuzhiyun PCA9450_REG_BUCK2OUT_LIMIT = 0x0E, 65*4882a593Smuzhiyun PCA9450_REG_BUCK3OUT_LIMIT = 0x0F, 66*4882a593Smuzhiyun PCA9450_REG_BUCK1CTRL = 0x10, 67*4882a593Smuzhiyun PCA9450_REG_BUCK1OUT_DVS0 = 0x11, 68*4882a593Smuzhiyun PCA9450_REG_BUCK1OUT_DVS1 = 0x12, 69*4882a593Smuzhiyun PCA9450_REG_BUCK2CTRL = 0x13, 70*4882a593Smuzhiyun PCA9450_REG_BUCK2OUT_DVS0 = 0x14, 71*4882a593Smuzhiyun PCA9450_REG_BUCK2OUT_DVS1 = 0x15, 72*4882a593Smuzhiyun PCA9450_REG_BUCK3CTRL = 0x16, 73*4882a593Smuzhiyun PCA9450_REG_BUCK3OUT_DVS0 = 0x17, 74*4882a593Smuzhiyun PCA9450_REG_BUCK3OUT_DVS1 = 0x18, 75*4882a593Smuzhiyun PCA9450_REG_BUCK4CTRL = 0x19, 76*4882a593Smuzhiyun PCA9450_REG_BUCK4OUT = 0x1A, 77*4882a593Smuzhiyun PCA9450_REG_BUCK5CTRL = 0x1B, 78*4882a593Smuzhiyun PCA9450_REG_BUCK5OUT = 0x1C, 79*4882a593Smuzhiyun PCA9450_REG_BUCK6CTRL = 0x1D, 80*4882a593Smuzhiyun PCA9450_REG_BUCK6OUT = 0x1E, 81*4882a593Smuzhiyun PCA9450_REG_LDO_AD_CTRL = 0x20, 82*4882a593Smuzhiyun PCA9450_REG_LDO1CTRL = 0x21, 83*4882a593Smuzhiyun PCA9450_REG_LDO2CTRL = 0x22, 84*4882a593Smuzhiyun PCA9450_REG_LDO3CTRL = 0x23, 85*4882a593Smuzhiyun PCA9450_REG_LDO4CTRL = 0x24, 86*4882a593Smuzhiyun PCA9450_REG_LDO5CTRL_L = 0x25, 87*4882a593Smuzhiyun PCA9450_REG_LDO5CTRL_H = 0x26, 88*4882a593Smuzhiyun PCA9450_REG_LOADSW_CTRL = 0x2A, 89*4882a593Smuzhiyun PCA9450_REG_VRFLT1_STS = 0x2B, 90*4882a593Smuzhiyun PCA9450_REG_VRFLT2_STS = 0x2C, 91*4882a593Smuzhiyun PCA9450_REG_VRFLT1_MASK = 0x2D, 92*4882a593Smuzhiyun PCA9450_REG_VRFLT2_MASK = 0x2E, 93*4882a593Smuzhiyun PCA9450_MAX_REGISTER = 0x2F, 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /* PCA9450 BUCK ENMODE bits */ 97*4882a593Smuzhiyun #define BUCK_ENMODE_OFF 0x00 98*4882a593Smuzhiyun #define BUCK_ENMODE_ONREQ 0x01 99*4882a593Smuzhiyun #define BUCK_ENMODE_ONREQ_STBYREQ 0x02 100*4882a593Smuzhiyun #define BUCK_ENMODE_ON 0x03 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /* PCA9450_REG_BUCK1_CTRL bits */ 103*4882a593Smuzhiyun #define BUCK1_RAMP_MASK 0xC0 104*4882a593Smuzhiyun #define BUCK1_RAMP_25MV 0x0 105*4882a593Smuzhiyun #define BUCK1_RAMP_12P5MV 0x1 106*4882a593Smuzhiyun #define BUCK1_RAMP_6P25MV 0x2 107*4882a593Smuzhiyun #define BUCK1_RAMP_3P125MV 0x3 108*4882a593Smuzhiyun #define BUCK1_DVS_CTRL 0x10 109*4882a593Smuzhiyun #define BUCK1_AD 0x08 110*4882a593Smuzhiyun #define BUCK1_FPWM 0x04 111*4882a593Smuzhiyun #define BUCK1_ENMODE_MASK 0x03 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* PCA9450_REG_BUCK2_CTRL bits */ 114*4882a593Smuzhiyun #define BUCK2_RAMP_MASK 0xC0 115*4882a593Smuzhiyun #define BUCK2_RAMP_25MV 0x0 116*4882a593Smuzhiyun #define BUCK2_RAMP_12P5MV 0x1 117*4882a593Smuzhiyun #define BUCK2_RAMP_6P25MV 0x2 118*4882a593Smuzhiyun #define BUCK2_RAMP_3P125MV 0x3 119*4882a593Smuzhiyun #define BUCK2_DVS_CTRL 0x10 120*4882a593Smuzhiyun #define BUCK2_AD 0x08 121*4882a593Smuzhiyun #define BUCK2_FPWM 0x04 122*4882a593Smuzhiyun #define BUCK2_ENMODE_MASK 0x03 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* PCA9450_REG_BUCK3_CTRL bits */ 125*4882a593Smuzhiyun #define BUCK3_RAMP_MASK 0xC0 126*4882a593Smuzhiyun #define BUCK3_RAMP_25MV 0x0 127*4882a593Smuzhiyun #define BUCK3_RAMP_12P5MV 0x1 128*4882a593Smuzhiyun #define BUCK3_RAMP_6P25MV 0x2 129*4882a593Smuzhiyun #define BUCK3_RAMP_3P125MV 0x3 130*4882a593Smuzhiyun #define BUCK3_DVS_CTRL 0x10 131*4882a593Smuzhiyun #define BUCK3_AD 0x08 132*4882a593Smuzhiyun #define BUCK3_FPWM 0x04 133*4882a593Smuzhiyun #define BUCK3_ENMODE_MASK 0x03 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun /* PCA9450_REG_BUCK4_CTRL bits */ 136*4882a593Smuzhiyun #define BUCK4_AD 0x08 137*4882a593Smuzhiyun #define BUCK4_FPWM 0x04 138*4882a593Smuzhiyun #define BUCK4_ENMODE_MASK 0x03 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun /* PCA9450_REG_BUCK5_CTRL bits */ 141*4882a593Smuzhiyun #define BUCK5_AD 0x08 142*4882a593Smuzhiyun #define BUCK5_FPWM 0x04 143*4882a593Smuzhiyun #define BUCK5_ENMODE_MASK 0x03 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* PCA9450_REG_BUCK6_CTRL bits */ 146*4882a593Smuzhiyun #define BUCK6_AD 0x08 147*4882a593Smuzhiyun #define BUCK6_FPWM 0x04 148*4882a593Smuzhiyun #define BUCK6_ENMODE_MASK 0x03 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun /* PCA9450_REG_BUCK123_PRESET_EN bit */ 151*4882a593Smuzhiyun #define BUCK123_PRESET_EN 0x80 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /* PCA9450_BUCK1OUT_DVS0 bits */ 154*4882a593Smuzhiyun #define BUCK1OUT_DVS0_MASK 0x7F 155*4882a593Smuzhiyun #define BUCK1OUT_DVS0_DEFAULT 0x14 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun /* PCA9450_BUCK1OUT_DVS1 bits */ 158*4882a593Smuzhiyun #define BUCK1OUT_DVS1_MASK 0x7F 159*4882a593Smuzhiyun #define BUCK1OUT_DVS1_DEFAULT 0x14 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun /* PCA9450_BUCK2OUT_DVS0 bits */ 162*4882a593Smuzhiyun #define BUCK2OUT_DVS0_MASK 0x7F 163*4882a593Smuzhiyun #define BUCK2OUT_DVS0_DEFAULT 0x14 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun /* PCA9450_BUCK2OUT_DVS1 bits */ 166*4882a593Smuzhiyun #define BUCK2OUT_DVS1_MASK 0x7F 167*4882a593Smuzhiyun #define BUCK2OUT_DVS1_DEFAULT 0x14 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun /* PCA9450_BUCK3OUT_DVS0 bits */ 170*4882a593Smuzhiyun #define BUCK3OUT_DVS0_MASK 0x7F 171*4882a593Smuzhiyun #define BUCK3OUT_DVS0_DEFAULT 0x14 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun /* PCA9450_BUCK3OUT_DVS1 bits */ 174*4882a593Smuzhiyun #define BUCK3OUT_DVS1_MASK 0x7F 175*4882a593Smuzhiyun #define BUCK3OUT_DVS1_DEFAULT 0x14 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* PCA9450_REG_BUCK4OUT bits */ 178*4882a593Smuzhiyun #define BUCK4OUT_MASK 0x7F 179*4882a593Smuzhiyun #define BUCK4OUT_DEFAULT 0x6C 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun /* PCA9450_REG_BUCK5OUT bits */ 182*4882a593Smuzhiyun #define BUCK5OUT_MASK 0x7F 183*4882a593Smuzhiyun #define BUCK5OUT_DEFAULT 0x30 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun /* PCA9450_REG_BUCK6OUT bits */ 186*4882a593Smuzhiyun #define BUCK6OUT_MASK 0x7F 187*4882a593Smuzhiyun #define BUCK6OUT_DEFAULT 0x14 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun /* PCA9450_REG_LDO1_VOLT bits */ 190*4882a593Smuzhiyun #define LDO1_EN_MASK 0xC0 191*4882a593Smuzhiyun #define LDO1OUT_MASK 0x07 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* PCA9450_REG_LDO2_VOLT bits */ 194*4882a593Smuzhiyun #define LDO2_EN_MASK 0xC0 195*4882a593Smuzhiyun #define LDO2OUT_MASK 0x07 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun /* PCA9450_REG_LDO3_VOLT bits */ 198*4882a593Smuzhiyun #define LDO3_EN_MASK 0xC0 199*4882a593Smuzhiyun #define LDO3OUT_MASK 0x0F 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun /* PCA9450_REG_LDO4_VOLT bits */ 202*4882a593Smuzhiyun #define LDO4_EN_MASK 0xC0 203*4882a593Smuzhiyun #define LDO4OUT_MASK 0x0F 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun /* PCA9450_REG_LDO5_VOLT bits */ 206*4882a593Smuzhiyun #define LDO5L_EN_MASK 0xC0 207*4882a593Smuzhiyun #define LDO5LOUT_MASK 0x0F 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun #define LDO5H_EN_MASK 0xC0 210*4882a593Smuzhiyun #define LDO5HOUT_MASK 0x0F 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun /* PCA9450_REG_IRQ bits */ 213*4882a593Smuzhiyun #define IRQ_PWRON 0x80 214*4882a593Smuzhiyun #define IRQ_WDOGB 0x40 215*4882a593Smuzhiyun #define IRQ_RSVD 0x20 216*4882a593Smuzhiyun #define IRQ_VR_FLT1 0x10 217*4882a593Smuzhiyun #define IRQ_VR_FLT2 0x08 218*4882a593Smuzhiyun #define IRQ_LOWVSYS 0x04 219*4882a593Smuzhiyun #define IRQ_THERM_105 0x02 220*4882a593Smuzhiyun #define IRQ_THERM_125 0x01 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun /* PCA9450_REG_RESET_CTRL bits */ 223*4882a593Smuzhiyun #define WDOG_B_CFG_MASK 0xC0 224*4882a593Smuzhiyun #define WDOG_B_CFG_NONE 0x00 225*4882a593Smuzhiyun #define WDOG_B_CFG_WARM 0x40 226*4882a593Smuzhiyun #define WDOG_B_CFG_COLD_LDO12 0x80 227*4882a593Smuzhiyun #define WDOG_B_CFG_COLD 0xC0 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun #endif /* __LINUX_REG_PCA9450_H__ */ 230