1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * max77693-private.h - Voltage regulator driver for the Maxim 77693 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2012 Samsung Electrnoics 6*4882a593Smuzhiyun * SangYoung Son <hello.son@samsung.com> 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * This program is not provided / owned by Maxim Integrated Products. 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifndef __LINUX_MFD_MAX77693_PRIV_H 12*4882a593Smuzhiyun #define __LINUX_MFD_MAX77693_PRIV_H 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include <linux/i2c.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define MAX77693_REG_INVALID (0xff) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* Slave addr = 0xCC: PMIC, Charger, Flash LED */ 19*4882a593Smuzhiyun enum max77693_pmic_reg { 20*4882a593Smuzhiyun MAX77693_LED_REG_IFLASH1 = 0x00, 21*4882a593Smuzhiyun MAX77693_LED_REG_IFLASH2 = 0x01, 22*4882a593Smuzhiyun MAX77693_LED_REG_ITORCH = 0x02, 23*4882a593Smuzhiyun MAX77693_LED_REG_ITORCHTIMER = 0x03, 24*4882a593Smuzhiyun MAX77693_LED_REG_FLASH_TIMER = 0x04, 25*4882a593Smuzhiyun MAX77693_LED_REG_FLASH_EN = 0x05, 26*4882a593Smuzhiyun MAX77693_LED_REG_MAX_FLASH1 = 0x06, 27*4882a593Smuzhiyun MAX77693_LED_REG_MAX_FLASH2 = 0x07, 28*4882a593Smuzhiyun MAX77693_LED_REG_MAX_FLASH3 = 0x08, 29*4882a593Smuzhiyun MAX77693_LED_REG_MAX_FLASH4 = 0x09, 30*4882a593Smuzhiyun MAX77693_LED_REG_VOUT_CNTL = 0x0A, 31*4882a593Smuzhiyun MAX77693_LED_REG_VOUT_FLASH1 = 0x0B, 32*4882a593Smuzhiyun MAX77693_LED_REG_VOUT_FLASH2 = 0x0C, 33*4882a593Smuzhiyun MAX77693_LED_REG_FLASH_INT = 0x0E, 34*4882a593Smuzhiyun MAX77693_LED_REG_FLASH_INT_MASK = 0x0F, 35*4882a593Smuzhiyun MAX77693_LED_REG_FLASH_STATUS = 0x10, 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun MAX77693_PMIC_REG_PMIC_ID1 = 0x20, 38*4882a593Smuzhiyun MAX77693_PMIC_REG_PMIC_ID2 = 0x21, 39*4882a593Smuzhiyun MAX77693_PMIC_REG_INTSRC = 0x22, 40*4882a593Smuzhiyun MAX77693_PMIC_REG_INTSRC_MASK = 0x23, 41*4882a593Smuzhiyun MAX77693_PMIC_REG_TOPSYS_INT = 0x24, 42*4882a593Smuzhiyun MAX77693_PMIC_REG_TOPSYS_INT_MASK = 0x26, 43*4882a593Smuzhiyun MAX77693_PMIC_REG_TOPSYS_STAT = 0x28, 44*4882a593Smuzhiyun MAX77693_PMIC_REG_MAINCTRL1 = 0x2A, 45*4882a593Smuzhiyun MAX77693_PMIC_REG_LSCNFG = 0x2B, 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_INT = 0xB0, 48*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_INT_MASK = 0xB1, 49*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_INT_OK = 0xB2, 50*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_DETAILS_00 = 0xB3, 51*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_DETAILS_01 = 0xB4, 52*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_DETAILS_02 = 0xB5, 53*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_DETAILS_03 = 0xB6, 54*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_00 = 0xB7, 55*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_01 = 0xB8, 56*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_02 = 0xB9, 57*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_03 = 0xBA, 58*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_04 = 0xBB, 59*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_05 = 0xBC, 60*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_06 = 0xBD, 61*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_07 = 0xBE, 62*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_08 = 0xBF, 63*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_09 = 0xC0, 64*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_10 = 0xC1, 65*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_11 = 0xC2, 66*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_12 = 0xC3, 67*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_13 = 0xC4, 68*4882a593Smuzhiyun MAX77693_CHG_REG_CHG_CNFG_14 = 0xC5, 69*4882a593Smuzhiyun MAX77693_CHG_REG_SAFEOUT_CTRL = 0xC6, 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun MAX77693_PMIC_REG_END, 72*4882a593Smuzhiyun }; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* MAX77693 ITORCH register */ 75*4882a593Smuzhiyun #define TORCH_IOUT1_SHIFT 0 76*4882a593Smuzhiyun #define TORCH_IOUT2_SHIFT 4 77*4882a593Smuzhiyun #define TORCH_IOUT_MASK(x) (0xf << (x)) 78*4882a593Smuzhiyun #define TORCH_IOUT_MIN 15625 79*4882a593Smuzhiyun #define TORCH_IOUT_MAX 250000 80*4882a593Smuzhiyun #define TORCH_IOUT_STEP 15625 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /* MAX77693 IFLASH1 and IFLASH2 registers */ 83*4882a593Smuzhiyun #define FLASH_IOUT_MIN 15625 84*4882a593Smuzhiyun #define FLASH_IOUT_MAX_1LED 1000000 85*4882a593Smuzhiyun #define FLASH_IOUT_MAX_2LEDS 625000 86*4882a593Smuzhiyun #define FLASH_IOUT_STEP 15625 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /* MAX77693 TORCH_TIMER register */ 89*4882a593Smuzhiyun #define TORCH_TMR_NO_TIMER 0x40 90*4882a593Smuzhiyun #define TORCH_TIMEOUT_MIN 262000 91*4882a593Smuzhiyun #define TORCH_TIMEOUT_MAX 15728000 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* MAX77693 FLASH_TIMER register */ 94*4882a593Smuzhiyun #define FLASH_TMR_LEVEL 0x80 95*4882a593Smuzhiyun #define FLASH_TIMEOUT_MIN 62500 96*4882a593Smuzhiyun #define FLASH_TIMEOUT_MAX 1000000 97*4882a593Smuzhiyun #define FLASH_TIMEOUT_STEP 62500 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun /* MAX77693 FLASH_EN register */ 100*4882a593Smuzhiyun #define FLASH_EN_OFF 0x0 101*4882a593Smuzhiyun #define FLASH_EN_FLASH 0x1 102*4882a593Smuzhiyun #define FLASH_EN_TORCH 0x2 103*4882a593Smuzhiyun #define FLASH_EN_ON 0x3 104*4882a593Smuzhiyun #define FLASH_EN_SHIFT(x) (6 - (x) * 2) 105*4882a593Smuzhiyun #define TORCH_EN_SHIFT(x) (2 - (x) * 2) 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun /* MAX77693 MAX_FLASH1 register */ 108*4882a593Smuzhiyun #define MAX_FLASH1_MAX_FL_EN 0x80 109*4882a593Smuzhiyun #define MAX_FLASH1_VSYS_MIN 2400 110*4882a593Smuzhiyun #define MAX_FLASH1_VSYS_MAX 3400 111*4882a593Smuzhiyun #define MAX_FLASH1_VSYS_STEP 33 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* MAX77693 VOUT_CNTL register */ 114*4882a593Smuzhiyun #define FLASH_BOOST_FIXED 0x04 115*4882a593Smuzhiyun #define FLASH_BOOST_LEDNUM_2 0x80 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun /* MAX77693 VOUT_FLASH1 register */ 118*4882a593Smuzhiyun #define FLASH_VOUT_MIN 3300 119*4882a593Smuzhiyun #define FLASH_VOUT_MAX 5500 120*4882a593Smuzhiyun #define FLASH_VOUT_STEP 25 121*4882a593Smuzhiyun #define FLASH_VOUT_RMIN 0x0c 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun /* MAX77693 FLASH_STATUS register */ 124*4882a593Smuzhiyun #define FLASH_STATUS_FLASH_ON BIT(3) 125*4882a593Smuzhiyun #define FLASH_STATUS_TORCH_ON BIT(2) 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun /* MAX77693 FLASH_INT register */ 128*4882a593Smuzhiyun #define FLASH_INT_FLED2_OPEN BIT(0) 129*4882a593Smuzhiyun #define FLASH_INT_FLED2_SHORT BIT(1) 130*4882a593Smuzhiyun #define FLASH_INT_FLED1_OPEN BIT(2) 131*4882a593Smuzhiyun #define FLASH_INT_FLED1_SHORT BIT(3) 132*4882a593Smuzhiyun #define FLASH_INT_OVER_CURRENT BIT(4) 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun /* Fast charge timer in hours */ 135*4882a593Smuzhiyun #define DEFAULT_FAST_CHARGE_TIMER 4 136*4882a593Smuzhiyun /* microamps */ 137*4882a593Smuzhiyun #define DEFAULT_TOP_OFF_THRESHOLD_CURRENT 150000 138*4882a593Smuzhiyun /* minutes */ 139*4882a593Smuzhiyun #define DEFAULT_TOP_OFF_TIMER 30 140*4882a593Smuzhiyun /* microvolts */ 141*4882a593Smuzhiyun #define DEFAULT_CONSTANT_VOLT 4200000 142*4882a593Smuzhiyun /* microvolts */ 143*4882a593Smuzhiyun #define DEFAULT_MIN_SYSTEM_VOLT 3600000 144*4882a593Smuzhiyun /* celsius */ 145*4882a593Smuzhiyun #define DEFAULT_THERMAL_REGULATION_TEMP 100 146*4882a593Smuzhiyun /* microamps */ 147*4882a593Smuzhiyun #define DEFAULT_BATTERY_OVERCURRENT 3500000 148*4882a593Smuzhiyun /* microvolts */ 149*4882a593Smuzhiyun #define DEFAULT_CHARGER_INPUT_THRESHOLD_VOLT 4300000 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_INT_OK register */ 152*4882a593Smuzhiyun #define CHG_INT_OK_BYP_SHIFT 0 153*4882a593Smuzhiyun #define CHG_INT_OK_BAT_SHIFT 3 154*4882a593Smuzhiyun #define CHG_INT_OK_CHG_SHIFT 4 155*4882a593Smuzhiyun #define CHG_INT_OK_CHGIN_SHIFT 6 156*4882a593Smuzhiyun #define CHG_INT_OK_DETBAT_SHIFT 7 157*4882a593Smuzhiyun #define CHG_INT_OK_BYP_MASK BIT(CHG_INT_OK_BYP_SHIFT) 158*4882a593Smuzhiyun #define CHG_INT_OK_BAT_MASK BIT(CHG_INT_OK_BAT_SHIFT) 159*4882a593Smuzhiyun #define CHG_INT_OK_CHG_MASK BIT(CHG_INT_OK_CHG_SHIFT) 160*4882a593Smuzhiyun #define CHG_INT_OK_CHGIN_MASK BIT(CHG_INT_OK_CHGIN_SHIFT) 161*4882a593Smuzhiyun #define CHG_INT_OK_DETBAT_MASK BIT(CHG_INT_OK_DETBAT_SHIFT) 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_DETAILS_00 register */ 164*4882a593Smuzhiyun #define CHG_DETAILS_00_CHGIN_SHIFT 5 165*4882a593Smuzhiyun #define CHG_DETAILS_00_CHGIN_MASK (0x3 << CHG_DETAILS_00_CHGIN_SHIFT) 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_DETAILS_01 register */ 168*4882a593Smuzhiyun #define CHG_DETAILS_01_CHG_SHIFT 0 169*4882a593Smuzhiyun #define CHG_DETAILS_01_BAT_SHIFT 4 170*4882a593Smuzhiyun #define CHG_DETAILS_01_TREG_SHIFT 7 171*4882a593Smuzhiyun #define CHG_DETAILS_01_CHG_MASK (0xf << CHG_DETAILS_01_CHG_SHIFT) 172*4882a593Smuzhiyun #define CHG_DETAILS_01_BAT_MASK (0x7 << CHG_DETAILS_01_BAT_SHIFT) 173*4882a593Smuzhiyun #define CHG_DETAILS_01_TREG_MASK BIT(7) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_DETAILS_01/CHG field */ 176*4882a593Smuzhiyun enum max77693_charger_charging_state { 177*4882a593Smuzhiyun MAX77693_CHARGING_PREQUALIFICATION = 0x0, 178*4882a593Smuzhiyun MAX77693_CHARGING_FAST_CONST_CURRENT, 179*4882a593Smuzhiyun MAX77693_CHARGING_FAST_CONST_VOLTAGE, 180*4882a593Smuzhiyun MAX77693_CHARGING_TOP_OFF, 181*4882a593Smuzhiyun MAX77693_CHARGING_DONE, 182*4882a593Smuzhiyun MAX77693_CHARGING_HIGH_TEMP, 183*4882a593Smuzhiyun MAX77693_CHARGING_TIMER_EXPIRED, 184*4882a593Smuzhiyun MAX77693_CHARGING_THERMISTOR_SUSPEND, 185*4882a593Smuzhiyun MAX77693_CHARGING_OFF, 186*4882a593Smuzhiyun MAX77693_CHARGING_RESERVED, 187*4882a593Smuzhiyun MAX77693_CHARGING_OVER_TEMP, 188*4882a593Smuzhiyun MAX77693_CHARGING_WATCHDOG_EXPIRED, 189*4882a593Smuzhiyun }; 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_DETAILS_01/BAT field */ 192*4882a593Smuzhiyun enum max77693_charger_battery_state { 193*4882a593Smuzhiyun MAX77693_BATTERY_NOBAT = 0x0, 194*4882a593Smuzhiyun /* Dead-battery or low-battery prequalification */ 195*4882a593Smuzhiyun MAX77693_BATTERY_PREQUALIFICATION, 196*4882a593Smuzhiyun MAX77693_BATTERY_TIMER_EXPIRED, 197*4882a593Smuzhiyun MAX77693_BATTERY_GOOD, 198*4882a593Smuzhiyun MAX77693_BATTERY_LOWVOLTAGE, 199*4882a593Smuzhiyun MAX77693_BATTERY_OVERVOLTAGE, 200*4882a593Smuzhiyun MAX77693_BATTERY_OVERCURRENT, 201*4882a593Smuzhiyun MAX77693_BATTERY_RESERVED, 202*4882a593Smuzhiyun }; 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_DETAILS_02 register */ 205*4882a593Smuzhiyun #define CHG_DETAILS_02_BYP_SHIFT 0 206*4882a593Smuzhiyun #define CHG_DETAILS_02_BYP_MASK (0xf << CHG_DETAILS_02_BYP_SHIFT) 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* MAX77693 CHG_CNFG_00 register */ 209*4882a593Smuzhiyun #define CHG_CNFG_00_CHG_MASK 0x1 210*4882a593Smuzhiyun #define CHG_CNFG_00_BUCK_MASK 0x4 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_CNFG_01 register */ 213*4882a593Smuzhiyun #define CHG_CNFG_01_FCHGTIME_SHIFT 0 214*4882a593Smuzhiyun #define CHG_CNFG_01_CHGRSTRT_SHIFT 4 215*4882a593Smuzhiyun #define CHG_CNFG_01_PQEN_SHIFT 7 216*4882a593Smuzhiyun #define CHG_CNFG_01_FCHGTIME_MASK (0x7 << CHG_CNFG_01_FCHGTIME_SHIFT) 217*4882a593Smuzhiyun #define CHG_CNFG_01_CHGRSTRT_MASK (0x3 << CHG_CNFG_01_CHGRSTRT_SHIFT) 218*4882a593Smuzhiyun #define CHG_CNFG_01_PQEN_MAKS BIT(CHG_CNFG_01_PQEN_SHIFT) 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_CNFG_03 register */ 221*4882a593Smuzhiyun #define CHG_CNFG_03_TOITH_SHIFT 0 222*4882a593Smuzhiyun #define CHG_CNFG_03_TOTIME_SHIFT 3 223*4882a593Smuzhiyun #define CHG_CNFG_03_TOITH_MASK (0x7 << CHG_CNFG_03_TOITH_SHIFT) 224*4882a593Smuzhiyun #define CHG_CNFG_03_TOTIME_MASK (0x7 << CHG_CNFG_03_TOTIME_SHIFT) 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_CNFG_04 register */ 227*4882a593Smuzhiyun #define CHG_CNFG_04_CHGCVPRM_SHIFT 0 228*4882a593Smuzhiyun #define CHG_CNFG_04_MINVSYS_SHIFT 5 229*4882a593Smuzhiyun #define CHG_CNFG_04_CHGCVPRM_MASK (0x1f << CHG_CNFG_04_CHGCVPRM_SHIFT) 230*4882a593Smuzhiyun #define CHG_CNFG_04_MINVSYS_MASK (0x7 << CHG_CNFG_04_MINVSYS_SHIFT) 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_CNFG_06 register */ 233*4882a593Smuzhiyun #define CHG_CNFG_06_CHGPROT_SHIFT 2 234*4882a593Smuzhiyun #define CHG_CNFG_06_CHGPROT_MASK (0x3 << CHG_CNFG_06_CHGPROT_SHIFT) 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_CNFG_07 register */ 237*4882a593Smuzhiyun #define CHG_CNFG_07_REGTEMP_SHIFT 5 238*4882a593Smuzhiyun #define CHG_CNFG_07_REGTEMP_MASK (0x3 << CHG_CNFG_07_REGTEMP_SHIFT) 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun /* MAX77693_CHG_REG_CHG_CNFG_12 register */ 241*4882a593Smuzhiyun #define CHG_CNFG_12_B2SOVRC_SHIFT 0 242*4882a593Smuzhiyun #define CHG_CNFG_12_VCHGINREG_SHIFT 3 243*4882a593Smuzhiyun #define CHG_CNFG_12_B2SOVRC_MASK (0x7 << CHG_CNFG_12_B2SOVRC_SHIFT) 244*4882a593Smuzhiyun #define CHG_CNFG_12_VCHGINREG_MASK (0x3 << CHG_CNFG_12_VCHGINREG_SHIFT) 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun /* MAX77693 CHG_CNFG_09 Register */ 247*4882a593Smuzhiyun #define CHG_CNFG_09_CHGIN_ILIM_MASK 0x7F 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun /* MAX77693 CHG_CTRL Register */ 250*4882a593Smuzhiyun #define SAFEOUT_CTRL_SAFEOUT1_MASK 0x3 251*4882a593Smuzhiyun #define SAFEOUT_CTRL_SAFEOUT2_MASK 0xC 252*4882a593Smuzhiyun #define SAFEOUT_CTRL_ENSAFEOUT1_MASK 0x40 253*4882a593Smuzhiyun #define SAFEOUT_CTRL_ENSAFEOUT2_MASK 0x80 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun /* Slave addr = 0x4A: MUIC */ 256*4882a593Smuzhiyun enum max77693_muic_reg { 257*4882a593Smuzhiyun MAX77693_MUIC_REG_ID = 0x00, 258*4882a593Smuzhiyun MAX77693_MUIC_REG_INT1 = 0x01, 259*4882a593Smuzhiyun MAX77693_MUIC_REG_INT2 = 0x02, 260*4882a593Smuzhiyun MAX77693_MUIC_REG_INT3 = 0x03, 261*4882a593Smuzhiyun MAX77693_MUIC_REG_STATUS1 = 0x04, 262*4882a593Smuzhiyun MAX77693_MUIC_REG_STATUS2 = 0x05, 263*4882a593Smuzhiyun MAX77693_MUIC_REG_STATUS3 = 0x06, 264*4882a593Smuzhiyun MAX77693_MUIC_REG_INTMASK1 = 0x07, 265*4882a593Smuzhiyun MAX77693_MUIC_REG_INTMASK2 = 0x08, 266*4882a593Smuzhiyun MAX77693_MUIC_REG_INTMASK3 = 0x09, 267*4882a593Smuzhiyun MAX77693_MUIC_REG_CDETCTRL1 = 0x0A, 268*4882a593Smuzhiyun MAX77693_MUIC_REG_CDETCTRL2 = 0x0B, 269*4882a593Smuzhiyun MAX77693_MUIC_REG_CTRL1 = 0x0C, 270*4882a593Smuzhiyun MAX77693_MUIC_REG_CTRL2 = 0x0D, 271*4882a593Smuzhiyun MAX77693_MUIC_REG_CTRL3 = 0x0E, 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun MAX77693_MUIC_REG_END, 274*4882a593Smuzhiyun }; 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun /* MAX77693 INTMASK1~2 Register */ 277*4882a593Smuzhiyun #define INTMASK1_ADC1K_SHIFT 3 278*4882a593Smuzhiyun #define INTMASK1_ADCERR_SHIFT 2 279*4882a593Smuzhiyun #define INTMASK1_ADCLOW_SHIFT 1 280*4882a593Smuzhiyun #define INTMASK1_ADC_SHIFT 0 281*4882a593Smuzhiyun #define INTMASK1_ADC1K_MASK (1 << INTMASK1_ADC1K_SHIFT) 282*4882a593Smuzhiyun #define INTMASK1_ADCERR_MASK (1 << INTMASK1_ADCERR_SHIFT) 283*4882a593Smuzhiyun #define INTMASK1_ADCLOW_MASK (1 << INTMASK1_ADCLOW_SHIFT) 284*4882a593Smuzhiyun #define INTMASK1_ADC_MASK (1 << INTMASK1_ADC_SHIFT) 285*4882a593Smuzhiyun 286*4882a593Smuzhiyun #define INTMASK2_VIDRM_SHIFT 5 287*4882a593Smuzhiyun #define INTMASK2_VBVOLT_SHIFT 4 288*4882a593Smuzhiyun #define INTMASK2_DXOVP_SHIFT 3 289*4882a593Smuzhiyun #define INTMASK2_DCDTMR_SHIFT 2 290*4882a593Smuzhiyun #define INTMASK2_CHGDETRUN_SHIFT 1 291*4882a593Smuzhiyun #define INTMASK2_CHGTYP_SHIFT 0 292*4882a593Smuzhiyun #define INTMASK2_VIDRM_MASK (1 << INTMASK2_VIDRM_SHIFT) 293*4882a593Smuzhiyun #define INTMASK2_VBVOLT_MASK (1 << INTMASK2_VBVOLT_SHIFT) 294*4882a593Smuzhiyun #define INTMASK2_DXOVP_MASK (1 << INTMASK2_DXOVP_SHIFT) 295*4882a593Smuzhiyun #define INTMASK2_DCDTMR_MASK (1 << INTMASK2_DCDTMR_SHIFT) 296*4882a593Smuzhiyun #define INTMASK2_CHGDETRUN_MASK (1 << INTMASK2_CHGDETRUN_SHIFT) 297*4882a593Smuzhiyun #define INTMASK2_CHGTYP_MASK (1 << INTMASK2_CHGTYP_SHIFT) 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun /* MAX77693 MUIC - STATUS1~3 Register */ 300*4882a593Smuzhiyun #define MAX77693_STATUS1_ADC_SHIFT 0 301*4882a593Smuzhiyun #define MAX77693_STATUS1_ADCLOW_SHIFT 5 302*4882a593Smuzhiyun #define MAX77693_STATUS1_ADCERR_SHIFT 6 303*4882a593Smuzhiyun #define MAX77693_STATUS1_ADC1K_SHIFT 7 304*4882a593Smuzhiyun #define MAX77693_STATUS1_ADC_MASK (0x1f << MAX77693_STATUS1_ADC_SHIFT) 305*4882a593Smuzhiyun #define MAX77693_STATUS1_ADCLOW_MASK BIT(MAX77693_STATUS1_ADCLOW_SHIFT) 306*4882a593Smuzhiyun #define MAX77693_STATUS1_ADCERR_MASK BIT(MAX77693_STATUS1_ADCERR_SHIFT) 307*4882a593Smuzhiyun #define MAX77693_STATUS1_ADC1K_MASK BIT(MAX77693_STATUS1_ADC1K_SHIFT) 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun #define MAX77693_STATUS2_CHGTYP_SHIFT 0 310*4882a593Smuzhiyun #define MAX77693_STATUS2_CHGDETRUN_SHIFT 3 311*4882a593Smuzhiyun #define MAX77693_STATUS2_DCDTMR_SHIFT 4 312*4882a593Smuzhiyun #define MAX77693_STATUS2_DXOVP_SHIFT 5 313*4882a593Smuzhiyun #define MAX77693_STATUS2_VBVOLT_SHIFT 6 314*4882a593Smuzhiyun #define MAX77693_STATUS2_VIDRM_SHIFT 7 315*4882a593Smuzhiyun #define MAX77693_STATUS2_CHGTYP_MASK (0x7 << MAX77693_STATUS2_CHGTYP_SHIFT) 316*4882a593Smuzhiyun #define MAX77693_STATUS2_CHGDETRUN_MASK BIT(MAX77693_STATUS2_CHGDETRUN_SHIFT) 317*4882a593Smuzhiyun #define MAX77693_STATUS2_DCDTMR_MASK BIT(MAX77693_STATUS2_DCDTMR_SHIFT) 318*4882a593Smuzhiyun #define MAX77693_STATUS2_DXOVP_MASK BIT(MAX77693_STATUS2_DXOVP_SHIFT) 319*4882a593Smuzhiyun #define MAX77693_STATUS2_VBVOLT_MASK BIT(MAX77693_STATUS2_VBVOLT_SHIFT) 320*4882a593Smuzhiyun #define MAX77693_STATUS2_VIDRM_MASK BIT(MAX77693_STATUS2_VIDRM_SHIFT) 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun #define MAX77693_STATUS3_OVP_SHIFT 2 323*4882a593Smuzhiyun #define MAX77693_STATUS3_OVP_MASK BIT(MAX77693_STATUS3_OVP_SHIFT) 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun /* MAX77693 CDETCTRL1~2 register */ 326*4882a593Smuzhiyun #define CDETCTRL1_CHGDETEN_SHIFT (0) 327*4882a593Smuzhiyun #define CDETCTRL1_CHGTYPMAN_SHIFT (1) 328*4882a593Smuzhiyun #define CDETCTRL1_DCDEN_SHIFT (2) 329*4882a593Smuzhiyun #define CDETCTRL1_DCD2SCT_SHIFT (3) 330*4882a593Smuzhiyun #define CDETCTRL1_CDDELAY_SHIFT (4) 331*4882a593Smuzhiyun #define CDETCTRL1_DCDCPL_SHIFT (5) 332*4882a593Smuzhiyun #define CDETCTRL1_CDPDET_SHIFT (7) 333*4882a593Smuzhiyun #define CDETCTRL1_CHGDETEN_MASK (0x1 << CDETCTRL1_CHGDETEN_SHIFT) 334*4882a593Smuzhiyun #define CDETCTRL1_CHGTYPMAN_MASK (0x1 << CDETCTRL1_CHGTYPMAN_SHIFT) 335*4882a593Smuzhiyun #define CDETCTRL1_DCDEN_MASK (0x1 << CDETCTRL1_DCDEN_SHIFT) 336*4882a593Smuzhiyun #define CDETCTRL1_DCD2SCT_MASK (0x1 << CDETCTRL1_DCD2SCT_SHIFT) 337*4882a593Smuzhiyun #define CDETCTRL1_CDDELAY_MASK (0x1 << CDETCTRL1_CDDELAY_SHIFT) 338*4882a593Smuzhiyun #define CDETCTRL1_DCDCPL_MASK (0x1 << CDETCTRL1_DCDCPL_SHIFT) 339*4882a593Smuzhiyun #define CDETCTRL1_CDPDET_MASK (0x1 << CDETCTRL1_CDPDET_SHIFT) 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun #define CDETCTRL2_VIDRMEN_SHIFT (1) 342*4882a593Smuzhiyun #define CDETCTRL2_DXOVPEN_SHIFT (3) 343*4882a593Smuzhiyun #define CDETCTRL2_VIDRMEN_MASK (0x1 << CDETCTRL2_VIDRMEN_SHIFT) 344*4882a593Smuzhiyun #define CDETCTRL2_DXOVPEN_MASK (0x1 << CDETCTRL2_DXOVPEN_SHIFT) 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun /* MAX77693 MUIC - CONTROL1~3 register */ 347*4882a593Smuzhiyun #define COMN1SW_SHIFT (0) 348*4882a593Smuzhiyun #define COMP2SW_SHIFT (3) 349*4882a593Smuzhiyun #define COMN1SW_MASK (0x7 << COMN1SW_SHIFT) 350*4882a593Smuzhiyun #define COMP2SW_MASK (0x7 << COMP2SW_SHIFT) 351*4882a593Smuzhiyun #define COMP_SW_MASK (COMP2SW_MASK | COMN1SW_MASK) 352*4882a593Smuzhiyun #define MAX77693_CONTROL1_SW_USB ((1 << COMP2SW_SHIFT) \ 353*4882a593Smuzhiyun | (1 << COMN1SW_SHIFT)) 354*4882a593Smuzhiyun #define MAX77693_CONTROL1_SW_AUDIO ((2 << COMP2SW_SHIFT) \ 355*4882a593Smuzhiyun | (2 << COMN1SW_SHIFT)) 356*4882a593Smuzhiyun #define MAX77693_CONTROL1_SW_UART ((3 << COMP2SW_SHIFT) \ 357*4882a593Smuzhiyun | (3 << COMN1SW_SHIFT)) 358*4882a593Smuzhiyun #define MAX77693_CONTROL1_SW_OPEN ((0 << COMP2SW_SHIFT) \ 359*4882a593Smuzhiyun | (0 << COMN1SW_SHIFT)) 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun #define MAX77693_CONTROL2_LOWPWR_SHIFT 0 362*4882a593Smuzhiyun #define MAX77693_CONTROL2_ADCEN_SHIFT 1 363*4882a593Smuzhiyun #define MAX77693_CONTROL2_CPEN_SHIFT 2 364*4882a593Smuzhiyun #define MAX77693_CONTROL2_SFOUTASRT_SHIFT 3 365*4882a593Smuzhiyun #define MAX77693_CONTROL2_SFOUTORD_SHIFT 4 366*4882a593Smuzhiyun #define MAX77693_CONTROL2_ACCDET_SHIFT 5 367*4882a593Smuzhiyun #define MAX77693_CONTROL2_USBCPINT_SHIFT 6 368*4882a593Smuzhiyun #define MAX77693_CONTROL2_RCPS_SHIFT 7 369*4882a593Smuzhiyun #define MAX77693_CONTROL2_LOWPWR_MASK BIT(MAX77693_CONTROL2_LOWPWR_SHIFT) 370*4882a593Smuzhiyun #define MAX77693_CONTROL2_ADCEN_MASK BIT(MAX77693_CONTROL2_ADCEN_SHIFT) 371*4882a593Smuzhiyun #define MAX77693_CONTROL2_CPEN_MASK BIT(MAX77693_CONTROL2_CPEN_SHIFT) 372*4882a593Smuzhiyun #define MAX77693_CONTROL2_SFOUTASRT_MASK BIT(MAX77693_CONTROL2_SFOUTASRT_SHIFT) 373*4882a593Smuzhiyun #define MAX77693_CONTROL2_SFOUTORD_MASK BIT(MAX77693_CONTROL2_SFOUTORD_SHIFT) 374*4882a593Smuzhiyun #define MAX77693_CONTROL2_ACCDET_MASK BIT(MAX77693_CONTROL2_ACCDET_SHIFT) 375*4882a593Smuzhiyun #define MAX77693_CONTROL2_USBCPINT_MASK BIT(MAX77693_CONTROL2_USBCPINT_SHIFT) 376*4882a593Smuzhiyun #define MAX77693_CONTROL2_RCPS_MASK BIT(MAX77693_CONTROL2_RCPS_SHIFT) 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun #define MAX77693_CONTROL3_JIGSET_SHIFT 0 379*4882a593Smuzhiyun #define MAX77693_CONTROL3_BTLDSET_SHIFT 2 380*4882a593Smuzhiyun #define MAX77693_CONTROL3_ADCDBSET_SHIFT 4 381*4882a593Smuzhiyun #define MAX77693_CONTROL3_JIGSET_MASK (0x3 << MAX77693_CONTROL3_JIGSET_SHIFT) 382*4882a593Smuzhiyun #define MAX77693_CONTROL3_BTLDSET_MASK (0x3 << MAX77693_CONTROL3_BTLDSET_SHIFT) 383*4882a593Smuzhiyun #define MAX77693_CONTROL3_ADCDBSET_MASK (0x3 << MAX77693_CONTROL3_ADCDBSET_SHIFT) 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun /* Slave addr = 0x90: Haptic */ 386*4882a593Smuzhiyun enum max77693_haptic_reg { 387*4882a593Smuzhiyun MAX77693_HAPTIC_REG_STATUS = 0x00, 388*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG1 = 0x01, 389*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG2 = 0x02, 390*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_CHNL = 0x03, 391*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFG_CYC1 = 0x04, 392*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFG_CYC2 = 0x05, 393*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_PER1 = 0x06, 394*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_PER2 = 0x07, 395*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_PER3 = 0x08, 396*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_PER4 = 0x09, 397*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_DUTY1 = 0x0A, 398*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_DUTY2 = 0x0B, 399*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_PWM1 = 0x0C, 400*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_PWM2 = 0x0D, 401*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_PWM3 = 0x0E, 402*4882a593Smuzhiyun MAX77693_HAPTIC_REG_CONFIG_PWM4 = 0x0F, 403*4882a593Smuzhiyun MAX77693_HAPTIC_REG_REV = 0x10, 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun MAX77693_HAPTIC_REG_END, 406*4882a593Smuzhiyun }; 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun /* max77693-pmic LSCNFG configuraton register */ 409*4882a593Smuzhiyun #define MAX77693_PMIC_LOW_SYS_MASK 0x80 410*4882a593Smuzhiyun #define MAX77693_PMIC_LOW_SYS_SHIFT 7 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun /* max77693-haptic configuration register */ 413*4882a593Smuzhiyun #define MAX77693_CONFIG2_MODE 7 414*4882a593Smuzhiyun #define MAX77693_CONFIG2_MEN 6 415*4882a593Smuzhiyun #define MAX77693_CONFIG2_HTYP 5 416*4882a593Smuzhiyun 417*4882a593Smuzhiyun enum max77693_irq_source { 418*4882a593Smuzhiyun LED_INT = 0, 419*4882a593Smuzhiyun TOPSYS_INT, 420*4882a593Smuzhiyun CHG_INT, 421*4882a593Smuzhiyun MUIC_INT1, 422*4882a593Smuzhiyun MUIC_INT2, 423*4882a593Smuzhiyun MUIC_INT3, 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun MAX77693_IRQ_GROUP_NR, 426*4882a593Smuzhiyun }; 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun #define SRC_IRQ_CHARGER BIT(0) 429*4882a593Smuzhiyun #define SRC_IRQ_TOP BIT(1) 430*4882a593Smuzhiyun #define SRC_IRQ_FLASH BIT(2) 431*4882a593Smuzhiyun #define SRC_IRQ_MUIC BIT(3) 432*4882a593Smuzhiyun #define SRC_IRQ_ALL (SRC_IRQ_CHARGER | SRC_IRQ_TOP \ 433*4882a593Smuzhiyun | SRC_IRQ_FLASH | SRC_IRQ_MUIC) 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun #define LED_IRQ_FLED2_OPEN BIT(0) 436*4882a593Smuzhiyun #define LED_IRQ_FLED2_SHORT BIT(1) 437*4882a593Smuzhiyun #define LED_IRQ_FLED1_OPEN BIT(2) 438*4882a593Smuzhiyun #define LED_IRQ_FLED1_SHORT BIT(3) 439*4882a593Smuzhiyun #define LED_IRQ_MAX_FLASH BIT(4) 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun #define TOPSYS_IRQ_T120C_INT BIT(0) 442*4882a593Smuzhiyun #define TOPSYS_IRQ_T140C_INT BIT(1) 443*4882a593Smuzhiyun #define TOPSYS_IRQ_LOWSYS_INT BIT(3) 444*4882a593Smuzhiyun 445*4882a593Smuzhiyun #define CHG_IRQ_BYP_I BIT(0) 446*4882a593Smuzhiyun #define CHG_IRQ_THM_I BIT(2) 447*4882a593Smuzhiyun #define CHG_IRQ_BAT_I BIT(3) 448*4882a593Smuzhiyun #define CHG_IRQ_CHG_I BIT(4) 449*4882a593Smuzhiyun #define CHG_IRQ_CHGIN_I BIT(6) 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun #define MUIC_IRQ_INT1_ADC BIT(0) 452*4882a593Smuzhiyun #define MUIC_IRQ_INT1_ADC_LOW BIT(1) 453*4882a593Smuzhiyun #define MUIC_IRQ_INT1_ADC_ERR BIT(2) 454*4882a593Smuzhiyun #define MUIC_IRQ_INT1_ADC1K BIT(3) 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun #define MUIC_IRQ_INT2_CHGTYP BIT(0) 457*4882a593Smuzhiyun #define MUIC_IRQ_INT2_CHGDETREUN BIT(1) 458*4882a593Smuzhiyun #define MUIC_IRQ_INT2_DCDTMR BIT(2) 459*4882a593Smuzhiyun #define MUIC_IRQ_INT2_DXOVP BIT(3) 460*4882a593Smuzhiyun #define MUIC_IRQ_INT2_VBVOLT BIT(4) 461*4882a593Smuzhiyun #define MUIC_IRQ_INT2_VIDRM BIT(5) 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun #define MUIC_IRQ_INT3_EOC BIT(0) 464*4882a593Smuzhiyun #define MUIC_IRQ_INT3_CGMBC BIT(1) 465*4882a593Smuzhiyun #define MUIC_IRQ_INT3_OVP BIT(2) 466*4882a593Smuzhiyun #define MUIC_IRQ_INT3_MBCCHG_ERR BIT(3) 467*4882a593Smuzhiyun #define MUIC_IRQ_INT3_CHG_ENABLED BIT(4) 468*4882a593Smuzhiyun #define MUIC_IRQ_INT3_BAT_DET BIT(5) 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun enum max77693_irq { 471*4882a593Smuzhiyun /* PMIC - FLASH */ 472*4882a593Smuzhiyun MAX77693_LED_IRQ_FLED2_OPEN, 473*4882a593Smuzhiyun MAX77693_LED_IRQ_FLED2_SHORT, 474*4882a593Smuzhiyun MAX77693_LED_IRQ_FLED1_OPEN, 475*4882a593Smuzhiyun MAX77693_LED_IRQ_FLED1_SHORT, 476*4882a593Smuzhiyun MAX77693_LED_IRQ_MAX_FLASH, 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun /* PMIC - TOPSYS */ 479*4882a593Smuzhiyun MAX77693_TOPSYS_IRQ_T120C_INT, 480*4882a593Smuzhiyun MAX77693_TOPSYS_IRQ_T140C_INT, 481*4882a593Smuzhiyun MAX77693_TOPSYS_IRQ_LOWSYS_INT, 482*4882a593Smuzhiyun 483*4882a593Smuzhiyun /* PMIC - Charger */ 484*4882a593Smuzhiyun MAX77693_CHG_IRQ_BYP_I, 485*4882a593Smuzhiyun MAX77693_CHG_IRQ_THM_I, 486*4882a593Smuzhiyun MAX77693_CHG_IRQ_BAT_I, 487*4882a593Smuzhiyun MAX77693_CHG_IRQ_CHG_I, 488*4882a593Smuzhiyun MAX77693_CHG_IRQ_CHGIN_I, 489*4882a593Smuzhiyun 490*4882a593Smuzhiyun MAX77693_IRQ_NR, 491*4882a593Smuzhiyun }; 492*4882a593Smuzhiyun 493*4882a593Smuzhiyun enum max77693_irq_muic { 494*4882a593Smuzhiyun /* MUIC INT1 */ 495*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT1_ADC, 496*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT1_ADC_LOW, 497*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT1_ADC_ERR, 498*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT1_ADC1K, 499*4882a593Smuzhiyun 500*4882a593Smuzhiyun /* MUIC INT2 */ 501*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT2_CHGTYP, 502*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT2_CHGDETREUN, 503*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT2_DCDTMR, 504*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT2_DXOVP, 505*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT2_VBVOLT, 506*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT2_VIDRM, 507*4882a593Smuzhiyun 508*4882a593Smuzhiyun /* MUIC INT3 */ 509*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT3_EOC, 510*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT3_CGMBC, 511*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT3_OVP, 512*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT3_MBCCHG_ERR, 513*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT3_CHG_ENABLED, 514*4882a593Smuzhiyun MAX77693_MUIC_IRQ_INT3_BAT_DET, 515*4882a593Smuzhiyun 516*4882a593Smuzhiyun MAX77693_MUIC_IRQ_NR, 517*4882a593Smuzhiyun }; 518*4882a593Smuzhiyun 519*4882a593Smuzhiyun #endif /* __LINUX_MFD_MAX77693_PRIV_H */ 520