1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Register definitions for Rockchip's RK808/RK818 PMIC 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Author: Chris Zhong <zyw@rock-chips.com> 8*4882a593Smuzhiyun * Author: Zhang Qing <zhangqing@rock-chips.com> 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Copyright (C) 2016 PHYTEC Messtechnik GmbH 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * Author: Wadim Egorov <w.egorov@phytec.de> 13*4882a593Smuzhiyun */ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #ifndef __LINUX_REGULATOR_RK808_H 16*4882a593Smuzhiyun #define __LINUX_REGULATOR_RK808_H 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #include <linux/regulator/machine.h> 19*4882a593Smuzhiyun #include <linux/regmap.h> 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* 22*4882a593Smuzhiyun * rk808 Global Register Map. 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define RK808_DCDC1 0 /* (0+RK808_START) */ 26*4882a593Smuzhiyun #define RK808_LDO1 4 /* (4+RK808_START) */ 27*4882a593Smuzhiyun #define RK808_NUM_REGULATORS 14 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun enum rk808_reg { 30*4882a593Smuzhiyun RK808_ID_DCDC1, 31*4882a593Smuzhiyun RK808_ID_DCDC2, 32*4882a593Smuzhiyun RK808_ID_DCDC3, 33*4882a593Smuzhiyun RK808_ID_DCDC4, 34*4882a593Smuzhiyun RK808_ID_LDO1, 35*4882a593Smuzhiyun RK808_ID_LDO2, 36*4882a593Smuzhiyun RK808_ID_LDO3, 37*4882a593Smuzhiyun RK808_ID_LDO4, 38*4882a593Smuzhiyun RK808_ID_LDO5, 39*4882a593Smuzhiyun RK808_ID_LDO6, 40*4882a593Smuzhiyun RK808_ID_LDO7, 41*4882a593Smuzhiyun RK808_ID_LDO8, 42*4882a593Smuzhiyun RK808_ID_SWITCH1, 43*4882a593Smuzhiyun RK808_ID_SWITCH2, 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define RK808_SECONDS_REG 0x00 47*4882a593Smuzhiyun #define RK808_MINUTES_REG 0x01 48*4882a593Smuzhiyun #define RK808_HOURS_REG 0x02 49*4882a593Smuzhiyun #define RK808_DAYS_REG 0x03 50*4882a593Smuzhiyun #define RK808_MONTHS_REG 0x04 51*4882a593Smuzhiyun #define RK808_YEARS_REG 0x05 52*4882a593Smuzhiyun #define RK808_WEEKS_REG 0x06 53*4882a593Smuzhiyun #define RK808_ALARM_SECONDS_REG 0x08 54*4882a593Smuzhiyun #define RK808_ALARM_MINUTES_REG 0x09 55*4882a593Smuzhiyun #define RK808_ALARM_HOURS_REG 0x0a 56*4882a593Smuzhiyun #define RK808_ALARM_DAYS_REG 0x0b 57*4882a593Smuzhiyun #define RK808_ALARM_MONTHS_REG 0x0c 58*4882a593Smuzhiyun #define RK808_ALARM_YEARS_REG 0x0d 59*4882a593Smuzhiyun #define RK808_RTC_CTRL_REG 0x10 60*4882a593Smuzhiyun #define RK808_RTC_STATUS_REG 0x11 61*4882a593Smuzhiyun #define RK808_RTC_INT_REG 0x12 62*4882a593Smuzhiyun #define RK808_RTC_COMP_LSB_REG 0x13 63*4882a593Smuzhiyun #define RK808_RTC_COMP_MSB_REG 0x14 64*4882a593Smuzhiyun #define RK808_ID_MSB 0x17 65*4882a593Smuzhiyun #define RK808_ID_LSB 0x18 66*4882a593Smuzhiyun #define RK808_CLK32OUT_REG 0x20 67*4882a593Smuzhiyun #define RK808_VB_MON_REG 0x21 68*4882a593Smuzhiyun #define RK808_THERMAL_REG 0x22 69*4882a593Smuzhiyun #define RK808_DCDC_EN_REG 0x23 70*4882a593Smuzhiyun #define RK808_LDO_EN_REG 0x24 71*4882a593Smuzhiyun #define RK808_SLEEP_SET_OFF_REG1 0x25 72*4882a593Smuzhiyun #define RK808_SLEEP_SET_OFF_REG2 0x26 73*4882a593Smuzhiyun #define RK808_DCDC_UV_STS_REG 0x27 74*4882a593Smuzhiyun #define RK808_DCDC_UV_ACT_REG 0x28 75*4882a593Smuzhiyun #define RK808_LDO_UV_STS_REG 0x29 76*4882a593Smuzhiyun #define RK808_LDO_UV_ACT_REG 0x2a 77*4882a593Smuzhiyun #define RK808_DCDC_PG_REG 0x2b 78*4882a593Smuzhiyun #define RK808_LDO_PG_REG 0x2c 79*4882a593Smuzhiyun #define RK808_VOUT_MON_TDB_REG 0x2d 80*4882a593Smuzhiyun #define RK808_BUCK1_CONFIG_REG 0x2e 81*4882a593Smuzhiyun #define RK808_BUCK1_ON_VSEL_REG 0x2f 82*4882a593Smuzhiyun #define RK808_BUCK1_SLP_VSEL_REG 0x30 83*4882a593Smuzhiyun #define RK808_BUCK1_DVS_VSEL_REG 0x31 84*4882a593Smuzhiyun #define RK808_BUCK2_CONFIG_REG 0x32 85*4882a593Smuzhiyun #define RK808_BUCK2_ON_VSEL_REG 0x33 86*4882a593Smuzhiyun #define RK808_BUCK2_SLP_VSEL_REG 0x34 87*4882a593Smuzhiyun #define RK808_BUCK2_DVS_VSEL_REG 0x35 88*4882a593Smuzhiyun #define RK808_BUCK3_CONFIG_REG 0x36 89*4882a593Smuzhiyun #define RK808_BUCK4_CONFIG_REG 0x37 90*4882a593Smuzhiyun #define RK808_BUCK4_ON_VSEL_REG 0x38 91*4882a593Smuzhiyun #define RK808_BUCK4_SLP_VSEL_REG 0x39 92*4882a593Smuzhiyun #define RK808_BOOST_CONFIG_REG 0x3a 93*4882a593Smuzhiyun #define RK808_LDO1_ON_VSEL_REG 0x3b 94*4882a593Smuzhiyun #define RK808_LDO1_SLP_VSEL_REG 0x3c 95*4882a593Smuzhiyun #define RK808_LDO2_ON_VSEL_REG 0x3d 96*4882a593Smuzhiyun #define RK808_LDO2_SLP_VSEL_REG 0x3e 97*4882a593Smuzhiyun #define RK808_LDO3_ON_VSEL_REG 0x3f 98*4882a593Smuzhiyun #define RK808_LDO3_SLP_VSEL_REG 0x40 99*4882a593Smuzhiyun #define RK808_LDO4_ON_VSEL_REG 0x41 100*4882a593Smuzhiyun #define RK808_LDO4_SLP_VSEL_REG 0x42 101*4882a593Smuzhiyun #define RK808_LDO5_ON_VSEL_REG 0x43 102*4882a593Smuzhiyun #define RK808_LDO5_SLP_VSEL_REG 0x44 103*4882a593Smuzhiyun #define RK808_LDO6_ON_VSEL_REG 0x45 104*4882a593Smuzhiyun #define RK808_LDO6_SLP_VSEL_REG 0x46 105*4882a593Smuzhiyun #define RK808_LDO7_ON_VSEL_REG 0x47 106*4882a593Smuzhiyun #define RK808_LDO7_SLP_VSEL_REG 0x48 107*4882a593Smuzhiyun #define RK808_LDO8_ON_VSEL_REG 0x49 108*4882a593Smuzhiyun #define RK808_LDO8_SLP_VSEL_REG 0x4a 109*4882a593Smuzhiyun #define RK808_DEVCTRL_REG 0x4b 110*4882a593Smuzhiyun #define RK808_INT_STS_REG1 0x4c 111*4882a593Smuzhiyun #define RK808_INT_STS_MSK_REG1 0x4d 112*4882a593Smuzhiyun #define RK808_INT_STS_REG2 0x4e 113*4882a593Smuzhiyun #define RK808_INT_STS_MSK_REG2 0x4f 114*4882a593Smuzhiyun #define RK808_IO_POL_REG 0x50 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun /* RK816 */ 117*4882a593Smuzhiyun enum rk816_reg { 118*4882a593Smuzhiyun RK816_ID_DCDC1, 119*4882a593Smuzhiyun RK816_ID_DCDC2, 120*4882a593Smuzhiyun RK816_ID_DCDC3, 121*4882a593Smuzhiyun RK816_ID_DCDC4, 122*4882a593Smuzhiyun RK816_ID_LDO1, 123*4882a593Smuzhiyun RK816_ID_LDO2, 124*4882a593Smuzhiyun RK816_ID_LDO3, 125*4882a593Smuzhiyun RK816_ID_LDO4, 126*4882a593Smuzhiyun RK816_ID_LDO5, 127*4882a593Smuzhiyun RK816_ID_LDO6, 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun /*VERSION REGISTER*/ 131*4882a593Smuzhiyun #define RK816_CHIP_NAME_REG 0x17 132*4882a593Smuzhiyun #define RK816_CHIP_VER_REG 0x18 133*4882a593Smuzhiyun #define RK816_OTP_VER_REG 0x19 134*4882a593Smuzhiyun #define RK816_NUM_REGULATORS 10 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /*POWER ON/OFF REGISTER*/ 137*4882a593Smuzhiyun #define RK816_VB_MON_REG 0x21 138*4882a593Smuzhiyun #define RK816_THERMAL_REG 0x22 139*4882a593Smuzhiyun #define RK816_PWRON_LP_INT_TIME_REG 0x47 140*4882a593Smuzhiyun #define RK816_PWRON_DB_REG 0x48 141*4882a593Smuzhiyun #define RK816_DEV_CTRL_REG 0x4B 142*4882a593Smuzhiyun #define RK816_ON_SOURCE_REG 0xAE 143*4882a593Smuzhiyun #define RK816_OFF_SOURCE_REG 0xAF 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /*POWER CHANNELS ENABLE REGISTER*/ 146*4882a593Smuzhiyun #define RK816_DCDC_EN_REG1 0x23 147*4882a593Smuzhiyun #define RK816_DCDC_EN_REG2 0x24 148*4882a593Smuzhiyun #define RK816_SLP_DCDC_EN_REG 0x25 149*4882a593Smuzhiyun #define RK816_SLP_LDO_EN_REG 0x26 150*4882a593Smuzhiyun #define RK816_LDO_EN_REG1 0x27 151*4882a593Smuzhiyun #define RK816_LDO_EN_REG2 0x28 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /*BUCK AND LDO CONFIG REGISTER*/ 154*4882a593Smuzhiyun #define RK816_BUCK1_CONFIG_REG 0x2E 155*4882a593Smuzhiyun #define RK816_BUCK1_ON_VSEL_REG 0x2F 156*4882a593Smuzhiyun #define RK816_BUCK1_SLP_VSEL_REG 0x30 157*4882a593Smuzhiyun #define RK816_BUCK2_CONFIG_REG 0x32 158*4882a593Smuzhiyun #define RK816_BUCK2_ON_VSEL_REG 0x33 159*4882a593Smuzhiyun #define RK816_BUCK2_SLP_VSEL_REG 0x34 160*4882a593Smuzhiyun #define RK816_BUCK3_CONFIG_REG 0x36 161*4882a593Smuzhiyun #define RK816_BUCK4_CONFIG_REG 0x37 162*4882a593Smuzhiyun #define RK816_BUCK4_ON_VSEL_REG 0x38 163*4882a593Smuzhiyun #define RK816_BUCK4_SLP_VSEL_REG 0x39 164*4882a593Smuzhiyun #define RK816_LDO1_ON_VSEL_REG 0x3B 165*4882a593Smuzhiyun #define RK816_LDO1_SLP_VSEL_REG 0x3C 166*4882a593Smuzhiyun #define RK816_LDO2_ON_VSEL_REG 0x3D 167*4882a593Smuzhiyun #define RK816_LDO2_SLP_VSEL_REG 0x3E 168*4882a593Smuzhiyun #define RK816_LDO3_ON_VSEL_REG 0x3F 169*4882a593Smuzhiyun #define RK816_LDO3_SLP_VSEL_REG 0x40 170*4882a593Smuzhiyun #define RK816_LDO4_ON_VSEL_REG 0x41 171*4882a593Smuzhiyun #define RK816_LDO4_SLP_VSEL_REG 0x42 172*4882a593Smuzhiyun #define RK816_LDO5_ON_VSEL_REG 0x43 173*4882a593Smuzhiyun #define RK816_LDO5_SLP_VSEL_REG 0x44 174*4882a593Smuzhiyun #define RK816_LDO6_ON_VSEL_REG 0x45 175*4882a593Smuzhiyun #define RK816_LDO6_SLP_VSEL_REG 0x46 176*4882a593Smuzhiyun #define RK816_GPIO_IO_POL_REG 0x50 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun /*CHARGER BOOST AND OTG REGISTER*/ 179*4882a593Smuzhiyun #define RK816_OTG_BUCK_LDO_CONFIG_REG 0x2A 180*4882a593Smuzhiyun #define RK816_CHRG_CONFIG_REG 0x2B 181*4882a593Smuzhiyun #define RK816_BOOST_ON_VESL_REG 0x54 182*4882a593Smuzhiyun #define RK816_BOOST_SLP_VSEL_REG 0x55 183*4882a593Smuzhiyun #define RK816_CHRG_BOOST_CONFIG_REG 0x9A 184*4882a593Smuzhiyun #define RK816_SUP_STS_REG 0xA0 185*4882a593Smuzhiyun #define RK816_USB_CTRL_REG 0xA1 186*4882a593Smuzhiyun #define RK816_CHRG_CTRL_REG1 0xA3 187*4882a593Smuzhiyun #define RK816_CHRG_CTRL_REG2 0xA4 188*4882a593Smuzhiyun #define RK816_CHRG_CTRL_REG3 0xA5 189*4882a593Smuzhiyun #define RK816_BAT_CTRL_REG 0xA6 190*4882a593Smuzhiyun #define RK816_BAT_HTS_TS_REG 0xA8 191*4882a593Smuzhiyun #define RK816_BAT_LTS_TS_REG 0xA9 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun #define RK816_TS_CTRL_REG 0xAC 194*4882a593Smuzhiyun #define RK816_ADC_CTRL_REG 0xAD 195*4882a593Smuzhiyun #define RK816_GGCON_REG 0xB0 196*4882a593Smuzhiyun #define RK816_GGSTS_REG 0xB1 197*4882a593Smuzhiyun #define RK816_ZERO_CUR_ADC_REGH 0xB2 198*4882a593Smuzhiyun #define RK816_ZERO_CUR_ADC_REGL 0xB3 199*4882a593Smuzhiyun #define RK816_GASCNT_CAL_REG3 0xB4 200*4882a593Smuzhiyun #define RK816_GASCNT_CAL_REG2 0xB5 201*4882a593Smuzhiyun #define RK816_GASCNT_CAL_REG1 0xB6 202*4882a593Smuzhiyun #define RK816_GASCNT_CAL_REG0 0xB7 203*4882a593Smuzhiyun #define RK816_GASCNT_REG3 0xB8 204*4882a593Smuzhiyun #define RK816_GASCNT_REG2 0xB9 205*4882a593Smuzhiyun #define RK816_GASCNT_REG1 0xBA 206*4882a593Smuzhiyun #define RK816_GASCNT_REG0 0xBB 207*4882a593Smuzhiyun #define RK816_BAT_CUR_AVG_REGH 0xBC 208*4882a593Smuzhiyun #define RK816_BAT_CUR_AVG_REGL 0xBD 209*4882a593Smuzhiyun #define RK816_TS_ADC_REGH 0xBE 210*4882a593Smuzhiyun #define RK816_TS_ADC_REGL 0xBF 211*4882a593Smuzhiyun #define RK816_USB_ADC_REGH 0xC0 212*4882a593Smuzhiyun #define RK816_USB_ADC_REGL 0xC1 213*4882a593Smuzhiyun #define RK816_BAT_OCV_REGH 0xC2 214*4882a593Smuzhiyun #define RK816_BAT_OCV_REGL 0xC3 215*4882a593Smuzhiyun #define RK816_BAT_VOL_REGH 0xC4 216*4882a593Smuzhiyun #define RK816_BAT_VOL_REGL 0xC5 217*4882a593Smuzhiyun #define RK816_RELAX_ENTRY_THRES_REGH 0xC6 218*4882a593Smuzhiyun #define RK816_RELAX_ENTRY_THRES_REGL 0xC7 219*4882a593Smuzhiyun #define RK816_RELAX_EXIT_THRES_REGH 0xC8 220*4882a593Smuzhiyun #define RK816_RELAX_EXIT_THRES_REGL 0xC9 221*4882a593Smuzhiyun #define RK816_RELAX_VOL1_REGH 0xCA 222*4882a593Smuzhiyun #define RK816_RELAX_VOL1_REGL 0xCB 223*4882a593Smuzhiyun #define RK816_RELAX_VOL2_REGH 0xCC 224*4882a593Smuzhiyun #define RK816_RELAX_VOL2_REGL 0xCD 225*4882a593Smuzhiyun #define RK816_RELAX_CUR1_REGH 0xCE 226*4882a593Smuzhiyun #define RK816_RELAX_CUR1_REGL 0xCF 227*4882a593Smuzhiyun #define RK816_RELAX_CUR2_REGH 0xD0 228*4882a593Smuzhiyun #define RK816_RELAX_CUR2_REGL 0xD1 229*4882a593Smuzhiyun #define RK816_CAL_OFFSET_REGH 0xD2 230*4882a593Smuzhiyun #define RK816_CAL_OFFSET_REGL 0xD3 231*4882a593Smuzhiyun #define RK816_NON_ACT_TIMER_CNT_REG 0xD4 232*4882a593Smuzhiyun #define RK816_VCALIB0_REGH 0xD5 233*4882a593Smuzhiyun #define RK816_VCALIB0_REGL 0xD6 234*4882a593Smuzhiyun #define RK816_VCALIB1_REGH 0xD7 235*4882a593Smuzhiyun #define RK816_VCALIB1_REGL 0xD8 236*4882a593Smuzhiyun #define RK816_FCC_GASCNT_REG3 0xD9 237*4882a593Smuzhiyun #define RK816_FCC_GASCNT_REG2 0xDA 238*4882a593Smuzhiyun #define RK816_FCC_GASCNT_REG1 0xDB 239*4882a593Smuzhiyun #define RK816_FCC_GASCNT_REG0 0xDC 240*4882a593Smuzhiyun #define RK816_IOFFSET_REGH 0xDD 241*4882a593Smuzhiyun #define RK816_IOFFSET_REGL 0xDE 242*4882a593Smuzhiyun #define RK816_SLEEP_CON_SAMP_CUR_REG 0xDF 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun /*DATA REGISTER*/ 245*4882a593Smuzhiyun #define RK816_SOC_REG 0xE0 246*4882a593Smuzhiyun #define RK816_REMAIN_CAP_REG3 0xE1 247*4882a593Smuzhiyun #define RK816_REMAIN_CAP_REG2 0xE2 248*4882a593Smuzhiyun #define RK816_REMAIN_CAP_REG1 0xE3 249*4882a593Smuzhiyun #define RK816_REMAIN_CAP_REG0 0xE4 250*4882a593Smuzhiyun #define RK816_UPDATE_LEVE_REG 0xE5 251*4882a593Smuzhiyun #define RK816_NEW_FCC_REG3 0xE6 252*4882a593Smuzhiyun #define RK816_NEW_FCC_REG2 0xE7 253*4882a593Smuzhiyun #define RK816_NEW_FCC_REG1 0xE8 254*4882a593Smuzhiyun #define RK816_NEW_FCC_REG0 0xE9 255*4882a593Smuzhiyun #define RK816_NON_ACT_TIMER_CNT_REG_SAVE 0xEA 256*4882a593Smuzhiyun #define RK816_OCV_VOL_VALID_REG 0xEB 257*4882a593Smuzhiyun #define RK816_REBOOT_CNT_REG 0xEC 258*4882a593Smuzhiyun #define RK816_PCB_IOFFSET_REG 0xED 259*4882a593Smuzhiyun #define RK816_MISC_MARK_REG 0xEE 260*4882a593Smuzhiyun #define RK816_HALT_CNT_REG 0xEF 261*4882a593Smuzhiyun #define RK816_CALC_REST_REGH 0xF0 262*4882a593Smuzhiyun #define RK816_CALC_REST_REGL 0xF1 263*4882a593Smuzhiyun #define DATA18_REG 0xF2 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun /*INTERRUPT REGISTER*/ 266*4882a593Smuzhiyun #define RK816_INT_STS_REG1 0x49 267*4882a593Smuzhiyun #define RK816_INT_STS_MSK_REG1 0x4A 268*4882a593Smuzhiyun #define RK816_INT_STS_REG2 0x4C 269*4882a593Smuzhiyun #define RK816_INT_STS_MSK_REG2 0x4D 270*4882a593Smuzhiyun #define RK816_INT_STS_REG3 0x4E 271*4882a593Smuzhiyun #define RK816_INT_STS_MSK_REG3 0x4F 272*4882a593Smuzhiyun #define RK816_GPIO_IO_POL_REG 0x50 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun #define RK816_DATA18_REG 0xF2 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun /* IRQ Definitions */ 277*4882a593Smuzhiyun #define RK816_IRQ_PWRON_FALL 0 278*4882a593Smuzhiyun #define RK816_IRQ_PWRON_RISE 1 279*4882a593Smuzhiyun #define RK816_IRQ_VB_LOW 2 280*4882a593Smuzhiyun #define RK816_IRQ_PWRON 3 281*4882a593Smuzhiyun #define RK816_IRQ_PWRON_LP 4 282*4882a593Smuzhiyun #define RK816_IRQ_HOTDIE 5 283*4882a593Smuzhiyun #define RK816_IRQ_RTC_ALARM 6 284*4882a593Smuzhiyun #define RK816_IRQ_RTC_PERIOD 7 285*4882a593Smuzhiyun #define RK816_IRQ_USB_OV 8 286*4882a593Smuzhiyun #define RK816_IRQ_PLUG_IN 9 287*4882a593Smuzhiyun #define RK816_IRQ_PLUG_OUT 10 288*4882a593Smuzhiyun #define RK816_IRQ_CHG_OK 11 289*4882a593Smuzhiyun #define RK816_IRQ_CHG_TE 12 290*4882a593Smuzhiyun #define RK816_IRQ_CHG_TS 13 291*4882a593Smuzhiyun #define RK816_IRQ_CHG_CVTLIM 14 292*4882a593Smuzhiyun #define RK816_IRQ_DISCHG_ILIM 15 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun #define RK816_IRQ_PWRON_FALL_MSK BIT(5) 295*4882a593Smuzhiyun #define RK816_IRQ_PWRON_RISE_MSK BIT(6) 296*4882a593Smuzhiyun #define RK816_IRQ_VB_LOW_MSK BIT(1) 297*4882a593Smuzhiyun #define RK816_IRQ_PWRON_MSK BIT(2) 298*4882a593Smuzhiyun #define RK816_IRQ_PWRON_LP_MSK BIT(3) 299*4882a593Smuzhiyun #define RK816_IRQ_HOTDIE_MSK BIT(4) 300*4882a593Smuzhiyun #define RK816_IRQ_RTC_ALARM_MSK BIT(5) 301*4882a593Smuzhiyun #define RK816_IRQ_RTC_PERIOD_MSK BIT(6) 302*4882a593Smuzhiyun #define RK816_IRQ_USB_OV_MSK BIT(7) 303*4882a593Smuzhiyun #define RK816_IRQ_PLUG_IN_MSK BIT(0) 304*4882a593Smuzhiyun #define RK816_IRQ_PLUG_OUT_MSK BIT(1) 305*4882a593Smuzhiyun #define RK816_IRQ_CHG_OK_MSK BIT(2) 306*4882a593Smuzhiyun #define RK816_IRQ_CHG_TE_MSK BIT(3) 307*4882a593Smuzhiyun #define RK816_IRQ_CHG_TS_MSK BIT(4) 308*4882a593Smuzhiyun #define RK816_IRQ_CHG_CVTLIM_MSK BIT(6) 309*4882a593Smuzhiyun #define RK816_IRQ_DISCHG_ILIM_MSK BIT(7) 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun #define RK816_VBAT_LOW_2V8 0x00 312*4882a593Smuzhiyun #define RK816_VBAT_LOW_2V9 0x01 313*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V0 0x02 314*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V1 0x03 315*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V2 0x04 316*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V3 0x05 317*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V4 0x06 318*4882a593Smuzhiyun #define RK816_VBAT_LOW_3V5 0x07 319*4882a593Smuzhiyun #define RK816_PWR_FALL_INT_STATUS (0x1 << 5) 320*4882a593Smuzhiyun #define RK816_PWR_RISE_INT_STATUS (0x1 << 6) 321*4882a593Smuzhiyun #define RK816_ALARM_INT_STATUS (0x1 << 5) 322*4882a593Smuzhiyun #define EN_VBAT_LOW_IRQ (0x1 << 4) 323*4882a593Smuzhiyun #define VBAT_LOW_ACT_MASK (0x1 << 4) 324*4882a593Smuzhiyun #define RTC_TIMER_ALARM_INT_MSK (0x3 << 2) 325*4882a593Smuzhiyun #define RTC_TIMER_ALARM_INT_DIS (0x0 << 2) 326*4882a593Smuzhiyun #define RTC_PERIOD_ALARM_INT_MSK (0x3 << 5) 327*4882a593Smuzhiyun #define RTC_PERIOD_ALARM_INT_ST (0x3 << 5) 328*4882a593Smuzhiyun #define RTC_PERIOD_ALARM_INT_DIS (0x3 << 5) 329*4882a593Smuzhiyun #define RTC_PERIOD_ALARM_INT_EN (0x9f) 330*4882a593Smuzhiyun #define REG_WRITE_MSK 0xff 331*4882a593Smuzhiyun #define BUCK4_MAX_ILIMIT 0x2c 332*4882a593Smuzhiyun #define BUCK_RATE_MSK (0x3 << 3) 333*4882a593Smuzhiyun #define BUCK_RATE_12_5MV_US (0x2 << 3) 334*4882a593Smuzhiyun #define ALL_INT_FLAGS_ST 0xff 335*4882a593Smuzhiyun #define PLUGIN_OUT_INT_EN 0xfc 336*4882a593Smuzhiyun #define RK816_PWRON_FALL_RISE_INT_EN 0x9f 337*4882a593Smuzhiyun #define BUCK1_2_IMAX_MAX (0x3 << 6) 338*4882a593Smuzhiyun #define BUCK3_4_IMAX_MAX (0x3 << 3) 339*4882a593Smuzhiyun #define BOOST_DISABLE ((0x1 << 5) | (0x0 << 1)) 340*4882a593Smuzhiyun #define BUCK4_VRP_3PERCENT 0xc0 341*4882a593Smuzhiyun #define RK816_BUCK_DVS_CONFIRM (0x1 << 7) 342*4882a593Smuzhiyun #define RK816_TYPE_ES2 0x05 343*4882a593Smuzhiyun #define RK816_CHIP_VERSION_MASK 0x0f 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun /* RK818 */ 346*4882a593Smuzhiyun #define RK818_DCDC1 0 347*4882a593Smuzhiyun #define RK818_LDO1 4 348*4882a593Smuzhiyun #define RK818_NUM_REGULATORS 17 349*4882a593Smuzhiyun 350*4882a593Smuzhiyun enum rk818_reg { 351*4882a593Smuzhiyun RK818_ID_DCDC1, 352*4882a593Smuzhiyun RK818_ID_DCDC2, 353*4882a593Smuzhiyun RK818_ID_DCDC3, 354*4882a593Smuzhiyun RK818_ID_DCDC4, 355*4882a593Smuzhiyun RK818_ID_BOOST, 356*4882a593Smuzhiyun RK818_ID_LDO1, 357*4882a593Smuzhiyun RK818_ID_LDO2, 358*4882a593Smuzhiyun RK818_ID_LDO3, 359*4882a593Smuzhiyun RK818_ID_LDO4, 360*4882a593Smuzhiyun RK818_ID_LDO5, 361*4882a593Smuzhiyun RK818_ID_LDO6, 362*4882a593Smuzhiyun RK818_ID_LDO7, 363*4882a593Smuzhiyun RK818_ID_LDO8, 364*4882a593Smuzhiyun RK818_ID_LDO9, 365*4882a593Smuzhiyun RK818_ID_SWITCH, 366*4882a593Smuzhiyun RK818_ID_HDMI_SWITCH, 367*4882a593Smuzhiyun RK818_ID_OTG_SWITCH, 368*4882a593Smuzhiyun }; 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun #define RK818_VB_MON_REG 0x21 371*4882a593Smuzhiyun #define RK818_THERMAL_REG 0x22 372*4882a593Smuzhiyun #define RK818_DCDC_EN_REG 0x23 373*4882a593Smuzhiyun #define RK818_LDO_EN_REG 0x24 374*4882a593Smuzhiyun #define RK818_SLEEP_SET_OFF_REG1 0x25 375*4882a593Smuzhiyun #define RK818_SLEEP_SET_OFF_REG2 0x26 376*4882a593Smuzhiyun #define RK818_DCDC_UV_STS_REG 0x27 377*4882a593Smuzhiyun #define RK818_DCDC_UV_ACT_REG 0x28 378*4882a593Smuzhiyun #define RK818_LDO_UV_STS_REG 0x29 379*4882a593Smuzhiyun #define RK818_LDO_UV_ACT_REG 0x2a 380*4882a593Smuzhiyun #define RK818_DCDC_PG_REG 0x2b 381*4882a593Smuzhiyun #define RK818_LDO_PG_REG 0x2c 382*4882a593Smuzhiyun #define RK818_VOUT_MON_TDB_REG 0x2d 383*4882a593Smuzhiyun #define RK818_BUCK1_CONFIG_REG 0x2e 384*4882a593Smuzhiyun #define RK818_BUCK1_ON_VSEL_REG 0x2f 385*4882a593Smuzhiyun #define RK818_BUCK1_SLP_VSEL_REG 0x30 386*4882a593Smuzhiyun #define RK818_BUCK2_CONFIG_REG 0x32 387*4882a593Smuzhiyun #define RK818_BUCK2_ON_VSEL_REG 0x33 388*4882a593Smuzhiyun #define RK818_BUCK2_SLP_VSEL_REG 0x34 389*4882a593Smuzhiyun #define RK818_BUCK3_CONFIG_REG 0x36 390*4882a593Smuzhiyun #define RK818_BUCK4_CONFIG_REG 0x37 391*4882a593Smuzhiyun #define RK818_BUCK4_ON_VSEL_REG 0x38 392*4882a593Smuzhiyun #define RK818_BUCK4_SLP_VSEL_REG 0x39 393*4882a593Smuzhiyun #define RK818_BOOST_CONFIG_REG 0x3a 394*4882a593Smuzhiyun #define RK818_LDO1_ON_VSEL_REG 0x3b 395*4882a593Smuzhiyun #define RK818_LDO1_SLP_VSEL_REG 0x3c 396*4882a593Smuzhiyun #define RK818_LDO2_ON_VSEL_REG 0x3d 397*4882a593Smuzhiyun #define RK818_LDO2_SLP_VSEL_REG 0x3e 398*4882a593Smuzhiyun #define RK818_LDO3_ON_VSEL_REG 0x3f 399*4882a593Smuzhiyun #define RK818_LDO3_SLP_VSEL_REG 0x40 400*4882a593Smuzhiyun #define RK818_LDO4_ON_VSEL_REG 0x41 401*4882a593Smuzhiyun #define RK818_LDO4_SLP_VSEL_REG 0x42 402*4882a593Smuzhiyun #define RK818_LDO5_ON_VSEL_REG 0x43 403*4882a593Smuzhiyun #define RK818_LDO5_SLP_VSEL_REG 0x44 404*4882a593Smuzhiyun #define RK818_LDO6_ON_VSEL_REG 0x45 405*4882a593Smuzhiyun #define RK818_LDO6_SLP_VSEL_REG 0x46 406*4882a593Smuzhiyun #define RK818_LDO7_ON_VSEL_REG 0x47 407*4882a593Smuzhiyun #define RK818_LDO7_SLP_VSEL_REG 0x48 408*4882a593Smuzhiyun #define RK818_LDO8_ON_VSEL_REG 0x49 409*4882a593Smuzhiyun #define RK818_LDO8_SLP_VSEL_REG 0x4a 410*4882a593Smuzhiyun #define RK818_BOOST_LDO9_ON_VSEL_REG 0x54 411*4882a593Smuzhiyun #define RK818_BOOST_LDO9_SLP_VSEL_REG 0x55 412*4882a593Smuzhiyun #define RK818_DEVCTRL_REG 0x4b 413*4882a593Smuzhiyun #define RK818_INT_STS_REG1 0X4c 414*4882a593Smuzhiyun #define RK818_INT_STS_MSK_REG1 0x4d 415*4882a593Smuzhiyun #define RK818_INT_STS_REG2 0x4e 416*4882a593Smuzhiyun #define RK818_INT_STS_MSK_REG2 0x4f 417*4882a593Smuzhiyun #define RK818_IO_POL_REG 0x50 418*4882a593Smuzhiyun #define RK818_H5V_EN_REG 0x52 419*4882a593Smuzhiyun #define RK818_SLEEP_SET_OFF_REG3 0x53 420*4882a593Smuzhiyun #define RK818_BOOST_LDO9_ON_VSEL_REG 0x54 421*4882a593Smuzhiyun #define RK818_BOOST_LDO9_SLP_VSEL_REG 0x55 422*4882a593Smuzhiyun #define RK818_BOOST_CTRL_REG 0x56 423*4882a593Smuzhiyun #define RK818_DCDC_ILMAX 0x90 424*4882a593Smuzhiyun #define RK818_CHRG_COMP_REG 0x9a 425*4882a593Smuzhiyun #define RK818_SUP_STS_REG 0xa0 426*4882a593Smuzhiyun #define RK818_USB_CTRL_REG 0xa1 427*4882a593Smuzhiyun #define RK818_CHRG_CTRL_REG1 0xa3 428*4882a593Smuzhiyun #define RK818_CHRG_CTRL_REG2 0xa4 429*4882a593Smuzhiyun #define RK818_CHRG_CTRL_REG3 0xa5 430*4882a593Smuzhiyun #define RK818_BAT_CTRL_REG 0xa6 431*4882a593Smuzhiyun #define RK818_BAT_HTS_TS1_REG 0xa8 432*4882a593Smuzhiyun #define RK818_BAT_LTS_TS1_REG 0xa9 433*4882a593Smuzhiyun #define RK818_BAT_HTS_TS2_REG 0xaa 434*4882a593Smuzhiyun #define RK818_BAT_LTS_TS2_REG 0xab 435*4882a593Smuzhiyun #define RK818_TS_CTRL_REG 0xac 436*4882a593Smuzhiyun #define RK818_ADC_CTRL_REG 0xad 437*4882a593Smuzhiyun #define RK818_ON_SOURCE_REG 0xae 438*4882a593Smuzhiyun #define RK818_OFF_SOURCE_REG 0xaf 439*4882a593Smuzhiyun #define RK818_GGCON_REG 0xb0 440*4882a593Smuzhiyun #define RK818_GGSTS_REG 0xb1 441*4882a593Smuzhiyun #define RK818_FRAME_SMP_INTERV_REG 0xb2 442*4882a593Smuzhiyun #define RK818_AUTO_SLP_CUR_THR_REG 0xb3 443*4882a593Smuzhiyun #define RK818_GASCNT_CAL_REG3 0xb4 444*4882a593Smuzhiyun #define RK818_GASCNT_CAL_REG2 0xb5 445*4882a593Smuzhiyun #define RK818_GASCNT_CAL_REG1 0xb6 446*4882a593Smuzhiyun #define RK818_GASCNT_CAL_REG0 0xb7 447*4882a593Smuzhiyun #define RK818_GASCNT3_REG 0xb8 448*4882a593Smuzhiyun #define RK818_GASCNT2_REG 0xb9 449*4882a593Smuzhiyun #define RK818_GASCNT1_REG 0xba 450*4882a593Smuzhiyun #define RK818_GASCNT0_REG 0xbb 451*4882a593Smuzhiyun #define RK818_BAT_CUR_AVG_REGH 0xbc 452*4882a593Smuzhiyun #define RK818_BAT_CUR_AVG_REGL 0xbd 453*4882a593Smuzhiyun #define RK818_TS1_ADC_REGH 0xbe 454*4882a593Smuzhiyun #define RK818_TS1_ADC_REGL 0xbf 455*4882a593Smuzhiyun #define RK818_TS2_ADC_REGH 0xc0 456*4882a593Smuzhiyun #define RK818_TS2_ADC_REGL 0xc1 457*4882a593Smuzhiyun #define RK818_BAT_OCV_REGH 0xc2 458*4882a593Smuzhiyun #define RK818_BAT_OCV_REGL 0xc3 459*4882a593Smuzhiyun #define RK818_BAT_VOL_REGH 0xc4 460*4882a593Smuzhiyun #define RK818_BAT_VOL_REGL 0xc5 461*4882a593Smuzhiyun #define RK818_RELAX_ENTRY_THRES_REGH 0xc6 462*4882a593Smuzhiyun #define RK818_RELAX_ENTRY_THRES_REGL 0xc7 463*4882a593Smuzhiyun #define RK818_RELAX_EXIT_THRES_REGH 0xc8 464*4882a593Smuzhiyun #define RK818_RELAX_EXIT_THRES_REGL 0xc9 465*4882a593Smuzhiyun #define RK818_RELAX_VOL1_REGH 0xca 466*4882a593Smuzhiyun #define RK818_RELAX_VOL1_REGL 0xcb 467*4882a593Smuzhiyun #define RK818_RELAX_VOL2_REGH 0xcc 468*4882a593Smuzhiyun #define RK818_RELAX_VOL2_REGL 0xcd 469*4882a593Smuzhiyun #define RK818_BAT_CUR_R_CALC_REGH 0xce 470*4882a593Smuzhiyun #define RK818_BAT_CUR_R_CALC_REGL 0xcf 471*4882a593Smuzhiyun #define RK818_BAT_VOL_R_CALC_REGH 0xd0 472*4882a593Smuzhiyun #define RK818_BAT_VOL_R_CALC_REGL 0xd1 473*4882a593Smuzhiyun #define RK818_CAL_OFFSET_REGH 0xd2 474*4882a593Smuzhiyun #define RK818_CAL_OFFSET_REGL 0xd3 475*4882a593Smuzhiyun #define RK818_NON_ACT_TIMER_CNT_REG 0xd4 476*4882a593Smuzhiyun #define RK818_VCALIB0_REGH 0xd5 477*4882a593Smuzhiyun #define RK818_VCALIB0_REGL 0xd6 478*4882a593Smuzhiyun #define RK818_VCALIB1_REGH 0xd7 479*4882a593Smuzhiyun #define RK818_VCALIB1_REGL 0xd8 480*4882a593Smuzhiyun #define RK818_IOFFSET_REGH 0xdd 481*4882a593Smuzhiyun #define RK818_IOFFSET_REGL 0xde 482*4882a593Smuzhiyun #define RK818_SOC_REG 0xe0 483*4882a593Smuzhiyun #define RK818_REMAIN_CAP_REG3 0xe1 484*4882a593Smuzhiyun #define RK818_REMAIN_CAP_REG2 0xe2 485*4882a593Smuzhiyun #define RK818_REMAIN_CAP_REG1 0xe3 486*4882a593Smuzhiyun #define RK818_REMAIN_CAP_REG0 0xe4 487*4882a593Smuzhiyun #define RK818_UPDAT_LEVE_REG 0xe5 488*4882a593Smuzhiyun #define RK818_NEW_FCC_REG3 0xe6 489*4882a593Smuzhiyun #define RK818_NEW_FCC_REG2 0xe7 490*4882a593Smuzhiyun #define RK818_NEW_FCC_REG1 0xe8 491*4882a593Smuzhiyun #define RK818_NEW_FCC_REG0 0xe9 492*4882a593Smuzhiyun #define RK818_NON_ACT_TIMER_CNT_SAVE_REG 0xea 493*4882a593Smuzhiyun #define RK818_OCV_VOL_VALID_REG 0xeb 494*4882a593Smuzhiyun #define RK818_REBOOT_CNT_REG 0xec 495*4882a593Smuzhiyun #define RK818_POFFSET_REG 0xed 496*4882a593Smuzhiyun #define RK818_MISC_MARK_REG 0xee 497*4882a593Smuzhiyun #define RK818_HALT_CNT_REG 0xef 498*4882a593Smuzhiyun #define RK818_CALC_REST_REGH 0xf0 499*4882a593Smuzhiyun #define RK818_CALC_REST_REGL 0xf1 500*4882a593Smuzhiyun #define RK818_SAVE_DATA19 0xf2 501*4882a593Smuzhiyun #define RK818_NUM_REGULATOR 17 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun #define RK818_H5V_EN BIT(0) 504*4882a593Smuzhiyun #define RK818_REF_RDY_CTRL BIT(1) 505*4882a593Smuzhiyun #define RK818_USB_ILIM_SEL_MASK 0xf 506*4882a593Smuzhiyun #define RK818_USB_ILMIN_2000MA 0x7 507*4882a593Smuzhiyun #define RK818_USB_CHG_SD_VSEL_MASK 0x70 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun /* RK805 */ 510*4882a593Smuzhiyun enum rk805_reg { 511*4882a593Smuzhiyun RK805_ID_DCDC1, 512*4882a593Smuzhiyun RK805_ID_DCDC2, 513*4882a593Smuzhiyun RK805_ID_DCDC3, 514*4882a593Smuzhiyun RK805_ID_DCDC4, 515*4882a593Smuzhiyun RK805_ID_LDO1, 516*4882a593Smuzhiyun RK805_ID_LDO2, 517*4882a593Smuzhiyun RK805_ID_LDO3, 518*4882a593Smuzhiyun }; 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun /* CONFIG REGISTER */ 521*4882a593Smuzhiyun #define RK805_VB_MON_REG 0x21 522*4882a593Smuzhiyun #define RK805_THERMAL_REG 0x22 523*4882a593Smuzhiyun 524*4882a593Smuzhiyun /* POWER CHANNELS ENABLE REGISTER */ 525*4882a593Smuzhiyun #define RK805_DCDC_EN_REG 0x23 526*4882a593Smuzhiyun #define RK805_SLP_DCDC_EN_REG 0x25 527*4882a593Smuzhiyun #define RK805_SLP_LDO_EN_REG 0x26 528*4882a593Smuzhiyun #define RK805_LDO_EN_REG 0x27 529*4882a593Smuzhiyun 530*4882a593Smuzhiyun /* BUCK AND LDO CONFIG REGISTER */ 531*4882a593Smuzhiyun #define RK805_BUCK_LDO_SLP_LP_EN_REG 0x2A 532*4882a593Smuzhiyun #define RK805_BUCK1_CONFIG_REG 0x2E 533*4882a593Smuzhiyun #define RK805_BUCK1_ON_VSEL_REG 0x2F 534*4882a593Smuzhiyun #define RK805_BUCK1_SLP_VSEL_REG 0x30 535*4882a593Smuzhiyun #define RK805_BUCK2_CONFIG_REG 0x32 536*4882a593Smuzhiyun #define RK805_BUCK2_ON_VSEL_REG 0x33 537*4882a593Smuzhiyun #define RK805_BUCK2_SLP_VSEL_REG 0x34 538*4882a593Smuzhiyun #define RK805_BUCK3_CONFIG_REG 0x36 539*4882a593Smuzhiyun #define RK805_BUCK4_CONFIG_REG 0x37 540*4882a593Smuzhiyun #define RK805_BUCK4_ON_VSEL_REG 0x38 541*4882a593Smuzhiyun #define RK805_BUCK4_SLP_VSEL_REG 0x39 542*4882a593Smuzhiyun #define RK805_LDO1_ON_VSEL_REG 0x3B 543*4882a593Smuzhiyun #define RK805_LDO1_SLP_VSEL_REG 0x3C 544*4882a593Smuzhiyun #define RK805_LDO2_ON_VSEL_REG 0x3D 545*4882a593Smuzhiyun #define RK805_LDO2_SLP_VSEL_REG 0x3E 546*4882a593Smuzhiyun #define RK805_LDO3_ON_VSEL_REG 0x3F 547*4882a593Smuzhiyun #define RK805_LDO3_SLP_VSEL_REG 0x40 548*4882a593Smuzhiyun 549*4882a593Smuzhiyun /* INTERRUPT REGISTER */ 550*4882a593Smuzhiyun #define RK805_PWRON_LP_INT_TIME_REG 0x47 551*4882a593Smuzhiyun #define RK805_PWRON_DB_REG 0x48 552*4882a593Smuzhiyun #define RK805_DEV_CTRL_REG 0x4B 553*4882a593Smuzhiyun #define RK805_INT_STS_REG 0x4C 554*4882a593Smuzhiyun #define RK805_INT_STS_MSK_REG 0x4D 555*4882a593Smuzhiyun #define RK805_GPIO_IO_POL_REG 0x50 556*4882a593Smuzhiyun #define RK805_OUT_REG 0x52 557*4882a593Smuzhiyun #define RK805_ON_SOURCE_REG 0xAE 558*4882a593Smuzhiyun #define RK805_OFF_SOURCE_REG 0xAF 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun #define RK805_NUM_REGULATORS 7 561*4882a593Smuzhiyun 562*4882a593Smuzhiyun #define RK805_PWRON_FALL_RISE_INT_EN 0x0 563*4882a593Smuzhiyun #define RK805_PWRON_FALL_RISE_INT_MSK 0x81 564*4882a593Smuzhiyun 565*4882a593Smuzhiyun /* RK805 IRQ Definitions */ 566*4882a593Smuzhiyun #define RK805_IRQ_VB_LOW 1 567*4882a593Smuzhiyun #define RK805_IRQ_PWRON 2 568*4882a593Smuzhiyun #define RK805_IRQ_PWRON_LP 3 569*4882a593Smuzhiyun #define RK805_IRQ_HOTDIE 4 570*4882a593Smuzhiyun #define RK805_IRQ_RTC_ALARM 5 571*4882a593Smuzhiyun #define RK805_IRQ_RTC_PERIOD 6 572*4882a593Smuzhiyun 573*4882a593Smuzhiyun /* 574*4882a593Smuzhiyun * When PMIC irq occurs, regmap-irq.c will traverse all PMIC child 575*4882a593Smuzhiyun * interrupts from low index 0 to high index, we give fall interrupt 576*4882a593Smuzhiyun * high priority to be called earlier than rise, so that it can be 577*4882a593Smuzhiyun * override by late rise event. This can helps to solve key release 578*4882a593Smuzhiyun * glitch which make a wrongly fall event immediately after rise. 579*4882a593Smuzhiyun */ 580*4882a593Smuzhiyun #define RK805_IRQ_PWRON_FALL 0 581*4882a593Smuzhiyun #define RK805_IRQ_PWRON_RISE 7 582*4882a593Smuzhiyun 583*4882a593Smuzhiyun #define RK805_IRQ_PWRON_RISE_MSK BIT(0) 584*4882a593Smuzhiyun #define RK805_IRQ_VB_LOW_MSK BIT(1) 585*4882a593Smuzhiyun #define RK805_IRQ_PWRON_MSK BIT(2) 586*4882a593Smuzhiyun #define RK805_IRQ_PWRON_LP_MSK BIT(3) 587*4882a593Smuzhiyun #define RK805_IRQ_HOTDIE_MSK BIT(4) 588*4882a593Smuzhiyun #define RK805_IRQ_RTC_ALARM_MSK BIT(5) 589*4882a593Smuzhiyun #define RK805_IRQ_RTC_PERIOD_MSK BIT(6) 590*4882a593Smuzhiyun #define RK805_IRQ_PWRON_FALL_MSK BIT(7) 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun #define RK805_PWR_RISE_INT_STATUS BIT(0) 593*4882a593Smuzhiyun #define RK805_VB_LOW_INT_STATUS BIT(1) 594*4882a593Smuzhiyun #define RK805_PWRON_INT_STATUS BIT(2) 595*4882a593Smuzhiyun #define RK805_PWRON_LP_INT_STATUS BIT(3) 596*4882a593Smuzhiyun #define RK805_HOTDIE_INT_STATUS BIT(4) 597*4882a593Smuzhiyun #define RK805_ALARM_INT_STATUS BIT(5) 598*4882a593Smuzhiyun #define RK805_PERIOD_INT_STATUS BIT(6) 599*4882a593Smuzhiyun #define RK805_PWR_FALL_INT_STATUS BIT(7) 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun #define RK805_BUCK1_2_ILMAX_MASK (3 << 6) 602*4882a593Smuzhiyun #define RK805_BUCK3_4_ILMAX_MASK (3 << 3) 603*4882a593Smuzhiyun #define RK805_RTC_PERIOD_INT_MASK (1 << 6) 604*4882a593Smuzhiyun #define RK805_RTC_ALARM_INT_MASK (1 << 5) 605*4882a593Smuzhiyun #define RK805_INT_ALARM_EN (1 << 3) 606*4882a593Smuzhiyun #define RK805_INT_TIMER_EN (1 << 2) 607*4882a593Smuzhiyun 608*4882a593Smuzhiyun #define RK805_SLP_LDO_EN_OFFSET -1 609*4882a593Smuzhiyun #define RK805_SLP_DCDC_EN_OFFSET 2 610*4882a593Smuzhiyun 611*4882a593Smuzhiyun #define RK805_RAMP_RATE_OFFSET 3 612*4882a593Smuzhiyun #define RK805_RAMP_RATE_MASK (3 << RK805_RAMP_RATE_OFFSET) 613*4882a593Smuzhiyun #define RK805_RAMP_RATE_3MV_PER_US (0 << RK805_RAMP_RATE_OFFSET) 614*4882a593Smuzhiyun #define RK805_RAMP_RATE_6MV_PER_US (1 << RK805_RAMP_RATE_OFFSET) 615*4882a593Smuzhiyun #define RK805_RAMP_RATE_12_5MV_PER_US (2 << RK805_RAMP_RATE_OFFSET) 616*4882a593Smuzhiyun #define RK805_RAMP_RATE_25MV_PER_US (3 << RK805_RAMP_RATE_OFFSET) 617*4882a593Smuzhiyun 618*4882a593Smuzhiyun /* RK808 IRQ Definitions */ 619*4882a593Smuzhiyun #define RK808_IRQ_VOUT_LO 0 620*4882a593Smuzhiyun #define RK808_IRQ_VB_LO 1 621*4882a593Smuzhiyun #define RK808_IRQ_PWRON 2 622*4882a593Smuzhiyun #define RK808_IRQ_PWRON_LP 3 623*4882a593Smuzhiyun #define RK808_IRQ_HOTDIE 4 624*4882a593Smuzhiyun #define RK808_IRQ_RTC_ALARM 5 625*4882a593Smuzhiyun #define RK808_IRQ_RTC_PERIOD 6 626*4882a593Smuzhiyun #define RK808_IRQ_PLUG_IN_INT 7 627*4882a593Smuzhiyun #define RK808_IRQ_PLUG_OUT_INT 8 628*4882a593Smuzhiyun #define RK808_NUM_IRQ 9 629*4882a593Smuzhiyun 630*4882a593Smuzhiyun #define RK808_IRQ_VOUT_LO_MSK BIT(0) 631*4882a593Smuzhiyun #define RK808_IRQ_VB_LO_MSK BIT(1) 632*4882a593Smuzhiyun #define RK808_IRQ_PWRON_MSK BIT(2) 633*4882a593Smuzhiyun #define RK808_IRQ_PWRON_LP_MSK BIT(3) 634*4882a593Smuzhiyun #define RK808_IRQ_HOTDIE_MSK BIT(4) 635*4882a593Smuzhiyun #define RK808_IRQ_RTC_ALARM_MSK BIT(5) 636*4882a593Smuzhiyun #define RK808_IRQ_RTC_PERIOD_MSK BIT(6) 637*4882a593Smuzhiyun #define RK808_IRQ_PLUG_IN_INT_MSK BIT(0) 638*4882a593Smuzhiyun #define RK808_IRQ_PLUG_OUT_INT_MSK BIT(1) 639*4882a593Smuzhiyun 640*4882a593Smuzhiyun /* RK818 IRQ Definitions */ 641*4882a593Smuzhiyun #define RK818_IRQ_VOUT_LO 0 642*4882a593Smuzhiyun #define RK818_IRQ_VB_LO 1 643*4882a593Smuzhiyun #define RK818_IRQ_PWRON 2 644*4882a593Smuzhiyun #define RK818_IRQ_PWRON_LP 3 645*4882a593Smuzhiyun #define RK818_IRQ_HOTDIE 4 646*4882a593Smuzhiyun #define RK818_IRQ_RTC_ALARM 5 647*4882a593Smuzhiyun #define RK818_IRQ_RTC_PERIOD 6 648*4882a593Smuzhiyun #define RK818_IRQ_USB_OV 7 649*4882a593Smuzhiyun #define RK818_IRQ_PLUG_IN 8 650*4882a593Smuzhiyun #define RK818_IRQ_PLUG_OUT 9 651*4882a593Smuzhiyun #define RK818_IRQ_CHG_OK 10 652*4882a593Smuzhiyun #define RK818_IRQ_CHG_TE 11 653*4882a593Smuzhiyun #define RK818_IRQ_CHG_TS1 12 654*4882a593Smuzhiyun #define RK818_IRQ_TS2 13 655*4882a593Smuzhiyun #define RK818_IRQ_CHG_CVTLIM 14 656*4882a593Smuzhiyun #define RK818_IRQ_DISCHG_ILIM 15 657*4882a593Smuzhiyun 658*4882a593Smuzhiyun #define RK818_IRQ_VOUT_LO_MSK BIT(0) 659*4882a593Smuzhiyun #define RK818_IRQ_VB_LO_MSK BIT(1) 660*4882a593Smuzhiyun #define RK818_IRQ_PWRON_MSK BIT(2) 661*4882a593Smuzhiyun #define RK818_IRQ_PWRON_LP_MSK BIT(3) 662*4882a593Smuzhiyun #define RK818_IRQ_HOTDIE_MSK BIT(4) 663*4882a593Smuzhiyun #define RK818_IRQ_RTC_ALARM_MSK BIT(5) 664*4882a593Smuzhiyun #define RK818_IRQ_RTC_PERIOD_MSK BIT(6) 665*4882a593Smuzhiyun #define RK818_IRQ_USB_OV_MSK BIT(7) 666*4882a593Smuzhiyun #define RK818_IRQ_PLUG_IN_MSK BIT(0) 667*4882a593Smuzhiyun #define RK818_IRQ_PLUG_OUT_MSK BIT(1) 668*4882a593Smuzhiyun #define RK818_IRQ_CHG_OK_MSK BIT(2) 669*4882a593Smuzhiyun #define RK818_IRQ_CHG_TE_MSK BIT(3) 670*4882a593Smuzhiyun #define RK818_IRQ_CHG_TS1_MSK BIT(4) 671*4882a593Smuzhiyun #define RK818_IRQ_TS2_MSK BIT(5) 672*4882a593Smuzhiyun #define RK818_IRQ_CHG_CVTLIM_MSK BIT(6) 673*4882a593Smuzhiyun #define RK818_IRQ_DISCHG_ILIM_MSK BIT(7) 674*4882a593Smuzhiyun 675*4882a593Smuzhiyun #define RK818_NUM_IRQ 16 676*4882a593Smuzhiyun 677*4882a593Smuzhiyun /*RK818_DCDC_EN_REG*/ 678*4882a593Smuzhiyun #define BUCK1_EN_MASK BIT(0) 679*4882a593Smuzhiyun #define BUCK2_EN_MASK BIT(1) 680*4882a593Smuzhiyun #define BUCK3_EN_MASK BIT(2) 681*4882a593Smuzhiyun #define BUCK4_EN_MASK BIT(3) 682*4882a593Smuzhiyun #define BOOST_EN_MASK BIT(4) 683*4882a593Smuzhiyun #define LDO9_EN_MASK BIT(5) 684*4882a593Smuzhiyun #define SWITCH_EN_MASK BIT(6) 685*4882a593Smuzhiyun #define OTG_EN_MASK BIT(7) 686*4882a593Smuzhiyun 687*4882a593Smuzhiyun #define BUCK1_EN_ENABLE BIT(0) 688*4882a593Smuzhiyun #define BUCK2_EN_ENABLE BIT(1) 689*4882a593Smuzhiyun #define BUCK3_EN_ENABLE BIT(2) 690*4882a593Smuzhiyun #define BUCK4_EN_ENABLE BIT(3) 691*4882a593Smuzhiyun #define BOOST_EN_ENABLE BIT(4) 692*4882a593Smuzhiyun #define LDO9_EN_ENABLE BIT(5) 693*4882a593Smuzhiyun #define SWITCH_EN_ENABLE BIT(6) 694*4882a593Smuzhiyun #define OTG_EN_ENABLE BIT(7) 695*4882a593Smuzhiyun 696*4882a593Smuzhiyun #define BUCK1_SLP_SET_MASK BIT(0) 697*4882a593Smuzhiyun #define BUCK2_SLP_SET_MASK BIT(1) 698*4882a593Smuzhiyun #define BUCK3_SLP_SET_MASK BIT(2) 699*4882a593Smuzhiyun #define BUCK4_SLP_SET_MASK BIT(3) 700*4882a593Smuzhiyun #define BOOST_SLP_SET_MASK BIT(4) 701*4882a593Smuzhiyun #define LDO9_SLP_SET_MASK BIT(5) 702*4882a593Smuzhiyun #define SWITCH_SLP_SET_MASK BIT(6) 703*4882a593Smuzhiyun #define OTG_SLP_SET_MASK BIT(7) 704*4882a593Smuzhiyun 705*4882a593Smuzhiyun #define BUCK1_SLP_SET_OFF BIT(0) 706*4882a593Smuzhiyun #define BUCK2_SLP_SET_OFF BIT(1) 707*4882a593Smuzhiyun #define BUCK3_SLP_SET_OFF BIT(2) 708*4882a593Smuzhiyun #define BUCK4_SLP_SET_OFF BIT(3) 709*4882a593Smuzhiyun #define BOOST_SLP_SET_OFF BIT(4) 710*4882a593Smuzhiyun #define LDO9_SLP_SET_OFF BIT(5) 711*4882a593Smuzhiyun #define SWITCH_SLP_SET_OFF BIT(6) 712*4882a593Smuzhiyun #define OTG_SLP_SET_OFF BIT(7) 713*4882a593Smuzhiyun #define OTG_BOOST_SLP_OFF (BOOST_SLP_SET_OFF | OTG_SLP_SET_OFF) 714*4882a593Smuzhiyun 715*4882a593Smuzhiyun #define BUCK1_SLP_SET_ON BIT(0) 716*4882a593Smuzhiyun #define BUCK2_SLP_SET_ON BIT(1) 717*4882a593Smuzhiyun #define BUCK3_SLP_SET_ON BIT(2) 718*4882a593Smuzhiyun #define BUCK4_SLP_SET_ON BIT(3) 719*4882a593Smuzhiyun #define BOOST_SLP_SET_ON BIT(4) 720*4882a593Smuzhiyun #define LDO9_SLP_SET_ON BIT(5) 721*4882a593Smuzhiyun #define SWITCH_SLP_SET_ON BIT(6) 722*4882a593Smuzhiyun #define OTG_SLP_SET_ON BIT(7) 723*4882a593Smuzhiyun 724*4882a593Smuzhiyun #define VOUT_LO_MASK BIT(0) 725*4882a593Smuzhiyun #define VB_LO_MASK BIT(1) 726*4882a593Smuzhiyun #define PWRON_MASK BIT(2) 727*4882a593Smuzhiyun #define PWRON_LP_MASK BIT(3) 728*4882a593Smuzhiyun #define HOTDIE_MASK BIT(4) 729*4882a593Smuzhiyun #define RTC_ALARM_MASK BIT(5) 730*4882a593Smuzhiyun #define RTC_PERIOD_MASK BIT(6) 731*4882a593Smuzhiyun #define USB_OV_MASK BIT(7) 732*4882a593Smuzhiyun 733*4882a593Smuzhiyun #define VOUT_LO_DISABLE BIT(0) 734*4882a593Smuzhiyun #define VB_LO_DISABLE BIT(1) 735*4882a593Smuzhiyun #define PWRON_DISABLE BIT(2) 736*4882a593Smuzhiyun #define PWRON_LP_DISABLE BIT(3) 737*4882a593Smuzhiyun #define HOTDIE_DISABLE BIT(4) 738*4882a593Smuzhiyun #define RTC_ALARM_DISABLE BIT(5) 739*4882a593Smuzhiyun #define RTC_PERIOD_DISABLE BIT(6) 740*4882a593Smuzhiyun #define USB_OV_INT_DISABLE BIT(7) 741*4882a593Smuzhiyun 742*4882a593Smuzhiyun #define VOUT_LO_ENABLE (0 << 0) 743*4882a593Smuzhiyun #define VB_LO_ENABLE (0 << 1) 744*4882a593Smuzhiyun #define PWRON_ENABLE (0 << 2) 745*4882a593Smuzhiyun #define PWRON_LP_ENABLE (0 << 3) 746*4882a593Smuzhiyun #define HOTDIE_ENABLE (0 << 4) 747*4882a593Smuzhiyun #define RTC_ALARM_ENABLE (0 << 5) 748*4882a593Smuzhiyun #define RTC_PERIOD_ENABLE (0 << 6) 749*4882a593Smuzhiyun #define USB_OV_INT_ENABLE (0 << 7) 750*4882a593Smuzhiyun 751*4882a593Smuzhiyun #define PLUG_IN_MASK BIT(0) 752*4882a593Smuzhiyun #define PLUG_OUT_MASK BIT(1) 753*4882a593Smuzhiyun #define CHGOK_MASK BIT(2) 754*4882a593Smuzhiyun #define CHGTE_MASK BIT(3) 755*4882a593Smuzhiyun #define CHGTS1_MASK BIT(4) 756*4882a593Smuzhiyun #define TS2_MASK BIT(5) 757*4882a593Smuzhiyun #define CHG_CVTLIM_MASK BIT(6) 758*4882a593Smuzhiyun #define DISCHG_ILIM_MASK BIT(7) 759*4882a593Smuzhiyun 760*4882a593Smuzhiyun #define PLUG_IN_DISABLE BIT(0) 761*4882a593Smuzhiyun #define PLUG_OUT_DISABLE BIT(1) 762*4882a593Smuzhiyun #define CHGOK_DISABLE BIT(2) 763*4882a593Smuzhiyun #define CHGTE_DISABLE BIT(3) 764*4882a593Smuzhiyun #define CHGTS1_DISABLE BIT(4) 765*4882a593Smuzhiyun #define TS2_DISABLE BIT(5) 766*4882a593Smuzhiyun #define CHG_CVTLIM_DISABLE BIT(6) 767*4882a593Smuzhiyun #define DISCHG_ILIM_DISABLE BIT(7) 768*4882a593Smuzhiyun 769*4882a593Smuzhiyun #define PLUG_IN_ENABLE BIT(0) 770*4882a593Smuzhiyun #define PLUG_OUT_ENABLE BIT(1) 771*4882a593Smuzhiyun #define CHGOK_ENABLE BIT(2) 772*4882a593Smuzhiyun #define CHGTE_ENABLE BIT(3) 773*4882a593Smuzhiyun #define CHGTS1_ENABLE BIT(4) 774*4882a593Smuzhiyun #define TS2_ENABLE BIT(5) 775*4882a593Smuzhiyun #define CHG_CVTLIM_ENABLE BIT(6) 776*4882a593Smuzhiyun #define DISCHG_ILIM_ENABLE BIT(7) 777*4882a593Smuzhiyun 778*4882a593Smuzhiyun #define RK808_VBAT_LOW_2V8 0x00 779*4882a593Smuzhiyun #define RK808_VBAT_LOW_2V9 0x01 780*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V0 0x02 781*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V1 0x03 782*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V2 0x04 783*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V3 0x05 784*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V4 0x06 785*4882a593Smuzhiyun #define RK808_VBAT_LOW_3V5 0x07 786*4882a593Smuzhiyun #define VBAT_LOW_VOL_MASK (0x07 << 0) 787*4882a593Smuzhiyun #define EN_VABT_LOW_SHUT_DOWN (0x00 << 4) 788*4882a593Smuzhiyun #define EN_VBAT_LOW_IRQ (0x1 << 4) 789*4882a593Smuzhiyun #define VBAT_LOW_ACT_MASK (0x1 << 4) 790*4882a593Smuzhiyun 791*4882a593Smuzhiyun #define BUCK_ILMIN_MASK (7 << 0) 792*4882a593Smuzhiyun #define BOOST_ILMIN_MASK (7 << 0) 793*4882a593Smuzhiyun #define BUCK1_RATE_MASK (3 << 3) 794*4882a593Smuzhiyun #define BUCK2_RATE_MASK (3 << 3) 795*4882a593Smuzhiyun #define MASK_ALL 0xff 796*4882a593Smuzhiyun 797*4882a593Smuzhiyun #define BUCK_UV_ACT_MASK 0x0f 798*4882a593Smuzhiyun #define BUCK_UV_ACT_DISABLE 0 799*4882a593Smuzhiyun 800*4882a593Smuzhiyun #define SWITCH2_EN BIT(6) 801*4882a593Smuzhiyun #define SWITCH1_EN BIT(5) 802*4882a593Smuzhiyun #define DEV_OFF_RST BIT(3) 803*4882a593Smuzhiyun #define DEV_OFF BIT(0) 804*4882a593Smuzhiyun #define RTC_STOP BIT(0) 805*4882a593Smuzhiyun 806*4882a593Smuzhiyun #define VB_LO_ACT BIT(4) 807*4882a593Smuzhiyun #define VB_LO_SEL_3500MV (7 << 0) 808*4882a593Smuzhiyun 809*4882a593Smuzhiyun #define VOUT_LO_INT BIT(0) 810*4882a593Smuzhiyun #define CLK32KOUT2_EN BIT(0) 811*4882a593Smuzhiyun #define CLK32KOUT2_FUNC (0 << 1) 812*4882a593Smuzhiyun #define CLK32KOUT2_FUNC_MASK BIT(1) 813*4882a593Smuzhiyun 814*4882a593Smuzhiyun #define TEMP105C 0x08 815*4882a593Smuzhiyun #define TEMP115C 0x0c 816*4882a593Smuzhiyun #define TEMP_HOTDIE_MSK 0x0c 817*4882a593Smuzhiyun #define SLP_SD_MSK (0x3 << 2) 818*4882a593Smuzhiyun #define SHUTDOWN_FUN (0x2 << 2) 819*4882a593Smuzhiyun #define SLEEP_FUN (0x1 << 2) 820*4882a593Smuzhiyun #define RK8XX_ID_MSK 0xfff0 821*4882a593Smuzhiyun #define PWM_MODE_MSK BIT(7) 822*4882a593Smuzhiyun #define FPWM_MODE BIT(7) 823*4882a593Smuzhiyun #define AUTO_PWM_MODE 0 824*4882a593Smuzhiyun #define REGS_WMSK 0xf0 825*4882a593Smuzhiyun 826*4882a593Smuzhiyun enum rk817_reg_id { 827*4882a593Smuzhiyun RK817_ID_DCDC1 = 0, 828*4882a593Smuzhiyun RK817_ID_DCDC2, 829*4882a593Smuzhiyun RK817_ID_DCDC3, 830*4882a593Smuzhiyun RK817_ID_DCDC4, 831*4882a593Smuzhiyun RK817_ID_LDO1, 832*4882a593Smuzhiyun RK817_ID_LDO2, 833*4882a593Smuzhiyun RK817_ID_LDO3, 834*4882a593Smuzhiyun RK817_ID_LDO4, 835*4882a593Smuzhiyun RK817_ID_LDO5, 836*4882a593Smuzhiyun RK817_ID_LDO6, 837*4882a593Smuzhiyun RK817_ID_LDO7, 838*4882a593Smuzhiyun RK817_ID_LDO8, 839*4882a593Smuzhiyun RK817_ID_LDO9, 840*4882a593Smuzhiyun RK817_ID_BOOST, 841*4882a593Smuzhiyun RK817_ID_BOOST_OTG_SW, 842*4882a593Smuzhiyun RK817_NUM_REGULATORS 843*4882a593Smuzhiyun }; 844*4882a593Smuzhiyun 845*4882a593Smuzhiyun enum rk809_reg_id { 846*4882a593Smuzhiyun RK809_ID_DCDC5 = RK817_ID_BOOST, 847*4882a593Smuzhiyun RK809_ID_SW1, 848*4882a593Smuzhiyun RK809_ID_SW2, 849*4882a593Smuzhiyun RK809_NUM_REGULATORS 850*4882a593Smuzhiyun }; 851*4882a593Smuzhiyun 852*4882a593Smuzhiyun #define RK817_SECONDS_REG 0x00 853*4882a593Smuzhiyun #define RK817_MINUTES_REG 0x01 854*4882a593Smuzhiyun #define RK817_HOURS_REG 0x02 855*4882a593Smuzhiyun #define RK817_DAYS_REG 0x03 856*4882a593Smuzhiyun #define RK817_MONTHS_REG 0x04 857*4882a593Smuzhiyun #define RK817_YEARS_REG 0x05 858*4882a593Smuzhiyun #define RK817_WEEKS_REG 0x06 859*4882a593Smuzhiyun #define RK817_ALARM_SECONDS_REG 0x07 860*4882a593Smuzhiyun #define RK817_ALARM_MINUTES_REG 0x08 861*4882a593Smuzhiyun #define RK817_ALARM_HOURS_REG 0x09 862*4882a593Smuzhiyun #define RK817_ALARM_DAYS_REG 0x0a 863*4882a593Smuzhiyun #define RK817_ALARM_MONTHS_REG 0x0b 864*4882a593Smuzhiyun #define RK817_ALARM_YEARS_REG 0x0c 865*4882a593Smuzhiyun #define RK817_RTC_CTRL_REG 0xd 866*4882a593Smuzhiyun #define RK817_RTC_STATUS_REG 0xe 867*4882a593Smuzhiyun #define RK817_RTC_INT_REG 0xf 868*4882a593Smuzhiyun #define RK817_RTC_COMP_LSB_REG 0x10 869*4882a593Smuzhiyun #define RK817_RTC_COMP_MSB_REG 0x11 870*4882a593Smuzhiyun #define RK817_ADC_CONFIG0 0x50 871*4882a593Smuzhiyun #define RK817_CURE_ADC_K0 0xb0 872*4882a593Smuzhiyun #define RK817_POWER_EN_SAVE0 0x99 873*4882a593Smuzhiyun #define RK817_POWER_EN_SAVE1 0xa4 874*4882a593Smuzhiyun 875*4882a593Smuzhiyun #define RK817_POWER_EN_REG(i) (0xb1 + (i)) 876*4882a593Smuzhiyun #define RK817_POWER_SLP_EN_REG(i) (0xb5 + (i)) 877*4882a593Smuzhiyun 878*4882a593Smuzhiyun #define RK817_POWER_CONFIG (0xb9) 879*4882a593Smuzhiyun 880*4882a593Smuzhiyun #define RK817_BUCK_CONFIG_REG(i) (0xba + (i) * 3) 881*4882a593Smuzhiyun 882*4882a593Smuzhiyun #define RK817_BUCK1_ON_VSEL_REG 0xBB 883*4882a593Smuzhiyun #define RK817_BUCK1_SLP_VSEL_REG 0xBC 884*4882a593Smuzhiyun 885*4882a593Smuzhiyun #define RK817_BUCK2_CONFIG_REG 0xBD 886*4882a593Smuzhiyun #define RK817_BUCK2_ON_VSEL_REG 0xBE 887*4882a593Smuzhiyun #define RK817_BUCK2_SLP_VSEL_REG 0xBF 888*4882a593Smuzhiyun 889*4882a593Smuzhiyun #define RK817_BUCK3_CONFIG_REG 0xC0 890*4882a593Smuzhiyun #define RK817_BUCK3_ON_VSEL_REG 0xC1 891*4882a593Smuzhiyun #define RK817_BUCK3_SLP_VSEL_REG 0xC2 892*4882a593Smuzhiyun 893*4882a593Smuzhiyun #define RK817_BUCK4_CONFIG_REG 0xC3 894*4882a593Smuzhiyun #define RK817_BUCK4_ON_VSEL_REG 0xC4 895*4882a593Smuzhiyun #define RK817_BUCK4_SLP_VSEL_REG 0xC5 896*4882a593Smuzhiyun 897*4882a593Smuzhiyun #define RK817_LDO_ON_VSEL_REG(idx) (0xcc + (idx) * 2) 898*4882a593Smuzhiyun #define RK817_BOOST_OTG_CFG (0xde) 899*4882a593Smuzhiyun 900*4882a593Smuzhiyun #define RK817_CHRG_OUT 0xe4 901*4882a593Smuzhiyun #define RK817_CHRG_IN 0xe5 902*4882a593Smuzhiyun #define RK817_CHRG_STS 0xeb 903*4882a593Smuzhiyun #define RK817_ID_MSB 0xed 904*4882a593Smuzhiyun #define RK817_ID_LSB 0xee 905*4882a593Smuzhiyun 906*4882a593Smuzhiyun #define RK817_SYS_STS 0xf0 907*4882a593Smuzhiyun #define RK817_SYS_CFG(i) (0xf1 + (i)) 908*4882a593Smuzhiyun 909*4882a593Smuzhiyun #define RK817_ON_SOURCE_REG 0xf5 910*4882a593Smuzhiyun #define RK817_OFF_SOURCE_REG 0xf6 911*4882a593Smuzhiyun 912*4882a593Smuzhiyun /* INTERRUPT REGISTER */ 913*4882a593Smuzhiyun #define RK817_INT_STS_REG0 0xf8 914*4882a593Smuzhiyun #define RK817_INT_STS_MSK_REG0 0xf9 915*4882a593Smuzhiyun #define RK817_INT_STS_REG1 0xfa 916*4882a593Smuzhiyun #define RK817_INT_STS_MSK_REG1 0xfb 917*4882a593Smuzhiyun #define RK817_INT_STS_REG2 0xfc 918*4882a593Smuzhiyun #define RK817_INT_STS_MSK_REG2 0xfd 919*4882a593Smuzhiyun #define RK817_GPIO_INT_CFG 0xfe 920*4882a593Smuzhiyun 921*4882a593Smuzhiyun /* IRQ Definitions */ 922*4882a593Smuzhiyun #define RK817_IRQ_PWRON_FALL 0 923*4882a593Smuzhiyun #define RK817_IRQ_PWRON_RISE 1 924*4882a593Smuzhiyun #define RK817_IRQ_PWRON 2 925*4882a593Smuzhiyun #define RK817_IRQ_PWMON_LP 3 926*4882a593Smuzhiyun #define RK817_IRQ_HOTDIE 4 927*4882a593Smuzhiyun #define RK817_IRQ_RTC_ALARM 5 928*4882a593Smuzhiyun #define RK817_IRQ_RTC_PERIOD 6 929*4882a593Smuzhiyun #define RK817_IRQ_VB_LO 7 930*4882a593Smuzhiyun #define RK817_IRQ_PLUG_IN 8 931*4882a593Smuzhiyun #define RK817_IRQ_PLUG_OUT 9 932*4882a593Smuzhiyun #define RK817_IRQ_CHRG_TERM 10 933*4882a593Smuzhiyun #define RK817_IRQ_CHRG_TIME 11 934*4882a593Smuzhiyun #define RK817_IRQ_CHRG_TS 12 935*4882a593Smuzhiyun #define RK817_IRQ_USB_OV 13 936*4882a593Smuzhiyun #define RK817_IRQ_CHRG_IN_CLMP 14 937*4882a593Smuzhiyun #define RK817_IRQ_BAT_DIS_ILIM 15 938*4882a593Smuzhiyun #define RK817_IRQ_GATE_GPIO 16 939*4882a593Smuzhiyun #define RK817_IRQ_TS_GPIO 17 940*4882a593Smuzhiyun #define RK817_IRQ_CODEC_PD 18 941*4882a593Smuzhiyun #define RK817_IRQ_CODEC_PO 19 942*4882a593Smuzhiyun #define RK817_IRQ_CLASSD_MUTE_DONE 20 943*4882a593Smuzhiyun #define RK817_IRQ_CLASSD_OCP 21 944*4882a593Smuzhiyun #define RK817_IRQ_BAT_OVP 22 945*4882a593Smuzhiyun #define RK817_IRQ_CHRG_BAT_HI 23 946*4882a593Smuzhiyun #define RK817_IRQ_END (RK817_IRQ_CHRG_BAT_HI + 1) 947*4882a593Smuzhiyun 948*4882a593Smuzhiyun /* 949*4882a593Smuzhiyun * rtc_ctrl 0xd 950*4882a593Smuzhiyun * same as 808, except bit4 951*4882a593Smuzhiyun */ 952*4882a593Smuzhiyun #define RK817_RTC_CTRL_RSV4 BIT(4) 953*4882a593Smuzhiyun 954*4882a593Smuzhiyun /* power config 0xb9 */ 955*4882a593Smuzhiyun #define RK817_BUCK3_FB_RES_MSK BIT(6) 956*4882a593Smuzhiyun #define RK817_BUCK3_FB_RES_INTER BIT(6) 957*4882a593Smuzhiyun #define RK817_BUCK3_FB_RES_EXT 0 958*4882a593Smuzhiyun 959*4882a593Smuzhiyun /* buck config 0xba */ 960*4882a593Smuzhiyun #define RK817_RAMP_RATE_OFFSET 6 961*4882a593Smuzhiyun #define RK817_RAMP_RATE_MASK (0x3 << RK817_RAMP_RATE_OFFSET) 962*4882a593Smuzhiyun #define RK817_RAMP_RATE_3MV_PER_US (0x0 << RK817_RAMP_RATE_OFFSET) 963*4882a593Smuzhiyun #define RK817_RAMP_RATE_6_3MV_PER_US (0x1 << RK817_RAMP_RATE_OFFSET) 964*4882a593Smuzhiyun #define RK817_RAMP_RATE_12_5MV_PER_US (0x2 << RK817_RAMP_RATE_OFFSET) 965*4882a593Smuzhiyun #define RK817_RAMP_RATE_25MV_PER_US (0x3 << RK817_RAMP_RATE_OFFSET) 966*4882a593Smuzhiyun 967*4882a593Smuzhiyun /* sys_cfg1 0xf2 */ 968*4882a593Smuzhiyun #define RK817_HOTDIE_TEMP_MSK (0x3 << 4) 969*4882a593Smuzhiyun #define RK817_HOTDIE_85 (0x0 << 4) 970*4882a593Smuzhiyun #define RK817_HOTDIE_95 (0x1 << 4) 971*4882a593Smuzhiyun #define RK817_HOTDIE_105 (0x2 << 4) 972*4882a593Smuzhiyun #define RK817_HOTDIE_115 (0x3 << 4) 973*4882a593Smuzhiyun 974*4882a593Smuzhiyun #define RK817_TSD_TEMP_MSK BIT(6) 975*4882a593Smuzhiyun #define RK817_TSD_140 0 976*4882a593Smuzhiyun #define RK817_TSD_160 BIT(6) 977*4882a593Smuzhiyun 978*4882a593Smuzhiyun #define RK817_CLK32KOUT2_EN BIT(7) 979*4882a593Smuzhiyun 980*4882a593Smuzhiyun /* sys_cfg3 0xf4 */ 981*4882a593Smuzhiyun #define RK817_SLPPIN_FUNC_MSK (0x3 << 3) 982*4882a593Smuzhiyun #define SLPPIN_NULL_FUN (0x0 << 3) 983*4882a593Smuzhiyun #define SLPPIN_SLP_FUN (0x1 << 3) 984*4882a593Smuzhiyun #define SLPPIN_DN_FUN (0x2 << 3) 985*4882a593Smuzhiyun #define SLPPIN_RST_FUN (0x3 << 3) 986*4882a593Smuzhiyun 987*4882a593Smuzhiyun #define RK817_RST_FUNC_MSK (0x3 << 6) 988*4882a593Smuzhiyun #define RK817_RST_FUNC_SFT (6) 989*4882a593Smuzhiyun #define RK817_RST_FUNC_CNT (3) 990*4882a593Smuzhiyun #define RK817_RST_FUNC_DEV (0) /* reset the dev */ 991*4882a593Smuzhiyun #define RK817_RST_FUNC_REG (0x1 << 6) /* reset the reg only */ 992*4882a593Smuzhiyun 993*4882a593Smuzhiyun #define RK817_SLPPOL_MSK BIT(5) 994*4882a593Smuzhiyun #define RK817_SLPPOL_H BIT(5) 995*4882a593Smuzhiyun #define RK817_SLPPOL_L (0) 996*4882a593Smuzhiyun 997*4882a593Smuzhiyun /* gpio&int 0xfe */ 998*4882a593Smuzhiyun #define RK817_INT_POL_MSK BIT(1) 999*4882a593Smuzhiyun #define RK817_INT_POL_H BIT(1) 1000*4882a593Smuzhiyun #define RK817_INT_POL_L 0 1001*4882a593Smuzhiyun #define RK809_BUCK5_CONFIG(i) (RK817_BOOST_OTG_CFG + (i) * 1) 1002*4882a593Smuzhiyun 1003*4882a593Smuzhiyun enum { 1004*4882a593Smuzhiyun BUCK_ILMIN_50MA, 1005*4882a593Smuzhiyun BUCK_ILMIN_100MA, 1006*4882a593Smuzhiyun BUCK_ILMIN_150MA, 1007*4882a593Smuzhiyun BUCK_ILMIN_200MA, 1008*4882a593Smuzhiyun BUCK_ILMIN_250MA, 1009*4882a593Smuzhiyun BUCK_ILMIN_300MA, 1010*4882a593Smuzhiyun BUCK_ILMIN_350MA, 1011*4882a593Smuzhiyun BUCK_ILMIN_400MA, 1012*4882a593Smuzhiyun }; 1013*4882a593Smuzhiyun 1014*4882a593Smuzhiyun enum { 1015*4882a593Smuzhiyun BOOST_ILMIN_75MA, 1016*4882a593Smuzhiyun BOOST_ILMIN_100MA, 1017*4882a593Smuzhiyun BOOST_ILMIN_125MA, 1018*4882a593Smuzhiyun BOOST_ILMIN_150MA, 1019*4882a593Smuzhiyun BOOST_ILMIN_175MA, 1020*4882a593Smuzhiyun BOOST_ILMIN_200MA, 1021*4882a593Smuzhiyun BOOST_ILMIN_225MA, 1022*4882a593Smuzhiyun BOOST_ILMIN_250MA, 1023*4882a593Smuzhiyun }; 1024*4882a593Smuzhiyun 1025*4882a593Smuzhiyun enum { 1026*4882a593Smuzhiyun RK805_BUCK1_2_ILMAX_2500MA, 1027*4882a593Smuzhiyun RK805_BUCK1_2_ILMAX_3000MA, 1028*4882a593Smuzhiyun RK805_BUCK1_2_ILMAX_3500MA, 1029*4882a593Smuzhiyun RK805_BUCK1_2_ILMAX_4000MA, 1030*4882a593Smuzhiyun }; 1031*4882a593Smuzhiyun 1032*4882a593Smuzhiyun enum { 1033*4882a593Smuzhiyun RK805_BUCK3_ILMAX_1500MA, 1034*4882a593Smuzhiyun RK805_BUCK3_ILMAX_2000MA, 1035*4882a593Smuzhiyun RK805_BUCK3_ILMAX_2500MA, 1036*4882a593Smuzhiyun RK805_BUCK3_ILMAX_3000MA, 1037*4882a593Smuzhiyun }; 1038*4882a593Smuzhiyun 1039*4882a593Smuzhiyun enum { 1040*4882a593Smuzhiyun RK805_BUCK4_ILMAX_2000MA, 1041*4882a593Smuzhiyun RK805_BUCK4_ILMAX_2500MA, 1042*4882a593Smuzhiyun RK805_BUCK4_ILMAX_3000MA, 1043*4882a593Smuzhiyun RK805_BUCK4_ILMAX_3500MA, 1044*4882a593Smuzhiyun }; 1045*4882a593Smuzhiyun 1046*4882a593Smuzhiyun enum { 1047*4882a593Smuzhiyun RK805_ID = 0x8050, 1048*4882a593Smuzhiyun RK808_ID = 0x0000, 1049*4882a593Smuzhiyun RK809_ID = 0x8090, 1050*4882a593Smuzhiyun RK816_ID = 0x8160, 1051*4882a593Smuzhiyun RK817_ID = 0x8170, 1052*4882a593Smuzhiyun RK818_ID = 0x8180, 1053*4882a593Smuzhiyun }; 1054*4882a593Smuzhiyun 1055*4882a593Smuzhiyun struct rk808_pin_info { 1056*4882a593Smuzhiyun struct pinctrl *p; 1057*4882a593Smuzhiyun struct pinctrl_state *reset; 1058*4882a593Smuzhiyun struct pinctrl_state *power_off; 1059*4882a593Smuzhiyun struct pinctrl_state *sleep; 1060*4882a593Smuzhiyun }; 1061*4882a593Smuzhiyun 1062*4882a593Smuzhiyun struct rk808 { 1063*4882a593Smuzhiyun struct i2c_client *i2c; 1064*4882a593Smuzhiyun struct regmap_irq_chip_data *irq_data; 1065*4882a593Smuzhiyun struct regmap_irq_chip_data *battery_irq_data; 1066*4882a593Smuzhiyun struct regmap *regmap; 1067*4882a593Smuzhiyun long variant; 1068*4882a593Smuzhiyun const struct regmap_config *regmap_cfg; 1069*4882a593Smuzhiyun const struct regmap_irq_chip *regmap_irq_chip; 1070*4882a593Smuzhiyun void (*pm_pwroff_prep_fn)(void); 1071*4882a593Smuzhiyun struct rk808_pin_info *pins; 1072*4882a593Smuzhiyun }; 1073*4882a593Smuzhiyun #endif /* __LINUX_REGULATOR_RK808_H */ 1074