1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2021 Rockchip Electronics Co., Ltd. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef __LINUX_REGULATOR_RK806_H 7*4882a593Smuzhiyun #define __LINUX_REGULATOR_RK806_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/regmap.h> 10*4882a593Smuzhiyun #include <linux/regulator/driver.h> 11*4882a593Smuzhiyun #include <linux/regulator/machine.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define RK806_POWER_EN0 0x0 14*4882a593Smuzhiyun #define RK806_POWER_EN1 0x1 15*4882a593Smuzhiyun #define RK806_POWER_EN2 0x2 16*4882a593Smuzhiyun #define RK806_POWER_EN3 0x3 17*4882a593Smuzhiyun #define RK806_POWER_EN4 0x4 18*4882a593Smuzhiyun #define RK806_POWER_EN5 0x5 19*4882a593Smuzhiyun #define RK806_POWER_SLP_EN0 0x6 20*4882a593Smuzhiyun #define RK806_POWER_SLP_EN1 0x7 21*4882a593Smuzhiyun #define RK806_POWER_SLP_EN2 0x8 22*4882a593Smuzhiyun #define RK806_POWER_DISCHRG_EN0 0x9 23*4882a593Smuzhiyun #define RK806_POWER_DISCHRG_EN1 0xA 24*4882a593Smuzhiyun #define RK806_POWER_DISCHRG_EN2 0xB 25*4882a593Smuzhiyun #define RK806_BUCK_FB_CONFIG 0xC 26*4882a593Smuzhiyun #define RK806_SLP_LP_CONFIG 0xD 27*4882a593Smuzhiyun #define RK806_POWER_FPWM_EN0 0xE 28*4882a593Smuzhiyun #define RK806_POWER_FPWM_EN1 0xF 29*4882a593Smuzhiyun #define RK806_BUCK1_CONFIG 0x10 30*4882a593Smuzhiyun #define RK806_BUCK2_CONFIG 0x11 31*4882a593Smuzhiyun #define RK806_BUCK3_CONFIG 0x12 32*4882a593Smuzhiyun #define RK806_BUCK4_CONFIG 0x13 33*4882a593Smuzhiyun #define RK806_BUCK5_CONFIG 0x14 34*4882a593Smuzhiyun #define RK806_BUCK6_CONFIG 0x15 35*4882a593Smuzhiyun #define RK806_BUCK7_CONFIG 0x16 36*4882a593Smuzhiyun #define RK806_BUCK8_CONFIG 0x17 37*4882a593Smuzhiyun #define RK806_BUCK9_CONFIG 0x18 38*4882a593Smuzhiyun #define RK806_BUCK10_CONFIG 0x19 39*4882a593Smuzhiyun #define RK806_BUCK1_ON_VSEL 0x1A 40*4882a593Smuzhiyun #define RK806_BUCK2_ON_VSEL 0x1B 41*4882a593Smuzhiyun #define RK806_BUCK3_ON_VSEL 0x1C 42*4882a593Smuzhiyun #define RK806_BUCK4_ON_VSEL 0x1D 43*4882a593Smuzhiyun #define RK806_BUCK5_ON_VSEL 0x1E 44*4882a593Smuzhiyun #define RK806_BUCK6_ON_VSEL 0x1F 45*4882a593Smuzhiyun #define RK806_BUCK7_ON_VSEL 0x20 46*4882a593Smuzhiyun #define RK806_BUCK8_ON_VSEL 0x21 47*4882a593Smuzhiyun #define RK806_BUCK9_ON_VSEL 0x22 48*4882a593Smuzhiyun #define RK806_BUCK10_ON_VSEL 0x23 49*4882a593Smuzhiyun #define RK806_BUCK1_SLP_VSEL 0x24 50*4882a593Smuzhiyun #define RK806_BUCK2_SLP_VSEL 0x25 51*4882a593Smuzhiyun #define RK806_BUCK3_SLP_VSEL 0x26 52*4882a593Smuzhiyun #define RK806_BUCK4_SLP_VSEL 0x27 53*4882a593Smuzhiyun #define RK806_BUCK5_SLP_VSEL 0x28 54*4882a593Smuzhiyun #define RK806_BUCK6_SLP_VSEL 0x29 55*4882a593Smuzhiyun #define RK806_BUCK7_SLP_VSEL 0x2A 56*4882a593Smuzhiyun #define RK806_BUCK8_SLP_VSEL 0x2B 57*4882a593Smuzhiyun #define RK806_BUCK9_SLP_VSEL 0x2D 58*4882a593Smuzhiyun #define RK806_BUCK10_SLP_VSEL 0x2E 59*4882a593Smuzhiyun #define RK806_BUCK_DEBUG1 0x30 60*4882a593Smuzhiyun #define RK806_BUCK_DEBUG2 0x31 61*4882a593Smuzhiyun #define RK806_BUCK_DEBUG3 0x32 62*4882a593Smuzhiyun #define RK806_BUCK_DEBUG4 0x33 63*4882a593Smuzhiyun #define RK806_BUCK_DEBUG5 0x34 64*4882a593Smuzhiyun #define RK806_BUCK_DEBUG6 0x35 65*4882a593Smuzhiyun #define RK806_BUCK_DEBUG7 0x36 66*4882a593Smuzhiyun #define RK806_BUCK_DEBUG8 0x37 67*4882a593Smuzhiyun #define RK806_BUCK_DEBUG9 0x38 68*4882a593Smuzhiyun #define RK806_BUCK_DEBUG10 0x39 69*4882a593Smuzhiyun #define RK806_BUCK_DEBUG11 0x3A 70*4882a593Smuzhiyun #define RK806_BUCK_DEBUG12 0x3B 71*4882a593Smuzhiyun #define RK806_BUCK_DEBUG13 0x3C 72*4882a593Smuzhiyun #define RK806_BUCK_DEBUG14 0x3D 73*4882a593Smuzhiyun #define RK806_BUCK_DEBUG15 0x3E 74*4882a593Smuzhiyun #define RK806_BUCK_DEBUG16 0x3F 75*4882a593Smuzhiyun #define RK806_BUCK_DEBUG17 0x40 76*4882a593Smuzhiyun #define RK806_BUCK_DEBUG18 0x41 77*4882a593Smuzhiyun #define RK806_NLDO_IMAX 0x42 78*4882a593Smuzhiyun #define RK806_NLDO1_ON_VSEL 0x43 79*4882a593Smuzhiyun #define RK806_NLDO2_ON_VSEL 0x44 80*4882a593Smuzhiyun #define RK806_NLDO3_ON_VSEL 0x45 81*4882a593Smuzhiyun #define RK806_NLDO4_ON_VSEL 0x46 82*4882a593Smuzhiyun #define RK806_NLDO5_ON_VSEL 0x47 83*4882a593Smuzhiyun #define RK806_NLDO1_SLP_VSEL 0x48 84*4882a593Smuzhiyun #define RK806_NLDO2_SLP_VSEL 0x49 85*4882a593Smuzhiyun #define RK806_NLDO3_SLP_VSEL 0x4A 86*4882a593Smuzhiyun #define RK806_NLDO4_SLP_VSEL 0x4B 87*4882a593Smuzhiyun #define RK806_NLDO5_SLP_VSEL 0x4C 88*4882a593Smuzhiyun #define RK806_PLDO_IMAX 0x4D 89*4882a593Smuzhiyun #define RK806_PLDO1_ON_VSEL 0x4E 90*4882a593Smuzhiyun #define RK806_PLDO2_ON_VSEL 0x4F 91*4882a593Smuzhiyun #define RK806_PLDO3_ON_VSEL 0x50 92*4882a593Smuzhiyun #define RK806_PLDO4_ON_VSEL 0x51 93*4882a593Smuzhiyun #define RK806_PLDO5_ON_VSEL 0x52 94*4882a593Smuzhiyun #define RK806_PLDO6_ON_VSEL 0x53 95*4882a593Smuzhiyun #define RK806_PLDO1_SLP_VSEL 0x54 96*4882a593Smuzhiyun #define RK806_PLDO2_SLP_VSEL 0x55 97*4882a593Smuzhiyun #define RK806_PLDO3_SLP_VSEL 0x56 98*4882a593Smuzhiyun #define RK806_PLDO4_SLP_VSEL 0x57 99*4882a593Smuzhiyun #define RK806_PLDO5_SLP_VSEL 0x58 100*4882a593Smuzhiyun #define RK806_PLDO6_SLP_VSEL 0x59 101*4882a593Smuzhiyun #define RK806_CHIP_NAME 0x5A 102*4882a593Smuzhiyun #define RK806_CHIP_VER 0x5B 103*4882a593Smuzhiyun #define RK806_OTP_VER 0x5C 104*4882a593Smuzhiyun #define RK806_SYS_STS 0x5D 105*4882a593Smuzhiyun #define RK806_SYS_CFG0 0x5E 106*4882a593Smuzhiyun #define RK806_SYS_CFG1 0x5F 107*4882a593Smuzhiyun #define RK806_SYS_OPTION 0x61 108*4882a593Smuzhiyun #define RK806_SLEEP_CONFIG0 0x62 109*4882a593Smuzhiyun #define RK806_SLEEP_CONFIG1 0x63 110*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL0 0x64 111*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL1 0x65 112*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL2 0x66 113*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL3 0x67 114*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL4 0x68 115*4882a593Smuzhiyun #define RK806_SLEEP_CTR_SEL5 0x69 116*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL0 0x6A 117*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL1 0x6B 118*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL2 0x6C 119*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL3 0x6D 120*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL4 0x6E 121*4882a593Smuzhiyun #define RK806_DVS_CTRL_SEL5 0x6F 122*4882a593Smuzhiyun #define RK806_DVS_START_CTRL 0x70 123*4882a593Smuzhiyun #define RK806_SLEEP_GPIO 0x71 124*4882a593Smuzhiyun #define RK806_SYS_CFG3 0x72 125*4882a593Smuzhiyun #define RK806_ON_SOURCE 0x74 126*4882a593Smuzhiyun #define RK806_OFF_SOURCE 0x75 127*4882a593Smuzhiyun #define RK806_PWRON_KEY 0x76 128*4882a593Smuzhiyun #define RK806_INT_STS0 0x77 129*4882a593Smuzhiyun #define RK806_INT_MSK0 0x78 130*4882a593Smuzhiyun #define RK806_INT_STS1 0x79 131*4882a593Smuzhiyun #define RK806_INT_MSK1 0x7A 132*4882a593Smuzhiyun #define RK806_GPIO_INT_CONFIG 0x7B 133*4882a593Smuzhiyun #define RK806_DATA_REG0 0x7C 134*4882a593Smuzhiyun #define RK806_DATA_REG1 0x7D 135*4882a593Smuzhiyun #define RK806_DATA_REG2 0x7E 136*4882a593Smuzhiyun #define RK806_DATA_REG3 0x7F 137*4882a593Smuzhiyun #define RK806_DATA_REG4 0x80 138*4882a593Smuzhiyun #define RK806_DATA_REG5 0x81 139*4882a593Smuzhiyun #define RK806_DATA_REG6 0x82 140*4882a593Smuzhiyun #define RK806_DATA_REG7 0x83 141*4882a593Smuzhiyun #define RK806_DATA_REG8 0x84 142*4882a593Smuzhiyun #define RK806_DATA_REG9 0x85 143*4882a593Smuzhiyun #define RK806_DATA_REG10 0x86 144*4882a593Smuzhiyun #define RK806_DATA_REG11 0x87 145*4882a593Smuzhiyun #define RK806_DATA_REG12 0x88 146*4882a593Smuzhiyun #define RK806_DATA_REG13 0x89 147*4882a593Smuzhiyun #define RK806_DATA_REG14 0x8A 148*4882a593Smuzhiyun #define RK806_DATA_REG15 0x8B 149*4882a593Smuzhiyun #define RK806_TM_REG 0x8C 150*4882a593Smuzhiyun #define RK806_OTP_EN_REG 0x8D 151*4882a593Smuzhiyun #define RK806_FUNC_OTP_EN_REG 0x8E 152*4882a593Smuzhiyun #define RK806_TEST_REG1 0x8F 153*4882a593Smuzhiyun #define RK806_TEST_REG2 0x90 154*4882a593Smuzhiyun #define RK806_TEST_REG3 0x91 155*4882a593Smuzhiyun #define RK806_TEST_REG4 0x92 156*4882a593Smuzhiyun #define RK806_TEST_REG5 0x93 157*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG0 0x94 158*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG1 0x95 159*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG2 0x96 160*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG3 0x97 161*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG4 0x98 162*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG5 0x99 163*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG6 0x9A 164*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG7 0x9B 165*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG8 0x9C 166*4882a593Smuzhiyun #define RK806_BUCK_VSEL_OTP_REG9 0x9D 167*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG0 0x9E 168*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG1 0x9F 169*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG2 0xA0 170*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG3 0xA1 171*4882a593Smuzhiyun #define RK806_NLDO1_VSEL_OTP_REG4 0xA2 172*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG0 0xA3 173*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG1 0xA4 174*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG2 0xA5 175*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG3 0xA6 176*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG4 0xA7 177*4882a593Smuzhiyun #define RK806_PLDO_VSEL_OTP_REG5 0xA8 178*4882a593Smuzhiyun #define RK806_BUCK_EN_OTP_REG1 0xA9 179*4882a593Smuzhiyun #define RK806_NLDO_EN_OTP_REG1 0xAA 180*4882a593Smuzhiyun #define RK806_PLDO_EN_OTP_REG1 0xAB 181*4882a593Smuzhiyun #define RK806_BUCK_FB_RES_OTP_REG1 0xAC 182*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG0 0xAD 183*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG1 0xAE 184*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG2 0xAF 185*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG3 0xB0 186*4882a593Smuzhiyun #define RK806_OTP_RESEV_REG4 0xB1 187*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG0 0xB2 188*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG1 0xB3 189*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG2 0xB4 190*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG3 0xB5 191*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG4 0xB6 192*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG5 0xB7 193*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG6 0xB8 194*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG7 0xB9 195*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG8 0xBA 196*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG9 0xBB 197*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG10 0xBC 198*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG11 0xBD 199*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG12 0xBE 200*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG13 0xBF 201*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG14 0xC0 202*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG15 0xC1 203*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG16 0xC2 204*4882a593Smuzhiyun #define RK806_BUCK_SEQ_REG17 0xC3 205*4882a593Smuzhiyun #define RK806_HK_TRIM_REG1 0xC4 206*4882a593Smuzhiyun #define RK806_HK_TRIM_REG2 0xC5 207*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG1 0xC6 208*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG2 0xC7 209*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG3 0xC8 210*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG4 0xC9 211*4882a593Smuzhiyun #define RK806_BUCK_REF_TRIM_REG5 0xCA 212*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG1 0xCB 213*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG2 0xCC 214*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG3 0xCD 215*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG4 0xCE 216*4882a593Smuzhiyun #define RK806_BUCK_OSC_TRIM_REG5 0xCF 217*4882a593Smuzhiyun #define RK806_BUCK_TRIM_ZCDIOS_REG1 0xD0 218*4882a593Smuzhiyun #define RK806_BUCK_TRIM_ZCDIOS_REG2 0xD1 219*4882a593Smuzhiyun #define RK806_NLDO_TRIM_REG1 0xD2 220*4882a593Smuzhiyun #define RK806_NLDO_TRIM_REG2 0xD3 221*4882a593Smuzhiyun #define RK806_NLDO_TRIM_REG3 0xD4 222*4882a593Smuzhiyun #define RK806_PLDO_TRIM_REG1 0xD5 223*4882a593Smuzhiyun #define RK806_PLDO_TRIM_REG2 0xD6 224*4882a593Smuzhiyun #define RK806_PLDO_TRIM_REG3 0xD7 225*4882a593Smuzhiyun #define RK806_TRIM_ICOMP_REG1 0xD8 226*4882a593Smuzhiyun #define RK806_TRIM_ICOMP_REG2 0xD9 227*4882a593Smuzhiyun #define RK806_EFUSE_CONTROL_REGH 0xDA 228*4882a593Smuzhiyun #define RK806_FUSE_PROG_REG 0xDB 229*4882a593Smuzhiyun #define RK806_MAIN_FSM_STS_REG 0xDD 230*4882a593Smuzhiyun #define RK806_FSM_REG 0xDE 231*4882a593Smuzhiyun #define RK806_TOP_RESEV_OFFR 0xEC 232*4882a593Smuzhiyun #define RK806_TOP_RESEV_POR 0xED 233*4882a593Smuzhiyun #define RK806_BUCK_VRSN_REG1 0xEE 234*4882a593Smuzhiyun #define RK806_BUCK_VRSN_REG2 0xEF 235*4882a593Smuzhiyun #define RK806_NLDO_RLOAD_SEL_REG1 0xF0 236*4882a593Smuzhiyun #define RK806_PLDO_RLOAD_SEL_REG1 0xF1 237*4882a593Smuzhiyun #define RK806_PLDO_RLOAD_SEL_REG2 0xF2 238*4882a593Smuzhiyun #define RK806_BUCK_CMIN_MX_REG1 0xF3 239*4882a593Smuzhiyun #define RK806_BUCK_CMIN_MX_REG2 0xF4 240*4882a593Smuzhiyun #define RK806_BUCK_FREQ_SET_REG1 0xF5 241*4882a593Smuzhiyun #define RK806_BUCK_FREQ_SET_REG2 0xF6 242*4882a593Smuzhiyun #define RK806_BUCK_RS_MEABS_REG1 0xF7 243*4882a593Smuzhiyun #define RK806_BUCK_RS_MEABS_REG2 0xF8 244*4882a593Smuzhiyun #define RK806_BUCK_RS_ZDLEB_REG1 0xF9 245*4882a593Smuzhiyun #define RK806_BUCK_RS_ZDLEB_REG2 0xFA 246*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG1 0xFB 247*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG2 0xFC 248*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG3 0xFD 249*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG4 0xFE 250*4882a593Smuzhiyun #define RK806_BUCK_RSERVE_REG5 0xFF 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun /* INT_STS Register field definitions */ 253*4882a593Smuzhiyun #define RK806_INT_STS_PWRON_FALL BIT(0) 254*4882a593Smuzhiyun #define RK806_INT_STS_PWRON_RISE BIT(1) 255*4882a593Smuzhiyun #define RK806_INT_STS_PWRON BIT(2) 256*4882a593Smuzhiyun #define RK806_INT_STS_PWRON_LP BIT(3) 257*4882a593Smuzhiyun #define RK806_INT_STS_HOTDIE BIT(4) 258*4882a593Smuzhiyun #define RK806_INT_STS_VDC_RISE BIT(5) 259*4882a593Smuzhiyun #define RK806_INT_STS_VDC_FALL BIT(6) 260*4882a593Smuzhiyun #define RK806_INT_STS_VB_LO BIT(7) 261*4882a593Smuzhiyun #define RK806_INT_STS_REV0 BIT(0) 262*4882a593Smuzhiyun #define RK806_INT_STS_REV1 BIT(1) 263*4882a593Smuzhiyun #define RK806_INT_STS_REV2 BIT(2) 264*4882a593Smuzhiyun #define RK806_INT_STS_CRC_ERROR BIT(3) 265*4882a593Smuzhiyun #define RK806_INT_STS_SLP3_GPIO BIT(4) 266*4882a593Smuzhiyun #define RK806_INT_STS_SLP2_GPIO BIT(5) 267*4882a593Smuzhiyun #define RK806_INT_STS_SLP1_GPIO BIT(6) 268*4882a593Smuzhiyun #define RK806_INT_STS_WDT BIT(7) 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun /* spi command */ 271*4882a593Smuzhiyun #define RK806_CMD_READ 0 272*4882a593Smuzhiyun #define RK806_CMD_WRITE BIT(7) 273*4882a593Smuzhiyun #define RK806_CMD_CRC_EN BIT(6) 274*4882a593Smuzhiyun #define RK806_CMD_CRC_DIS 0 275*4882a593Smuzhiyun #define RK806_CMD_LEN_MSK 0x0f 276*4882a593Smuzhiyun #define RK806_REG_H 0x00 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun #define VERSION_AB 0x01 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun enum rk806_reg_id { 281*4882a593Smuzhiyun RK806_ID_DCDC1 = 0, 282*4882a593Smuzhiyun RK806_ID_DCDC2, 283*4882a593Smuzhiyun RK806_ID_DCDC3, 284*4882a593Smuzhiyun RK806_ID_DCDC4, 285*4882a593Smuzhiyun RK806_ID_DCDC5, 286*4882a593Smuzhiyun RK806_ID_DCDC6, 287*4882a593Smuzhiyun RK806_ID_DCDC7, 288*4882a593Smuzhiyun RK806_ID_DCDC8, 289*4882a593Smuzhiyun RK806_ID_DCDC9, 290*4882a593Smuzhiyun RK806_ID_DCDC10, 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun RK806_ID_NLDO1, 293*4882a593Smuzhiyun RK806_ID_NLDO2, 294*4882a593Smuzhiyun RK806_ID_NLDO3, 295*4882a593Smuzhiyun RK806_ID_NLDO4, 296*4882a593Smuzhiyun RK806_ID_NLDO5, 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun RK806_ID_PLDO1, 299*4882a593Smuzhiyun RK806_ID_PLDO2, 300*4882a593Smuzhiyun RK806_ID_PLDO3, 301*4882a593Smuzhiyun RK806_ID_PLDO4, 302*4882a593Smuzhiyun RK806_ID_PLDO5, 303*4882a593Smuzhiyun RK806_ID_PLDO6, 304*4882a593Smuzhiyun RK806_ID_END, 305*4882a593Smuzhiyun }; 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun /* Define the rk806 IRQ numbers */ 308*4882a593Smuzhiyun enum rk806_irqs { 309*4882a593Smuzhiyun /* INT_STS0 registers */ 310*4882a593Smuzhiyun RK806_IRQ_PWRON_FALL, 311*4882a593Smuzhiyun RK806_IRQ_PWRON_RISE, 312*4882a593Smuzhiyun RK806_IRQ_PWRON, 313*4882a593Smuzhiyun RK806_IRQ_PWRON_LP, 314*4882a593Smuzhiyun RK806_IRQ_HOTDIE, 315*4882a593Smuzhiyun RK806_IRQ_VDC_RISE, 316*4882a593Smuzhiyun RK806_IRQ_VDC_FALL, 317*4882a593Smuzhiyun RK806_IRQ_VB_LO, 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun /* INT_STS0 registers */ 320*4882a593Smuzhiyun RK806_IRQ_REV0, 321*4882a593Smuzhiyun RK806_IRQ_REV1, 322*4882a593Smuzhiyun RK806_IRQ_REV2, 323*4882a593Smuzhiyun RK806_IRQ_CRC_ERROR, 324*4882a593Smuzhiyun RK806_IRQ_SLP3_GPIO, 325*4882a593Smuzhiyun RK806_IRQ_SLP2_GPIO, 326*4882a593Smuzhiyun RK806_IRQ_SLP1_GPIO, 327*4882a593Smuzhiyun RK806_IRQ_WDT, 328*4882a593Smuzhiyun }; 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun /* VCC1 low voltage threshold */ 331*4882a593Smuzhiyun enum rk806_lv_sel { 332*4882a593Smuzhiyun VB_LO_SEL_2800, 333*4882a593Smuzhiyun VB_LO_SEL_2900, 334*4882a593Smuzhiyun VB_LO_SEL_3000, 335*4882a593Smuzhiyun VB_LO_SEL_3100, 336*4882a593Smuzhiyun VB_LO_SEL_3200, 337*4882a593Smuzhiyun VB_LO_SEL_3300, 338*4882a593Smuzhiyun VB_LO_SEL_3400, 339*4882a593Smuzhiyun VB_LO_SEL_3500, 340*4882a593Smuzhiyun }; 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun /* system shut down voltage select */ 343*4882a593Smuzhiyun enum rk806_uv_sel { 344*4882a593Smuzhiyun VB_UV_SEL_2700, 345*4882a593Smuzhiyun VB_UV_SEL_2800, 346*4882a593Smuzhiyun VB_UV_SEL_2900, 347*4882a593Smuzhiyun VB_UV_SEL_3000, 348*4882a593Smuzhiyun VB_UV_SEL_3100, 349*4882a593Smuzhiyun VB_UV_SEL_3200, 350*4882a593Smuzhiyun VB_UV_SEL_3300, 351*4882a593Smuzhiyun VB_UV_SEL_3400, 352*4882a593Smuzhiyun }; 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun /* pin function */ 355*4882a593Smuzhiyun enum rk806_pwrctrl_fun { 356*4882a593Smuzhiyun PWRCTRL_NULL_FUN, 357*4882a593Smuzhiyun PWRCTRL_SLP_FUN, 358*4882a593Smuzhiyun PWRCTRL_POWOFF_FUN, 359*4882a593Smuzhiyun PWRCTRL_RST_FUN, 360*4882a593Smuzhiyun PWRCTRL_DVS_FUN, 361*4882a593Smuzhiyun PWRCTRL_GPIO_FUN, 362*4882a593Smuzhiyun }; 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun /* pin pol */ 365*4882a593Smuzhiyun enum rk806_pin_level { 366*4882a593Smuzhiyun POL_LOW, 367*4882a593Smuzhiyun POL_HIGH, 368*4882a593Smuzhiyun }; 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun enum rk806_vsel_ctr_sel { 371*4882a593Smuzhiyun CTR_BY_NO_EFFECT, 372*4882a593Smuzhiyun CTR_BY_PWRCTRL1, 373*4882a593Smuzhiyun CTR_BY_PWRCTRL2, 374*4882a593Smuzhiyun CTR_BY_PWRCTRL3, 375*4882a593Smuzhiyun }; 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun enum rk806_dvs_ctr_sel { 378*4882a593Smuzhiyun CTR_SEL_NO_EFFECT, 379*4882a593Smuzhiyun CTR_SEL_DVS_START1, 380*4882a593Smuzhiyun CTR_SEL_DVS_START2, 381*4882a593Smuzhiyun CTR_SEL_DVS_START3, 382*4882a593Smuzhiyun }; 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun enum rk806_pin_dr_sel { 385*4882a593Smuzhiyun RK806_PIN_INPUT, 386*4882a593Smuzhiyun RK806_PIN_OUTPUT, 387*4882a593Smuzhiyun }; 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun enum rk806_int_pol { 390*4882a593Smuzhiyun RK806_INT_POL_LOW, 391*4882a593Smuzhiyun RK806_INT_POL_HIGH, 392*4882a593Smuzhiyun }; 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun enum rk806_int_fun { 395*4882a593Smuzhiyun RK806_INT_ONLY, 396*4882a593Smuzhiyun RK806_INT_ADN_WKUP, 397*4882a593Smuzhiyun }; 398*4882a593Smuzhiyun 399*4882a593Smuzhiyun enum rk806_dvs_mode { 400*4882a593Smuzhiyun RK806_DVS_NOT_SUPPORT, 401*4882a593Smuzhiyun RK806_DVS_START1, 402*4882a593Smuzhiyun RK806_DVS_START2, 403*4882a593Smuzhiyun RK806_DVS_START3, 404*4882a593Smuzhiyun RK806_DVS_PWRCTRL1, 405*4882a593Smuzhiyun RK806_DVS_PWRCTRL2, 406*4882a593Smuzhiyun RK806_DVS_PWRCTRL3, 407*4882a593Smuzhiyun RK806_DVS_START_PWRCTR1, 408*4882a593Smuzhiyun RK806_DVS_START_PWRCTR2, 409*4882a593Smuzhiyun RK806_DVS_START_PWRCTR3, 410*4882a593Smuzhiyun RK806_DVS_END, 411*4882a593Smuzhiyun }; 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun enum rk806_fields { 414*4882a593Smuzhiyun CHIP_NAME_H, CHIP_NAME_L, CHIP_VER, OTP_VER, 415*4882a593Smuzhiyun POWER_EN0, POWER_EN1, POWER_EN2, POWER_EN3, POWER_EN4, POWER_EN5, 416*4882a593Smuzhiyun BUCK4_EN_MASK, BUCK3_EN_MASK, BUCK2_EN_MASK, BUCK1_EN_MASK, 417*4882a593Smuzhiyun BUCK4_EN, BUCK3_EN, BUCK2_EN, BUCK1_EN, 418*4882a593Smuzhiyun BUCK8_EN_MASK, BUCK7_EN_MASK, BUCK6_EN_MASK, BUCK5_EN_MASK, 419*4882a593Smuzhiyun BUCK8_EN, BUCK7_EN, BUCK6_EN, BUCK5_EN, 420*4882a593Smuzhiyun BUCK10_EN_MASK, BUCK9_EN_MASK, BUCK10_EN, BUCK9_EN, 421*4882a593Smuzhiyun NLDO4_EN_MASK, NLDO3_EN_MASK, NLDO2_EN_MASK, NLDO1_EN_MASK, 422*4882a593Smuzhiyun NLDO4_EN, NLDO3_EN, NLDO2_EN, NLDO1_EN, 423*4882a593Smuzhiyun PLDO4_EN_MASK, PLDO3_EN_MASK, PLDO2_EN_MASK, PLDO1_EN_MASK, 424*4882a593Smuzhiyun PLDO4_EN, PLDO3_EN, PLDO2_EN, PLDO1_EN, 425*4882a593Smuzhiyun NLDO5_EN_MASK, PLDO6_EN_MASK, PLDO5_EN_MASK, 426*4882a593Smuzhiyun NLDO5_EN, PLDO6_EN, PLDO5_EN, 427*4882a593Smuzhiyun BUCK8_SLP_EN, BUCK7_SLP_EN, BUCK6_SLP_EN, BUCK5_SLP_EN, BUCK4_SLP_EN, 428*4882a593Smuzhiyun BUCK3_SLP_EN, BUCK2_SLP_EN, BUCK1_SLP_EN, 429*4882a593Smuzhiyun BUCK10_SLP_EN, BUCK9_SLP_EN, NLDO5_SLP_EN, NLDO4_SLP_EN, NLDO3_SLP_EN, 430*4882a593Smuzhiyun NLDO2_SLP_EN, NLDO1_SLP_EN, 431*4882a593Smuzhiyun PLDO6_SLP_EN, PLDO5_SLP_EN, PLDO4_SLP_EN, PLDO3_SLP_EN, 432*4882a593Smuzhiyun PLDO2_SLP_EN, PLDO1_SLP_EN, 433*4882a593Smuzhiyun BUCK1_ON_VSEL, BUCK2_ON_VSEL, BUCK3_ON_VSEL, BUCK4_ON_VSEL, BUCK5_ON_VSEL, 434*4882a593Smuzhiyun BUCK6_ON_VSEL, BUCK7_ON_VSEL, BUCK8_ON_VSEL, BUCK9_ON_VSEL, BUCK10_ON_VSEL, 435*4882a593Smuzhiyun BUCK1_SLP_VSEL, BUCK2_SLP_VSEL, BUCK3_SLP_VSEL, BUCK4_SLP_VSEL, BUCK5_SLP_VSEL, 436*4882a593Smuzhiyun BUCK6_SLP_VSEL, BUCK7_SLP_VSEL, BUCK8_SLP_VSEL, BUCK9_SLP_VSEL, BUCK10_SLP_VSEL, 437*4882a593Smuzhiyun NLDO1_ON_VSEL, NLDO2_ON_VSEL, NLDO3_ON_VSEL, NLDO4_ON_VSEL, NLDO5_ON_VSEL, 438*4882a593Smuzhiyun NLDO1_SLP_VSEL, NLDO2_SLP_VSEL, NLDO3_SLP_VSEL, NLDO4_SLP_VSEL, NLDO5_SLP_VSEL, 439*4882a593Smuzhiyun PLDO1_ON_VSEL, PLDO2_ON_VSEL, PLDO3_ON_VSEL, PLDO4_ON_VSEL, PLDO5_ON_VSEL, 440*4882a593Smuzhiyun PLDO6_ON_VSEL, 441*4882a593Smuzhiyun PLDO1_SLP_VSEL, PLDO2_SLP_VSEL, PLDO3_SLP_VSEL, PLDO4_SLP_VSEL, PLDO5_SLP_VSEL, 442*4882a593Smuzhiyun PLDO6_SLP_VSEL, 443*4882a593Smuzhiyun BUCK1_RATE, BUCK2_RATE, BUCK3_RATE, BUCK4_RATE, BUCK5_RATE, BUCK6_RATE, 444*4882a593Smuzhiyun BUCK7_RATE, BUCK8_RATE, BUCK9_RATE, BUCK10_RATE, 445*4882a593Smuzhiyun PWRON_STS, VDC_STS, VB_UV_STSS, VB_LO_STS, HOTDIE_STS, TSD_STS, VB_OV_STS, 446*4882a593Smuzhiyun VB_UV_DLY, VB_UV_SEL, VB_LO_ACT, VB_LO_SEL, 447*4882a593Smuzhiyun ABNORDET_EN, TSD_TEMP, HOTDIE_TMP, SYS_OV_SD_EN, SYS_OV_SD_DLY_SEL, DLY_ABN_SHORT, 448*4882a593Smuzhiyun VCCXDET_DIS, OSC_TC, ENB2_2M, ENB_32K, 449*4882a593Smuzhiyun PWRCTRL1_FUN, PWRCTRL2_FUN, PWRCTRL3_FUN, 450*4882a593Smuzhiyun PWRCTRL1_POL, PWRCTRL2_POL, PWRCTRL3_POL, 451*4882a593Smuzhiyun BUCK1_VSEL_CTR_SEL, BUCK2_VSEL_CTR_SEL, BUCK3_VSEL_CTR_SEL, BUCK4_VSEL_CTR_SEL, 452*4882a593Smuzhiyun BUCK5_VSEL_CTR_SEL, BUCK6_VSEL_CTR_SEL, BUCK7_VSEL_CTR_SEL, BUCK8_VSEL_CTR_SEL, 453*4882a593Smuzhiyun BUCK9_VSEL_CTR_SEL, BUCK10_VSEL_CTR_SEL, 454*4882a593Smuzhiyun NLDO1_VSEL_CTR_SEL, NLDO2_VSEL_CTR_SEL, NLDO3_VSEL_CTR_SEL, NLDO4_VSEL_CTR_SEL, 455*4882a593Smuzhiyun NLDO5_VSEL_CTR_SEL, 456*4882a593Smuzhiyun PLDO1_VSEL_CTR_SEL, PLDO2_VSEL_CTR_SEL, PLDO3_VSEL_CTR_SEL, PLDO4_VSEL_CTR_SEL, 457*4882a593Smuzhiyun PLDO5_VSEL_CTR_SEL, PLDO6_VSEL_CTR_SEL, 458*4882a593Smuzhiyun BUCK1_DVS_CTR_SEL, BUCK2_DVS_CTR_SEL, BUCK3_DVS_CTR_SEL, BUCK4_DVS_CTR_SEL, 459*4882a593Smuzhiyun BUCK5_DVS_CTR_SEL, BUCK6_DVS_CTR_SEL, BUCK7_DVS_CTR_SEL, BUCK8_DVS_CTR_SEL, 460*4882a593Smuzhiyun BUCK9_DVS_CTR_SEL, BUCK10_DVS_CTR_SEL, 461*4882a593Smuzhiyun NLDO1_DVS_CTR_SEL, NLDO2_DVS_CTR_SEL, NLDO3_DVS_CTR_SEL, NLDO4_DVS_CTR_SEL, 462*4882a593Smuzhiyun NLDO5_DVS_CTR_SEL, 463*4882a593Smuzhiyun PLDO1_DVS_CTR_SEL, PLDO2_DVS_CTR_SEL, PLDO3_DVS_CTR_SEL, PLDO4_DVS_CTR_SEL, 464*4882a593Smuzhiyun PLDO5_DVS_CTR_SEL, PLDO6_DVS_CTR_SEL, 465*4882a593Smuzhiyun DVS_START1, DVS_START2, DVS_START3, 466*4882a593Smuzhiyun SLP3_DATA, SLP2_DATA, SLP1_DATA, SLP3_DR, SLP2_DR, SLP1_DR, 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun RST_FUN, DEV_RST, DEV_SLP, SLAVE_RESTART_FUN, DEV_OFF, 469*4882a593Smuzhiyun WDT_CLR, WDT_EN, WDT_SET, ON_SOURCE, OFF_SOURCE, 470*4882a593Smuzhiyun ON_PWRON, ON_VDC, RESTART_RESETB, RESTART_PWRON_LP, RESTART_SLP, 471*4882a593Smuzhiyun RESTART_DEV_RST, RESTART_WDT, 472*4882a593Smuzhiyun OFF_SLP, VB_SYS_OV, OFF_TSD, OFF_DEV_OFF, OFF_PWRON_LP, OFF_VB_LO, 473*4882a593Smuzhiyun PWRON_ON_TIME, PWRON_LP_ACT, PWRON_LP_OFF_TIME, PWRON_LP_TM_SEL, PWRON_DB_SEL, 474*4882a593Smuzhiyun VB_LO_INT, VDC_FALL_INT, VDC_RISE_INT, HOTDIE_INT, PWRON_LP_INT, PWRON_INT, 475*4882a593Smuzhiyun PWRON_RISE_INT, PWRON_FALL_INT, 476*4882a593Smuzhiyun VB_LO_IM, VDC_FALL_INT_IM, VDC_RISE_IM, HOTDIE_IM, PWRON_LP_IM, 477*4882a593Smuzhiyun PWRON_IM, PWRON_RISE_INT_IM, PWRON_FALL_INT_IM, 478*4882a593Smuzhiyun WDT_INT, SLP1_GPIO_INT, SLP2_GPIO_INT, SLP3_GPIO_INT, 479*4882a593Smuzhiyun WDT_INT_IM, SLP1_GPIO_IM, SLP2_GPIO_IM, SLP3_GPIO_IM, 480*4882a593Smuzhiyun INT_FUNCTION, INT_POL, INT_FC_EN, 481*4882a593Smuzhiyun LDO_RATE, BUCK1_RATE2, BUCK2_RATE2, BUCK3_RATE2, BUCK4_RATE2, 482*4882a593Smuzhiyun BUCK5_RATE2, BUCK6_RATE2, BUCK7_RATE2, BUCK8_RATE2, BUCK9_RATE2, 483*4882a593Smuzhiyun BUCK10_RATE2, 484*4882a593Smuzhiyun F_MAX_FIELDS 485*4882a593Smuzhiyun }; 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun struct rk806_platform_data { 488*4882a593Smuzhiyun int low_voltage_threshold; 489*4882a593Smuzhiyun int shutdown_voltage_threshold; 490*4882a593Smuzhiyun int force_shutdown_enable; 491*4882a593Smuzhiyun int shutdown_temperture_threshold; 492*4882a593Smuzhiyun int hotdie_temperture_threshold; 493*4882a593Smuzhiyun }; 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun struct rk806_pin_info { 496*4882a593Smuzhiyun struct pinctrl *p; 497*4882a593Smuzhiyun struct pinctrl_state *default_st; 498*4882a593Smuzhiyun struct pinctrl_state *power_off; 499*4882a593Smuzhiyun struct pinctrl_state *reset; 500*4882a593Smuzhiyun struct pinctrl_state *sleep; 501*4882a593Smuzhiyun struct pinctrl_state *dvs; 502*4882a593Smuzhiyun }; 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun /* 505*4882a593Smuzhiyun * struct rk806 - state holder for the rk806 driver 506*4882a593Smuzhiyun * 507*4882a593Smuzhiyun * Device data may be used to access the rk806 chip 508*4882a593Smuzhiyun */ 509*4882a593Smuzhiyun struct rk806 { 510*4882a593Smuzhiyun struct device *dev; 511*4882a593Smuzhiyun struct regmap *regmap; 512*4882a593Smuzhiyun struct regmap_field *rmap_fields[F_MAX_FIELDS]; 513*4882a593Smuzhiyun /* IRQ Data */ 514*4882a593Smuzhiyun int irq; 515*4882a593Smuzhiyun struct regmap_irq_chip_data *irq_data; 516*4882a593Smuzhiyun struct rk806_platform_data *pdata; 517*4882a593Smuzhiyun struct rk806_pin_info *pins; 518*4882a593Smuzhiyun int vb_lo_irq; 519*4882a593Smuzhiyun }; 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun extern const struct regmap_config rk806_regmap_config_spi; 522*4882a593Smuzhiyun int rk806_device_init(struct rk806 *rk806); 523*4882a593Smuzhiyun int rk806_device_exit(struct rk806 *rk806); 524*4882a593Smuzhiyun int rk806_field_write(struct rk806 *rk806, 525*4882a593Smuzhiyun enum rk806_fields field_id, 526*4882a593Smuzhiyun unsigned int val); 527*4882a593Smuzhiyun int rk806_field_read(struct rk806 *rk806, 528*4882a593Smuzhiyun enum rk806_fields field_id); 529*4882a593Smuzhiyun #endif /* __LINUX_REGULATOR_RK806_H */ 530