1453c5a92SJacob Chen /* 2453c5a92SJacob Chen * Copyright (C) 2015 Google, Inc 3453c5a92SJacob Chen * Written by Simon Glass <sjg@chromium.org> 4453c5a92SJacob Chen * 5453c5a92SJacob Chen * SPDX-License-Identifier: GPL-2.0+ 6453c5a92SJacob Chen */ 7453c5a92SJacob Chen 8453c5a92SJacob Chen #ifndef _PMIC_RK8XX_H_ 9453c5a92SJacob Chen #define _PMIC_RK8XX_H_ 10453c5a92SJacob Chen 11453c5a92SJacob Chen enum { 12453c5a92SJacob Chen REG_SECONDS = 0x00, 13453c5a92SJacob Chen REG_MINUTES, 14453c5a92SJacob Chen REG_HOURS, 15453c5a92SJacob Chen REG_DAYS, 16453c5a92SJacob Chen REG_MONTHS, 17453c5a92SJacob Chen REG_YEARS, 18453c5a92SJacob Chen REG_WEEKS, 19453c5a92SJacob Chen REG_ALARM_SECONDS, 20453c5a92SJacob Chen REG_ALARM_MINUTES, 21453c5a92SJacob Chen REG_ALARM_HOURS, 22453c5a92SJacob Chen REG_ALARM_DAYS, 23453c5a92SJacob Chen REG_ALARM_MONTHS, 24453c5a92SJacob Chen REG_ALARM_YEARS, 25453c5a92SJacob Chen 26453c5a92SJacob Chen REG_RTC_CTRL = 0x10, 27453c5a92SJacob Chen REG_RTC_STATUS, 28453c5a92SJacob Chen REG_RTC_INT, 29453c5a92SJacob Chen REG_RTC_COMP_LSB, 30453c5a92SJacob Chen REG_RTC_COMP_MSB, 31453c5a92SJacob Chen 32453c5a92SJacob Chen ID_MSB = 0x17, 33453c5a92SJacob Chen ID_LSB, 34453c5a92SJacob Chen 35453c5a92SJacob Chen REG_CLK32OUT = 0x20, 36453c5a92SJacob Chen REG_VB_MON, 37453c5a92SJacob Chen REG_THERMAL, 38453c5a92SJacob Chen REG_DCDC_EN, 39453c5a92SJacob Chen REG_LDO_EN, 40453c5a92SJacob Chen REG_SLEEP_SET_OFF1, 41453c5a92SJacob Chen REG_SLEEP_SET_OFF2, 42453c5a92SJacob Chen REG_DCDC_UV_STS, 43453c5a92SJacob Chen REG_DCDC_UV_ACT, 44453c5a92SJacob Chen REG_LDO_UV_STS, 45453c5a92SJacob Chen REG_LDO_UV_ACT, 46453c5a92SJacob Chen REG_DCDC_PG, 47453c5a92SJacob Chen REG_LDO_PG, 48453c5a92SJacob Chen REG_VOUT_MON_TDB, 49453c5a92SJacob Chen REG_BUCK1_CONFIG, 50453c5a92SJacob Chen REG_BUCK1_ON_VSEL, 51453c5a92SJacob Chen REG_BUCK1_SLP_VSEL, 52453c5a92SJacob Chen REG_BUCK1_DVS_VSEL, 53453c5a92SJacob Chen REG_BUCK2_CONFIG, 54453c5a92SJacob Chen REG_BUCK2_ON_VSEL, 55453c5a92SJacob Chen REG_BUCK2_SLP_VSEL, 56453c5a92SJacob Chen REG_BUCK2_DVS_VSEL, 57453c5a92SJacob Chen REG_BUCK3_CONFIG, 58453c5a92SJacob Chen REG_BUCK4_CONFIG, 59453c5a92SJacob Chen REG_BUCK4_ON_VSEL, 60453c5a92SJacob Chen REG_BUCK4_SLP_VSEL, 61453c5a92SJacob Chen REG_BOOST_CONFIG_REG, 62453c5a92SJacob Chen REG_LDO1_ON_VSEL, 63453c5a92SJacob Chen REG_LDO1_SLP_VSEL, 64453c5a92SJacob Chen REG_LDO2_ON_VSEL, 65453c5a92SJacob Chen REG_LDO2_SLP_VSEL, 66453c5a92SJacob Chen REG_LDO3_ON_VSEL, 67453c5a92SJacob Chen REG_LDO3_SLP_VSEL, 68453c5a92SJacob Chen REG_LDO4_ON_VSEL, 69453c5a92SJacob Chen REG_LDO4_SLP_VSEL, 70453c5a92SJacob Chen REG_LDO5_ON_VSEL, 71453c5a92SJacob Chen REG_LDO5_SLP_VSEL, 72453c5a92SJacob Chen REG_LDO6_ON_VSEL, 73453c5a92SJacob Chen REG_LDO6_SLP_VSEL, 74453c5a92SJacob Chen REG_LDO7_ON_VSEL, 75453c5a92SJacob Chen REG_LDO7_SLP_VSEL, 76453c5a92SJacob Chen REG_LDO8_ON_VSEL, 77453c5a92SJacob Chen REG_LDO8_SLP_VSEL, 78453c5a92SJacob Chen REG_DEVCTRL, 79453c5a92SJacob Chen REG_INT_STS1, 80453c5a92SJacob Chen REG_INT_STS_MSK1, 81453c5a92SJacob Chen REG_INT_STS2, 82453c5a92SJacob Chen REG_INT_STS_MSK2, 83453c5a92SJacob Chen REG_IO_POL, 84453c5a92SJacob Chen REG_OTP_VDD_EN, 85453c5a92SJacob Chen REG_H5V_EN, 86453c5a92SJacob Chen REG_SLEEP_SET_OFF, 87453c5a92SJacob Chen REG_BOOST_LDO9_ON_VSEL, 88453c5a92SJacob Chen REG_BOOST_LDO9_SLP_VSEL, 89453c5a92SJacob Chen REG_BOOST_CTRL, 90453c5a92SJacob Chen 91453c5a92SJacob Chen /* Not sure what this does */ 92453c5a92SJacob Chen REG_DCDC_ILMAX = 0x90, 93453c5a92SJacob Chen REG_CHRG_COMP = 0x9a, 94453c5a92SJacob Chen REG_SUP_STS = 0xa0, 95453c5a92SJacob Chen REG_USB_CTRL, 96453c5a92SJacob Chen REG1_CHRG_CTRL, 97453c5a92SJacob Chen REG2_CHRG_CTRL, 98453c5a92SJacob Chen REG3_CHRG_CTRL, 99453c5a92SJacob Chen REG_BAT_CTRL, 100453c5a92SJacob Chen REG_BAT_HTS_TS1, 101453c5a92SJacob Chen REG_BAT_LTS_TS1, 102453c5a92SJacob Chen REG_BAT_HTS_TS2, 103453c5a92SJacob Chen REG_BAT_LTS_TS2, 104453c5a92SJacob Chen REG_TS_CTRL, 105453c5a92SJacob Chen REG_ADC_CTRL, 106453c5a92SJacob Chen REG_ON_SOURCE, 107453c5a92SJacob Chen REG_OFF_SOURCE, 108453c5a92SJacob Chen REG_GGCON, 109453c5a92SJacob Chen REG_GGSTS, 110453c5a92SJacob Chen REG_FRAME_SMP_INTERV, 111453c5a92SJacob Chen REG_AUTO_SLP_CUR_THR, 112453c5a92SJacob Chen REG3_GASCNT_CAL, 113453c5a92SJacob Chen REG2_GASCNT_CAL, 114453c5a92SJacob Chen REG1_GASCNT_CAL, 115453c5a92SJacob Chen REG0_GASCNT_CAL, 116453c5a92SJacob Chen REG3_GASCNT, 117453c5a92SJacob Chen REG2_GASCNT, 118453c5a92SJacob Chen REG1_GASCNT, 119453c5a92SJacob Chen REG0_GASCNT, 120453c5a92SJacob Chen REGH_BAT_CUR_AVG, 121453c5a92SJacob Chen REGL_BAT_CUR_AVG, 122453c5a92SJacob Chen REGH_TS1_ADC, 123453c5a92SJacob Chen REGL_TS1_ADC, 124453c5a92SJacob Chen REGH_TS2_ADC, 125453c5a92SJacob Chen REGL_TS2_ADC, 126453c5a92SJacob Chen REGH_BAT_OCV, 127453c5a92SJacob Chen REGL_BAT_OCV, 128453c5a92SJacob Chen REGH_BAT_VOL, 129453c5a92SJacob Chen REGL_BAT_VOL, 130453c5a92SJacob Chen REGH_RELAX_ENTRY_THRES, 131453c5a92SJacob Chen REGL_RELAX_ENTRY_THRES, 132453c5a92SJacob Chen REGH_RELAX_EXIT_THRES, 133453c5a92SJacob Chen REGL_RELAX_EXIT_THRES, 134453c5a92SJacob Chen REGH_RELAX_VOL1, 135453c5a92SJacob Chen REGL_RELAX_VOL1, 136453c5a92SJacob Chen REGH_RELAX_VOL2, 137453c5a92SJacob Chen REGL_RELAX_VOL2, 138453c5a92SJacob Chen REGH_BAT_CUR_R_CALC, 139453c5a92SJacob Chen REGL_BAT_CUR_R_CALC, 140453c5a92SJacob Chen REGH_BAT_VOL_R_CALC, 141453c5a92SJacob Chen REGL_BAT_VOL_R_CALC, 142453c5a92SJacob Chen REGH_CAL_OFFSET, 143453c5a92SJacob Chen REGL_CAL_OFFSET, 144453c5a92SJacob Chen REG_NON_ACT_TIMER_CNT, 145453c5a92SJacob Chen REGH_VCALIB0, 146453c5a92SJacob Chen REGL_VCALIB0, 147453c5a92SJacob Chen REGH_VCALIB1, 148453c5a92SJacob Chen REGL_VCALIB1, 149453c5a92SJacob Chen REGH_IOFFSET, 150453c5a92SJacob Chen REGL_IOFFSET, 151453c5a92SJacob Chen REG_SOC, 152453c5a92SJacob Chen REG3_REMAIN_CAP, 153453c5a92SJacob Chen REG2_REMAIN_CAP, 154453c5a92SJacob Chen REG1_REMAIN_CAP, 155453c5a92SJacob Chen REG0_REMAIN_CAP, 156453c5a92SJacob Chen REG_UPDAT_LEVE, 157453c5a92SJacob Chen REG3_NEW_FCC, 158453c5a92SJacob Chen REG2_NEW_FCC, 159453c5a92SJacob Chen REG1_NEW_FCC, 160453c5a92SJacob Chen REG0_NEW_FCC, 161453c5a92SJacob Chen REG_NON_ACT_TIMER_CNT_SAVE, 162453c5a92SJacob Chen REG_OCV_VOL_VALID, 163453c5a92SJacob Chen REG_REBOOT_CNT, 164453c5a92SJacob Chen REG_POFFSET, 165453c5a92SJacob Chen REG_MISC_MARK, 166453c5a92SJacob Chen REG_HALT_CNT, 167453c5a92SJacob Chen REGH_CALC_REST, 168453c5a92SJacob Chen REGL_CALC_REST, 169453c5a92SJacob Chen SAVE_DATA19, 170453c5a92SJacob Chen RK808_NUM_OF_REGS, 171453c5a92SJacob Chen }; 172453c5a92SJacob Chen 173453c5a92SJacob Chen enum { 1747f18d96cSJoseph Chen RK817_REG_SYS_CFG3 = 0xf4, 1757f18d96cSJoseph Chen }; 1767f18d96cSJoseph Chen 1777f18d96cSJoseph Chen enum { 1785e1bceeaSElaine Zhang RK816_REG_DCDC_EN1 = 0x23, 1795e1bceeaSElaine Zhang RK816_REG_DCDC_EN2, 180e917b032SJoseph Chen RK816_REG_DCDC_SLP_EN, 181e917b032SJoseph Chen RK816_REG_LDO_SLP_EN, 1825e1bceeaSElaine Zhang RK816_REG_LDO_EN1 = 0x27, 1835e1bceeaSElaine Zhang RK816_REG_LDO_EN2, 1845e1bceeaSElaine Zhang }; 1855e1bceeaSElaine Zhang 1865e1bceeaSElaine Zhang enum { 1874b6f5dc9SElaine Zhang RK805_ID = 0x8050, 1889361c683Sshengfei Xu RK806_ID = 0x8060, 189453c5a92SJacob Chen RK808_ID = 0x0000, 1901b6b965cSJoseph Chen RK809_ID = 0x8090, 1915e1bceeaSElaine Zhang RK816_ID = 0x8160, 1927f18d96cSJoseph Chen RK817_ID = 0x8170, 193453c5a92SJacob Chen RK818_ID = 0x8180, 194453c5a92SJacob Chen }; 195453c5a92SJacob Chen 1969e9e0e07SShengfei Xu enum { 1979e9e0e07SShengfei Xu RK817_POWER_EN0 = 0xb1, 1989e9e0e07SShengfei Xu RK817_POWER_EN1, 1999e9e0e07SShengfei Xu RK817_POWER_EN2, 2009e9e0e07SShengfei Xu RK817_POWER_EN3, 2019e9e0e07SShengfei Xu }; 202f8797432SShengfei Xu 203f8797432SShengfei Xu #define RK8xx_RST_MODE0 0x00 204f8797432SShengfei Xu #define RK8xx_RST_MODE1 0x01 205f8797432SShengfei Xu #define RK8xx_RST_MODE2 0x02 206f8797432SShengfei Xu #define RK8xx_RESET_FUN_CLR 0x3f 207f8797432SShengfei Xu 2089e9e0e07SShengfei Xu #define RK817_POWER_EN_SAVE0 0x99 2099e9e0e07SShengfei Xu #define RK817_POWER_EN_SAVE1 0xa4 2109e9e0e07SShengfei Xu 2117f18d96cSJoseph Chen #define RK817_ID_MSB 0xed 2127f18d96cSJoseph Chen #define RK817_ID_LSB 0xee 213453c5a92SJacob Chen #define RK8XX_ID_MSK 0xfff0 214453c5a92SJacob Chen 215d76e1bedSshengfei Xu #define RK817_PMIC_CHRG_TERM 0xe6 216465b1b6cSshengfei Xu #define RK817_PMIC_SYS_CFG1 0xf1 2171c223666SJoseph Chen #define RK817_PMIC_SYS_CFG3 0xf4 2181c223666SJoseph Chen #define RK817_GPIO_INT_CFG 0xfe 2191c223666SJoseph Chen 2207623c170SJoseph Chen #define RK8XX_ON_SOURCE 0xae 2217623c170SJoseph Chen #define RK8XX_OFF_SOURCE 0xaf 222ba76dc00SShengfei Xu #define RK817_BUCK4_CMIN 0xc6 2237623c170SJoseph Chen #define RK817_ON_SOURCE 0xf5 2247623c170SJoseph Chen #define RK817_OFF_SOURCE 0xf6 2253ec172baSJoseph Chen #define RK817_NUM_OF_REGS 0xff 2267623c170SJoseph Chen 22700d11ef2SShunqing Chen #define RK8XX_DEVCTRL_REG 0x4b 22800d11ef2SShunqing Chen #define RK817_PWRON_KEY 0xf7 22900d11ef2SShunqing Chen #define RK8XX_LP_ACTION_MSK BIT(6) 23000d11ef2SShunqing Chen #define RK8XX_LP_OFF (0 << 6) 23100d11ef2SShunqing Chen #define RK8XX_LP_RESTART (1 << 6) 23200d11ef2SShunqing Chen #define RK8XX_LP_OFF_MSK BIT(4) | BIT(5) 23300d11ef2SShunqing Chen #define RK8XX_LP_TIME_6S (0 << 4) 23400d11ef2SShunqing Chen #define RK8XX_LP_TIME_8S (1 << 4) 23500d11ef2SShunqing Chen #define RK8XX_LP_TIME_10S (2 << 4) 23600d11ef2SShunqing Chen #define RK8XX_LP_TIME_12S (3 << 4) 23700d11ef2SShunqing Chen 238ded32713SJoseph Chen /* IRQ definitions */ 239ded32713SJoseph Chen #define RK8XX_IRQ_PWRON_FALL 0 240ded32713SJoseph Chen #define RK8XX_IRQ_PWRON_RISE 1 241ded32713SJoseph Chen #define RK8XX_IRQ_PLUG_OUT 2 242ded32713SJoseph Chen #define RK8XX_IRQ_PLUG_IN 3 243ded32713SJoseph Chen #define RK8XX_IRQ_CHG_OK 4 244*063fcc91SShengfei Xu #define RK8XX_IRQ_RTC_ALARM 5 245ded32713SJoseph Chen 246ded32713SJoseph Chen #define RK808_INT_STS_REG1 0x4c 247ded32713SJoseph Chen #define RK808_INT_MSK_REG1 0x4d 248*063fcc91SShengfei Xu #define RK808_IRQ_VOUT_LOW_MSK BIT(0) 249ded32713SJoseph Chen #define RK808_IRQ_PLUG_OUT_MSK BIT(1) 250*063fcc91SShengfei Xu #define RK808_IRQ_RTC_ALARM_MSK BIT(5) 251*063fcc91SShengfei Xu #define RK808_IRQ_RTC_PERIOD_MSK BIT(6) 252ded32713SJoseph Chen 253ded32713SJoseph Chen #define RK805_INT_STS_REG 0x4c 254ded32713SJoseph Chen #define RK805_INT_MSK_REG 0x4d 255ded32713SJoseph Chen #define RK805_IRQ_PWRON_FALL_MSK BIT(7) 256ded32713SJoseph Chen #define RK805_IRQ_PWRON_RISE_MSK BIT(0) 257*063fcc91SShengfei Xu #define RK805_IRQ_RTC_ALARM_MSK BIT(5) 258*063fcc91SShengfei Xu #define RK805_IRQ_RTC_PERIOD_MSK BIT(6) 259ded32713SJoseph Chen 2601eb4ab17SShengfei Xu enum rk806_reg_id { 2611eb4ab17SShengfei Xu RK806_ID_DCDC1 = 0, 2621eb4ab17SShengfei Xu RK806_ID_DCDC2, 2631eb4ab17SShengfei Xu RK806_ID_DCDC3, 2641eb4ab17SShengfei Xu RK806_ID_DCDC4, 2651eb4ab17SShengfei Xu RK806_ID_DCDC5, 2661eb4ab17SShengfei Xu RK806_ID_DCDC6, 2671eb4ab17SShengfei Xu RK806_ID_DCDC7, 2681eb4ab17SShengfei Xu RK806_ID_DCDC8, 2691eb4ab17SShengfei Xu RK806_ID_DCDC9, 2701eb4ab17SShengfei Xu RK806_ID_DCDC10, 2711eb4ab17SShengfei Xu 2721eb4ab17SShengfei Xu RK806_ID_NLDO1, 2731eb4ab17SShengfei Xu RK806_ID_NLDO2, 2741eb4ab17SShengfei Xu RK806_ID_NLDO3, 2751eb4ab17SShengfei Xu RK806_ID_NLDO4, 2761eb4ab17SShengfei Xu RK806_ID_NLDO5, 2771eb4ab17SShengfei Xu 2781eb4ab17SShengfei Xu RK806_ID_PLDO1, 2791eb4ab17SShengfei Xu RK806_ID_PLDO2, 2801eb4ab17SShengfei Xu RK806_ID_PLDO3, 2811eb4ab17SShengfei Xu RK806_ID_PLDO4, 2821eb4ab17SShengfei Xu RK806_ID_PLDO5, 2831eb4ab17SShengfei Xu RK806_ID_PLDO6, 2841eb4ab17SShengfei Xu RK806_ID_END, 2851eb4ab17SShengfei Xu }; 2861eb4ab17SShengfei Xu 287ef9c5d10Sshengfei Xu #define RK806_CHIP_NAME 0x5A 288ef9c5d10Sshengfei Xu #define RK806_CHIP_VER 0x5B 289ef9c5d10Sshengfei Xu #define RK806_HW_VER 0x21 290ef9c5d10Sshengfei Xu #define HW_DUAL_PMIC 0x28 291ef9c5d10Sshengfei Xu #define HW_SINGLE_PMIC 0xe8 292ef9c5d10Sshengfei Xu 293ef9c5d10Sshengfei Xu #define RK806_CMD_READ 0 294ef9c5d10Sshengfei Xu #define RK806_CMD_WRITE BIT(7) 295ef9c5d10Sshengfei Xu #define RK806_CMD_CRC_EN BIT(6) 296ef9c5d10Sshengfei Xu #define RK806_CMD_CRC_DIS 0 297ef9c5d10Sshengfei Xu #define RK806_CMD_LEN_MSK 0x0f 298ef9c5d10Sshengfei Xu #define RK806_REG_H 0x00 299ef9c5d10Sshengfei Xu 300ef9c5d10Sshengfei Xu #define RK806_SYS_CFG1 0x5f 301ef9c5d10Sshengfei Xu #define RK806_PWRCTRL_CONFIG0 0x62 302ef9c5d10Sshengfei Xu #define RK806_PWRCTRL_CONFIG1 0x63 303ef9c5d10Sshengfei Xu #define RK806_VSEL_CTR_SEL0 0x64 304ef9c5d10Sshengfei Xu #define RK806_DVS_CTR_SEL4 0x6e 3054e54e501Sshengfei Xu #define RK806_PWRCTRL_GPIO 0x71 306ef9c5d10Sshengfei Xu #define RK806_SYS_CFG3 0x72 307ef9c5d10Sshengfei Xu #define RK806_PWRON_KEY 0x76 308ef9c5d10Sshengfei Xu #define RK806_INT_STS0 0x77 309ef9c5d10Sshengfei Xu #define RK806_INT_MSK0 0x78 310ef9c5d10Sshengfei Xu #define RK806_INT_STS1 0x79 311ef9c5d10Sshengfei Xu #define RK806_INT_MSK1 0x7A 312ef9c5d10Sshengfei Xu #define RK806_GPIO_INT_CONFIG 0x7B 313ef9c5d10Sshengfei Xu #define RK806_ON_SOURCE 0x74 314ef9c5d10Sshengfei Xu #define RK806_OFF_SOURCE 0x75 315f335f73cSshengfei Xu #define RK806_BUCK_RSERVE_REG3 0xfd 316ef9c5d10Sshengfei Xu 3171eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG0 0xB2 3181eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG1 0xB3 3191eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG2 0xB4 3201eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG3 0xB5 3211eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG4 0xB6 3221eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG5 0xB7 3231eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG6 0xB8 3241eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG7 0xB9 3251eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG8 0xBA 3261eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG9 0xBB 3271eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG10 0xBC 3281eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG11 0xBD 3291eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG12 0xBE 3301eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG13 0xBF 3311eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG14 0xC0 3321eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG15 0xC1 3331eb4ab17SShengfei Xu #define RK806_SHUTDOWN_SEQ_REG16 0xC2 3341eb4ab17SShengfei Xu 3354e54e501Sshengfei Xu #define RK806_PWRCTRL1 0x01 3364e54e501Sshengfei Xu #define RK806_PWRCTRL2 0x02 3374e54e501Sshengfei Xu #define RK806_PWRCTRL3 0x03 3384e54e501Sshengfei Xu 3394e54e501Sshengfei Xu #define RK806_PWRCTR_GPIO_FUN 0x05 3404e54e501Sshengfei Xu #define RK806_PWRCTR_MSK_FUN 0x07 3414e54e501Sshengfei Xu #define RK806_PWRCTR_OUTPUT_MSK 0x11 3424e54e501Sshengfei Xu #define RK806_PWRCTR_OUTPUT0 0x01 3434e54e501Sshengfei Xu #define RK806_PWRCTR_OUTPUT1 0x11 3444e54e501Sshengfei Xu 345ece79c0fSshengfei Xu #define RK806_INT_POL_HIGH BIT(1) 346ef9c5d10Sshengfei Xu #define RK806_IRQ_PWRON_FALL_MSK BIT(0) 347ef9c5d10Sshengfei Xu #define RK806_IRQ_PWRON_RISE_MSK BIT(1) 348ef9c5d10Sshengfei Xu #define RK806_DEV_OFF BIT(0) 349ef9c5d10Sshengfei Xu #define RK806_RST_MODE1 0x01 350ef9c5d10Sshengfei Xu #define RK806_RST_MODE2 0x02 351ef9c5d10Sshengfei Xu #define RK806_PWRCTRL_FUN_MSK 0x88 352ef9c5d10Sshengfei Xu #define RK806_VSEL_CTRL_MSK 0xcc 353ef9c5d10Sshengfei Xu #define RK806_VSEL_PWRCTRL1 0x11 354ef9c5d10Sshengfei Xu #define RK806_ENABLE_PWRCTRL 0x04 355ef9c5d10Sshengfei Xu #define RK806_VERSION_AB 0x01 356ef9c5d10Sshengfei Xu 357ef9c5d10Sshengfei Xu #define RK806_ABNORDET_EN 0x80 358ef9c5d10Sshengfei Xu #define RK806_VERSION_MSK 0x0f 359ef9c5d10Sshengfei Xu #define RK806_RESET_FUN_CLR 0x3f 360f335f73cSshengfei Xu #define RK806_BUCK5_EX_RES_EN 0x10 361ef9c5d10Sshengfei Xu 362ef9c5d10Sshengfei Xu /* RK806 buck*/ 363ef9c5d10Sshengfei Xu #define RK806_BUCK_ON_VSEL(n) (0x1a + n - 1) 364ef9c5d10Sshengfei Xu #define RK806_BUCK_SLP_VSEL(n) (0x24 + n - 1) 365ef9c5d10Sshengfei Xu #define RK806_BUCK_CONFIG(n) (0x10 + n - 1) 366ef9c5d10Sshengfei Xu #define RK806_BUCK_VSEL_MASK 0xff 367ef9c5d10Sshengfei Xu 368ef9c5d10Sshengfei Xu /* RK806 LDO */ 369ef9c5d10Sshengfei Xu #define RK806_NLDO_ON_VSEL(n) (0x43 + n - 1) 370ef9c5d10Sshengfei Xu #define RK806_NLDO_SLP_VSEL(n) (0x48 + n - 1) 371ef9c5d10Sshengfei Xu #define RK806_NLDO_VSEL_MASK 0xff 372ef9c5d10Sshengfei Xu #define RK806_PLDO_ON_VSEL(n) (0x4e + n - 1) 373ef9c5d10Sshengfei Xu #define RK806_PLDO_SLP_VSEL(n) (0x54 + n - 1) 374ef9c5d10Sshengfei Xu #define RK806_PLDO_VSEL_MASK 0xff 375ef9c5d10Sshengfei Xu 376ef9c5d10Sshengfei Xu /* RK806 ENABLE */ 377ef9c5d10Sshengfei Xu #define RK806_POWER_EN(n) (0x00 + n) 378ef9c5d10Sshengfei Xu #define RK806_NLDO_EN(n) (0x03 + n) 379ef9c5d10Sshengfei Xu #define RK806_PLDO_EN(n) (0x04 + n) 380ef9c5d10Sshengfei Xu 381ef9c5d10Sshengfei Xu #define RK806_BUCK_SUSPEND_EN 0x06 382ef9c5d10Sshengfei Xu #define RK806_NLDO_SUSPEND_EN 0x07 383ef9c5d10Sshengfei Xu #define RK806_PLDO_SUSPEND_EN 0x08 384ef9c5d10Sshengfei Xu 385ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_MASK1 0xc0 386ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_REG1(n) (0x10 + n) 387ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_REG1_8 0xeb 388ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_REG9_10 0xea 389ef9c5d10Sshengfei Xu 390ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_4LSB_PER_1CLK 0x00/* LDO 100mV/uS buck 50mV/us */ 391ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_2LSB_PER_1CLK 0x01/* LDO 50mV/uS buck 25mV/us */ 392ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_1CLK 0x02/* LDO 25mV/uS buck 12.5mV/us */ 393ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_2CLK 0x03/* LDO 12.5mV/uS buck 6.25mV/us */ 394ef9c5d10Sshengfei Xu 395ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_4CLK 0x04/* LDO 6.28/2mV/uS buck 3.125mV/us */ 396ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_8CLK 0x05/* LDO 3.12mV/uS buck 1.56mV/us */ 397ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_13CLK 0x06/* LDO 1.9mV/uS buck 961mV/us */ 398ef9c5d10Sshengfei Xu #define RK806_RAMP_RATE_1LSB_PER_32CLK 0x07/* LDO 0.78mV/uS buck 0.39mV/us */ 399ef9c5d10Sshengfei Xu 400ef9c5d10Sshengfei Xu #define RK806_PLDO0_2_MSK(pldo) (BIT(pldo + 5)) 401ef9c5d10Sshengfei Xu #define RK806_PLDO0_2_SET(pldo) (BIT(pldo + 1) | RK806_PLDO0_2_MSK(pldo)) 402ef9c5d10Sshengfei Xu #define RK806_PLDO0_2_CLR(pldo) RK806_PLDO0_2_MSK(pldo) 403ef9c5d10Sshengfei Xu 404ded32713SJoseph Chen #define RK816_INT_STS_REG1 0x49 405ded32713SJoseph Chen #define RK816_INT_MSK_REG1 0x4a 406ded32713SJoseph Chen #define RK816_INT_STS_REG3 0x4e 407ded32713SJoseph Chen #define RK816_INT_STS_MSK_REG3 0x4f 408ded32713SJoseph Chen #define RK816_IRQ_PWRON_RISE_MSK BIT(6) 409ded32713SJoseph Chen #define RK816_IRQ_PWRON_FALL_MSK BIT(5) 410ded32713SJoseph Chen #define RK816_IRQ_PLUG_OUT_MSK BIT(1) 411ded32713SJoseph Chen #define RK816_IRQ_CHR_OK_MSK BIT(2) 412*063fcc91SShengfei Xu #define RK816_IRQ_RTC_ALARM_MSK BIT(5) 413*063fcc91SShengfei Xu #define RK816_IRQ_RTC_PERIOD_MSK BIT(6) 414ded32713SJoseph Chen 415ded32713SJoseph Chen #define RK818_INT_STS_REG1 0x4c 416ded32713SJoseph Chen #define RK818_INT_MSK_REG1 0x4d 417ded32713SJoseph Chen #define RK818_IRQ_PLUG_OUT_MSK BIT(1) 418ded32713SJoseph Chen #define RK818_IRQ_CHR_OK_MSK BIT(2) 419*063fcc91SShengfei Xu #define RK818_IRQ_RTC_ALARM_MSK BIT(5) 420*063fcc91SShengfei Xu #define RK818_IRQ_RTC_PERIOD_MSK BIT(6) 421ded32713SJoseph Chen 422ded32713SJoseph Chen #define RK817_INT_STS_REG0 0xf8 423ded32713SJoseph Chen #define RK817_INT_MSK_REG0 0xf9 424ded32713SJoseph Chen #define RK817_IRQ_PWRON_FALL_MSK BIT(0) 425ded32713SJoseph Chen #define RK817_IRQ_PWRON_RISE_MSK BIT(1) 426ded32713SJoseph Chen #define RK817_IRQ_PLUG_OUT_MSK BIT(1) 427ded32713SJoseph Chen #define RK817_IRQ_PLUG_IN_MSK BIT(0) 428*063fcc91SShengfei Xu #define RK817_IRQ_RTC_ALARM_MSK BIT(5) 429*063fcc91SShengfei Xu #define RK817_IRQ_RTC_PERIOD_MSK BIT(6) 430ded32713SJoseph Chen 4311c223666SJoseph Chen struct reg_data { 4321c223666SJoseph Chen u8 reg; 4331c223666SJoseph Chen u8 val; 4341c223666SJoseph Chen u8 mask; 4351c223666SJoseph Chen }; 4361c223666SJoseph Chen 437453c5a92SJacob Chen struct rk8xx_reg_table { 438453c5a92SJacob Chen char *name; 439453c5a92SJacob Chen u8 reg_ctl; 440453c5a92SJacob Chen u8 reg_vol; 441453c5a92SJacob Chen }; 442453c5a92SJacob Chen 443453c5a92SJacob Chen struct rk8xx_priv { 44440db7404SJoseph Chen struct virq_chip *irq_chip; 4459361c683Sshengfei Xu struct spi_slave *slave; 446453c5a92SJacob Chen int variant; 447ded32713SJoseph Chen int irq; 44800d11ef2SShunqing Chen int lp_off_time; 44900d11ef2SShunqing Chen int lp_action; 45040db7404SJoseph Chen uint8_t sleep_pin; 451467c0e51Sshengfei Xu uint8_t rst_fun; 452b9e9168cSshengfei Xu int not_save_power_en; 453d76e1bedSshengfei Xu int sys_can_sd; 454f335f73cSshengfei Xu int buck5_feedback_dis; 4554e54e501Sshengfei Xu int pwr_ctr[3]; 4561eb4ab17SShengfei Xu u32 *shutdown_sequence; 4571eb4ab17SShengfei Xu u32 *vb_shutdown_sequence; 4581eb4ab17SShengfei Xu int support_shutdown_sequence; 4591eb4ab17SShengfei Xu int support_vb_sequence; 460453c5a92SJacob Chen }; 461453c5a92SJacob Chen 462453c5a92SJacob Chen int rk8xx_spl_configure_buck(struct udevice *pmic, int buck, int uvolt); 463ad98f882SWadim Egorov int rk818_spl_configure_usb_input_current(struct udevice *pmic, int current_ma); 464ad98f882SWadim Egorov int rk818_spl_configure_usb_chrg_shutdown(struct udevice *pmic, int uvolt); 465453c5a92SJacob Chen 466453c5a92SJacob Chen #endif 467