1417c0fc2SLinus Walleij /* SPDX-License-Identifier: GPL-2.0-only */ 2417c0fc2SLinus Walleij 3417c0fc2SLinus Walleij #ifndef _AB8500_CHARGER_H_ 4417c0fc2SLinus Walleij #define _AB8500_CHARGER_H_ 5417c0fc2SLinus Walleij 6417c0fc2SLinus Walleij #include <linux/kernel.h> 7417c0fc2SLinus Walleij 8417c0fc2SLinus Walleij /* 9417c0fc2SLinus Walleij * System control 2 register offsets. 10417c0fc2SLinus Walleij * bank = 0x02 11417c0fc2SLinus Walleij */ 12417c0fc2SLinus Walleij #define AB8500_MAIN_WDOG_CTRL_REG 0x01 13417c0fc2SLinus Walleij #define AB8500_LOW_BAT_REG 0x03 14417c0fc2SLinus Walleij #define AB8500_BATT_OK_REG 0x04 15417c0fc2SLinus Walleij /* 16417c0fc2SLinus Walleij * USB/ULPI register offsets 17417c0fc2SLinus Walleij * Bank : 0x5 18417c0fc2SLinus Walleij */ 19417c0fc2SLinus Walleij #define AB8500_USB_LINE_STAT_REG 0x80 20417c0fc2SLinus Walleij #define AB8500_USB_LINE_CTRL2_REG 0x82 21417c0fc2SLinus Walleij #define AB8500_USB_LINK1_STAT_REG 0x94 22417c0fc2SLinus Walleij 23417c0fc2SLinus Walleij /* 24417c0fc2SLinus Walleij * Charger / status register offfsets 25417c0fc2SLinus Walleij * Bank : 0x0B 26417c0fc2SLinus Walleij */ 27417c0fc2SLinus Walleij #define AB8500_CH_STATUS1_REG 0x00 28417c0fc2SLinus Walleij #define AB8500_CH_STATUS2_REG 0x01 29417c0fc2SLinus Walleij #define AB8500_CH_USBCH_STAT1_REG 0x02 30417c0fc2SLinus Walleij #define AB8500_CH_USBCH_STAT2_REG 0x03 31417c0fc2SLinus Walleij #define AB8540_CH_USBCH_STAT3_REG 0x04 32417c0fc2SLinus Walleij #define AB8500_CH_STAT_REG 0x05 33417c0fc2SLinus Walleij 34417c0fc2SLinus Walleij /* 35417c0fc2SLinus Walleij * Charger / control register offfsets 36417c0fc2SLinus Walleij * Bank : 0x0B 37417c0fc2SLinus Walleij */ 38417c0fc2SLinus Walleij #define AB8500_CH_VOLT_LVL_REG 0x40 39417c0fc2SLinus Walleij #define AB8500_CH_VOLT_LVL_MAX_REG 0x41 /*Only in Cut2.0*/ 40417c0fc2SLinus Walleij #define AB8500_CH_OPT_CRNTLVL_REG 0x42 41417c0fc2SLinus Walleij #define AB8500_CH_OPT_CRNTLVL_MAX_REG 0x43 /*Only in Cut2.0*/ 42417c0fc2SLinus Walleij #define AB8500_CH_WD_TIMER_REG 0x50 43417c0fc2SLinus Walleij #define AB8500_CHARG_WD_CTRL 0x51 44417c0fc2SLinus Walleij #define AB8500_BTEMP_HIGH_TH 0x52 45417c0fc2SLinus Walleij #define AB8500_LED_INDICATOR_PWM_CTRL 0x53 46417c0fc2SLinus Walleij #define AB8500_LED_INDICATOR_PWM_DUTY 0x54 47417c0fc2SLinus Walleij #define AB8500_BATT_OVV 0x55 48417c0fc2SLinus Walleij #define AB8500_CHARGER_CTRL 0x56 49417c0fc2SLinus Walleij #define AB8500_BAT_CTRL_CURRENT_SOURCE 0x60 /*Only in Cut2.0*/ 50417c0fc2SLinus Walleij 51417c0fc2SLinus Walleij /* 52417c0fc2SLinus Walleij * Charger / main control register offsets 53417c0fc2SLinus Walleij * Bank : 0x0B 54417c0fc2SLinus Walleij */ 55417c0fc2SLinus Walleij #define AB8500_MCH_CTRL1 0x80 56417c0fc2SLinus Walleij #define AB8500_MCH_CTRL2 0x81 57417c0fc2SLinus Walleij #define AB8500_MCH_IPT_CURLVL_REG 0x82 58417c0fc2SLinus Walleij #define AB8500_CH_WD_REG 0x83 59417c0fc2SLinus Walleij 60417c0fc2SLinus Walleij /* 61417c0fc2SLinus Walleij * Charger / USB control register offsets 62417c0fc2SLinus Walleij * Bank : 0x0B 63417c0fc2SLinus Walleij */ 64417c0fc2SLinus Walleij #define AB8500_USBCH_CTRL1_REG 0xC0 65417c0fc2SLinus Walleij #define AB8500_USBCH_CTRL2_REG 0xC1 66417c0fc2SLinus Walleij #define AB8500_USBCH_IPT_CRNTLVL_REG 0xC2 67417c0fc2SLinus Walleij #define AB8540_USB_PP_MODE_REG 0xC5 68417c0fc2SLinus Walleij #define AB8540_USB_PP_CHR_REG 0xC6 69417c0fc2SLinus Walleij 70417c0fc2SLinus Walleij /* 71417c0fc2SLinus Walleij * Gas Gauge register offsets 72417c0fc2SLinus Walleij * Bank : 0x0C 73417c0fc2SLinus Walleij */ 74417c0fc2SLinus Walleij #define AB8500_GASG_CC_CTRL_REG 0x00 75417c0fc2SLinus Walleij #define AB8500_GASG_CC_ACCU1_REG 0x01 76417c0fc2SLinus Walleij #define AB8500_GASG_CC_ACCU2_REG 0x02 77417c0fc2SLinus Walleij #define AB8500_GASG_CC_ACCU3_REG 0x03 78417c0fc2SLinus Walleij #define AB8500_GASG_CC_ACCU4_REG 0x04 79417c0fc2SLinus Walleij #define AB8500_GASG_CC_SMPL_CNTRL_REG 0x05 80417c0fc2SLinus Walleij #define AB8500_GASG_CC_SMPL_CNTRH_REG 0x06 81417c0fc2SLinus Walleij #define AB8500_GASG_CC_SMPL_CNVL_REG 0x07 82417c0fc2SLinus Walleij #define AB8500_GASG_CC_SMPL_CNVH_REG 0x08 83417c0fc2SLinus Walleij #define AB8500_GASG_CC_CNTR_AVGOFF_REG 0x09 84417c0fc2SLinus Walleij #define AB8500_GASG_CC_OFFSET_REG 0x0A 85417c0fc2SLinus Walleij #define AB8500_GASG_CC_NCOV_ACCU 0x10 86417c0fc2SLinus Walleij #define AB8500_GASG_CC_NCOV_ACCU_CTRL 0x11 87417c0fc2SLinus Walleij #define AB8500_GASG_CC_NCOV_ACCU_LOW 0x12 88417c0fc2SLinus Walleij #define AB8500_GASG_CC_NCOV_ACCU_MED 0x13 89417c0fc2SLinus Walleij #define AB8500_GASG_CC_NCOV_ACCU_HIGH 0x14 90417c0fc2SLinus Walleij 91417c0fc2SLinus Walleij /* 92417c0fc2SLinus Walleij * Interrupt register offsets 93417c0fc2SLinus Walleij * Bank : 0x0E 94417c0fc2SLinus Walleij */ 95417c0fc2SLinus Walleij #define AB8500_IT_SOURCE2_REG 0x01 96417c0fc2SLinus Walleij #define AB8500_IT_SOURCE21_REG 0x14 97417c0fc2SLinus Walleij 98417c0fc2SLinus Walleij /* 99417c0fc2SLinus Walleij * RTC register offsets 100417c0fc2SLinus Walleij * Bank: 0x0F 101417c0fc2SLinus Walleij */ 102417c0fc2SLinus Walleij #define AB8500_RTC_BACKUP_CHG_REG 0x0C 103417c0fc2SLinus Walleij #define AB8500_RTC_CC_CONF_REG 0x01 104417c0fc2SLinus Walleij #define AB8500_RTC_CTRL_REG 0x0B 105417c0fc2SLinus Walleij #define AB8500_RTC_CTRL1_REG 0x11 106417c0fc2SLinus Walleij 107417c0fc2SLinus Walleij /* 108417c0fc2SLinus Walleij * OTP register offsets 109417c0fc2SLinus Walleij * Bank : 0x15 110417c0fc2SLinus Walleij */ 111417c0fc2SLinus Walleij #define AB8500_OTP_CONF_15 0x0E 112417c0fc2SLinus Walleij 113417c0fc2SLinus Walleij /* GPADC constants from AB8500 spec, UM0836 */ 114417c0fc2SLinus Walleij #define ADC_RESOLUTION 1024 115417c0fc2SLinus Walleij #define ADC_CH_MAIN_MIN 0 116417c0fc2SLinus Walleij #define ADC_CH_MAIN_MAX 20030 117417c0fc2SLinus Walleij #define ADC_CH_VBUS_MIN 0 118417c0fc2SLinus Walleij #define ADC_CH_VBUS_MAX 20030 119417c0fc2SLinus Walleij #define ADC_CH_VBAT_MIN 2300 120417c0fc2SLinus Walleij #define ADC_CH_VBAT_MAX 4800 121417c0fc2SLinus Walleij #define ADC_CH_BKBAT_MIN 0 122417c0fc2SLinus Walleij #define ADC_CH_BKBAT_MAX 3200 123417c0fc2SLinus Walleij 124417c0fc2SLinus Walleij /* Main charge i/p current */ 125417c0fc2SLinus Walleij #define MAIN_CH_IP_CUR_0P9A 0x80 126417c0fc2SLinus Walleij #define MAIN_CH_IP_CUR_1P0A 0x90 127417c0fc2SLinus Walleij #define MAIN_CH_IP_CUR_1P1A 0xA0 128417c0fc2SLinus Walleij #define MAIN_CH_IP_CUR_1P2A 0xB0 129417c0fc2SLinus Walleij #define MAIN_CH_IP_CUR_1P3A 0xC0 130417c0fc2SLinus Walleij #define MAIN_CH_IP_CUR_1P4A 0xD0 131417c0fc2SLinus Walleij #define MAIN_CH_IP_CUR_1P5A 0xE0 132417c0fc2SLinus Walleij 133417c0fc2SLinus Walleij /* ChVoltLevel */ 134417c0fc2SLinus Walleij #define CH_VOL_LVL_3P5 0x00 135417c0fc2SLinus Walleij #define CH_VOL_LVL_4P0 0x14 136417c0fc2SLinus Walleij #define CH_VOL_LVL_4P05 0x16 137417c0fc2SLinus Walleij #define CH_VOL_LVL_4P1 0x1B 138417c0fc2SLinus Walleij #define CH_VOL_LVL_4P15 0x20 139417c0fc2SLinus Walleij #define CH_VOL_LVL_4P2 0x25 140417c0fc2SLinus Walleij #define CH_VOL_LVL_4P6 0x4D 141417c0fc2SLinus Walleij 142417c0fc2SLinus Walleij /* ChOutputCurrentLevel */ 143417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P1 0x00 144417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P2 0x01 145417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P3 0x02 146417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P4 0x03 147417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P5 0x04 148417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P6 0x05 149417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P7 0x06 150417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P8 0x07 151417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_0P9 0x08 152417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_1P4 0x0D 153417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_1P5 0x0E 154417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_1P6 0x0F 155417c0fc2SLinus Walleij #define CH_OP_CUR_LVL_2P 0x3F 156417c0fc2SLinus Walleij 157417c0fc2SLinus Walleij /* BTEMP High thermal limits */ 158417c0fc2SLinus Walleij #define BTEMP_HIGH_TH_57_0 0x00 159417c0fc2SLinus Walleij #define BTEMP_HIGH_TH_52 0x01 160417c0fc2SLinus Walleij #define BTEMP_HIGH_TH_57_1 0x02 161417c0fc2SLinus Walleij #define BTEMP_HIGH_TH_62 0x03 162417c0fc2SLinus Walleij 163417c0fc2SLinus Walleij #define LOW_BAT_3P1V 0x20 164417c0fc2SLinus Walleij #define LOW_BAT_2P3V 0x00 165417c0fc2SLinus Walleij #define LOW_BAT_RESET 0x01 166417c0fc2SLinus Walleij #define LOW_BAT_ENABLE 0x01 167417c0fc2SLinus Walleij 168417c0fc2SLinus Walleij /* Backup battery constants */ 169417c0fc2SLinus Walleij #define BUP_ICH_SEL_50UA 0x00 170417c0fc2SLinus Walleij #define BUP_ICH_SEL_150UA 0x04 171417c0fc2SLinus Walleij #define BUP_ICH_SEL_300UA 0x08 172417c0fc2SLinus Walleij #define BUP_ICH_SEL_700UA 0x0C 173417c0fc2SLinus Walleij 174417c0fc2SLinus Walleij enum bup_vch_sel { 175417c0fc2SLinus Walleij BUP_VCH_SEL_2P5V, 176417c0fc2SLinus Walleij BUP_VCH_SEL_2P6V, 177417c0fc2SLinus Walleij BUP_VCH_SEL_2P8V, 178417c0fc2SLinus Walleij BUP_VCH_SEL_3P1V, 179417c0fc2SLinus Walleij /* 180417c0fc2SLinus Walleij * Note that the following 5 values 2.7v, 2.9v, 3.0v, 3.2v, 3.3v 181417c0fc2SLinus Walleij * are only available on ab8540. You can't choose these 5 182417c0fc2SLinus Walleij * voltage on ab8500/ab8505/ab9540. 183417c0fc2SLinus Walleij */ 184417c0fc2SLinus Walleij BUP_VCH_SEL_2P7V, 185417c0fc2SLinus Walleij BUP_VCH_SEL_2P9V, 186417c0fc2SLinus Walleij BUP_VCH_SEL_3P0V, 187417c0fc2SLinus Walleij BUP_VCH_SEL_3P2V, 188417c0fc2SLinus Walleij BUP_VCH_SEL_3P3V, 189417c0fc2SLinus Walleij }; 190417c0fc2SLinus Walleij 191417c0fc2SLinus Walleij #define BUP_VCH_RANGE 0x02 192417c0fc2SLinus Walleij #define VBUP33_VRTCN 0x01 193417c0fc2SLinus Walleij 194417c0fc2SLinus Walleij /* Battery OVV constants */ 195417c0fc2SLinus Walleij #define BATT_OVV_ENA 0x02 196417c0fc2SLinus Walleij #define BATT_OVV_TH_3P7 0x00 197417c0fc2SLinus Walleij #define BATT_OVV_TH_4P75 0x01 198417c0fc2SLinus Walleij 1990525f34dSLinus Walleij /* A value to indicate over voltage (microvolts) */ 2000525f34dSLinus Walleij #define BATT_OVV_VALUE 4750000 201417c0fc2SLinus Walleij 202417c0fc2SLinus Walleij /* VBUS OVV constants */ 203417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_MASK 0x78 204417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_5P6V 0x00 205417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_5P7V 0x08 206417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_5P8V 0x10 207417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_5P9V 0x18 208417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_6P0V 0x20 209417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_6P1V 0x28 210417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_6P2V 0x30 211417c0fc2SLinus Walleij #define VBUS_OVV_SELECT_6P3V 0x38 212417c0fc2SLinus Walleij 213417c0fc2SLinus Walleij #define VBUS_AUTO_IN_CURR_LIM_ENA 0x04 214417c0fc2SLinus Walleij 215417c0fc2SLinus Walleij /* Fuel Gauge constants */ 216417c0fc2SLinus Walleij #define RESET_ACCU 0x02 217417c0fc2SLinus Walleij #define READ_REQ 0x01 218417c0fc2SLinus Walleij #define CC_DEEP_SLEEP_ENA 0x02 219417c0fc2SLinus Walleij #define CC_PWR_UP_ENA 0x01 220417c0fc2SLinus Walleij #define CC_SAMPLES_40 0x28 221417c0fc2SLinus Walleij #define RD_NCONV_ACCU_REQ 0x01 222417c0fc2SLinus Walleij #define CC_CALIB 0x08 223417c0fc2SLinus Walleij #define CC_INTAVGOFFSET_ENA 0x10 224417c0fc2SLinus Walleij #define CC_MUXOFFSET 0x80 225417c0fc2SLinus Walleij #define CC_INT_CAL_N_AVG_MASK 0x60 226417c0fc2SLinus Walleij #define CC_INT_CAL_SAMPLES_16 0x40 227417c0fc2SLinus Walleij #define CC_INT_CAL_SAMPLES_8 0x20 228417c0fc2SLinus Walleij #define CC_INT_CAL_SAMPLES_4 0x00 229417c0fc2SLinus Walleij 230417c0fc2SLinus Walleij /* RTC constants */ 231417c0fc2SLinus Walleij #define RTC_BUP_CH_ENA 0x10 232417c0fc2SLinus Walleij 233417c0fc2SLinus Walleij /* BatCtrl Current Source Constants */ 234417c0fc2SLinus Walleij #define BAT_CTRL_7U_ENA 0x01 235417c0fc2SLinus Walleij #define BAT_CTRL_20U_ENA 0x02 236417c0fc2SLinus Walleij #define BAT_CTRL_18U_ENA 0x01 237417c0fc2SLinus Walleij #define BAT_CTRL_16U_ENA 0x02 238417c0fc2SLinus Walleij #define BAT_CTRL_CMP_ENA 0x04 239417c0fc2SLinus Walleij #define FORCE_BAT_CTRL_CMP_HIGH 0x08 240417c0fc2SLinus Walleij #define BAT_CTRL_PULL_UP_ENA 0x10 241417c0fc2SLinus Walleij 242417c0fc2SLinus Walleij /* Battery type */ 243417c0fc2SLinus Walleij #define BATTERY_UNKNOWN 00 244417c0fc2SLinus Walleij 245417c0fc2SLinus Walleij /* Registers for pcut feature in ab8505 and ab9540 */ 246417c0fc2SLinus Walleij #define AB8505_RTC_PCUT_CTL_STATUS_REG 0x12 247417c0fc2SLinus Walleij #define AB8505_RTC_PCUT_TIME_REG 0x13 248417c0fc2SLinus Walleij #define AB8505_RTC_PCUT_MAX_TIME_REG 0x14 249417c0fc2SLinus Walleij #define AB8505_RTC_PCUT_FLAG_TIME_REG 0x15 250417c0fc2SLinus Walleij #define AB8505_RTC_PCUT_RESTART_REG 0x16 251417c0fc2SLinus Walleij #define AB8505_RTC_PCUT_DEBOUNCE_REG 0x17 252417c0fc2SLinus Walleij 253417c0fc2SLinus Walleij /* USB Power Path constants for ab8540 */ 254417c0fc2SLinus Walleij #define BUS_VSYS_VOL_SELECT_MASK 0x06 255417c0fc2SLinus Walleij #define BUS_VSYS_VOL_SELECT_3P6V 0x00 256417c0fc2SLinus Walleij #define BUS_VSYS_VOL_SELECT_3P325V 0x02 257417c0fc2SLinus Walleij #define BUS_VSYS_VOL_SELECT_3P9V 0x04 258417c0fc2SLinus Walleij #define BUS_VSYS_VOL_SELECT_4P3V 0x06 259417c0fc2SLinus Walleij #define BUS_POWER_PATH_MODE_ENA 0x01 260417c0fc2SLinus Walleij #define BUS_PP_PRECHG_CURRENT_MASK 0x0E 261417c0fc2SLinus Walleij #define BUS_POWER_PATH_PRECHG_ENA 0x01 262417c0fc2SLinus Walleij 263ee0975c3SLinus Walleij /* Forward declaration */ 264484a9cc3SLinus Walleij struct ab8500_fg; 265ee0975c3SLinus Walleij 266ee0975c3SLinus Walleij /** 267484a9cc3SLinus Walleij * struct ab8500_fg_parameters - Fuel gauge algorithm parameters, in seconds 268ee0975c3SLinus Walleij * if not specified 269ee0975c3SLinus Walleij * @recovery_sleep_timer: Time between measurements while recovering 270ee0975c3SLinus Walleij * @recovery_total_time: Total recovery time 271ee0975c3SLinus Walleij * @init_timer: Measurement interval during startup 272ee0975c3SLinus Walleij * @init_discard_time: Time we discard voltage measurement at startup 273ee0975c3SLinus Walleij * @init_total_time: Total init time during startup 274ee0975c3SLinus Walleij * @high_curr_time: Time current has to be high to go to recovery 275ee0975c3SLinus Walleij * @accu_charging: FG accumulation time while charging 2760525f34dSLinus Walleij * @accu_high_curr_ua: FG accumulation time in high current mode 2770525f34dSLinus Walleij * @high_curr_threshold_ua: High current threshold, in uA 2780525f34dSLinus Walleij * @lowbat_threshold_uv: Low battery threshold, in uV 279ee0975c3SLinus Walleij * @battok_falling_th_sel0 Threshold in mV for battOk signal sel0 280ee0975c3SLinus Walleij * Resolution in 50 mV step. 281ee0975c3SLinus Walleij * @battok_raising_th_sel1 Threshold in mV for battOk signal sel1 282ee0975c3SLinus Walleij * Resolution in 50 mV step. 283ee0975c3SLinus Walleij * @user_cap_limit Capacity reported from user must be within this 284ee0975c3SLinus Walleij * limit to be considered as sane, in percentage 285ee0975c3SLinus Walleij * points. 286ee0975c3SLinus Walleij * @maint_thres This is the threshold where we stop reporting 287ee0975c3SLinus Walleij * battery full while in maintenance, in per cent 288ee0975c3SLinus Walleij * @pcut_enable: Enable power cut feature in ab8505 289ee0975c3SLinus Walleij * @pcut_max_time: Max time threshold 290ee0975c3SLinus Walleij * @pcut_flag_time: Flagtime threshold 291ee0975c3SLinus Walleij * @pcut_max_restart: Max number of restarts 292ee0975c3SLinus Walleij * @pcut_debounce_time: Sets battery debounce time 293ee0975c3SLinus Walleij */ 294484a9cc3SLinus Walleij struct ab8500_fg_parameters { 295ee0975c3SLinus Walleij int recovery_sleep_timer; 296ee0975c3SLinus Walleij int recovery_total_time; 297ee0975c3SLinus Walleij int init_timer; 298ee0975c3SLinus Walleij int init_discard_time; 299ee0975c3SLinus Walleij int init_total_time; 300ee0975c3SLinus Walleij int high_curr_time; 301ee0975c3SLinus Walleij int accu_charging; 302ee0975c3SLinus Walleij int accu_high_curr; 3030525f34dSLinus Walleij int high_curr_threshold_ua; 3040525f34dSLinus Walleij int lowbat_threshold_uv; 305ee0975c3SLinus Walleij int battok_falling_th_sel0; 306ee0975c3SLinus Walleij int battok_raising_th_sel1; 307ee0975c3SLinus Walleij int user_cap_limit; 308ee0975c3SLinus Walleij int maint_thres; 309ee0975c3SLinus Walleij bool pcut_enable; 310ee0975c3SLinus Walleij u8 pcut_max_time; 311ee0975c3SLinus Walleij u8 pcut_flag_time; 312ee0975c3SLinus Walleij u8 pcut_max_restart; 313ee0975c3SLinus Walleij u8 pcut_debounce_time; 314ee0975c3SLinus Walleij }; 315ee0975c3SLinus Walleij 316ee0975c3SLinus Walleij /** 317484a9cc3SLinus Walleij * struct ab8500_charger_maximization - struct used by the board config. 318ee0975c3SLinus Walleij * @use_maxi: Enable maximization for this battery type 31983e5aa77SLinus Walleij * @maxi_chg_curr_ua: Maximum charger current allowed in microampere 320ee0975c3SLinus Walleij * @maxi_wait_cycles: cycles to wait before setting charger current 32183e5aa77SLinus Walleij * @charger_curr_step_ua: delta between two charger current settings (uA) 322ee0975c3SLinus Walleij */ 323484a9cc3SLinus Walleij struct ab8500_maxim_parameters { 324ee0975c3SLinus Walleij bool ena_maxi; 32583e5aa77SLinus Walleij int chg_curr_ua; 326ee0975c3SLinus Walleij int wait_cycles; 32783e5aa77SLinus Walleij int charger_curr_step_ua; 328ee0975c3SLinus Walleij }; 329ee0975c3SLinus Walleij 330ee0975c3SLinus Walleij /** 331417c0fc2SLinus Walleij * struct ab8500_bm_capacity_levels - ab8500 capacity level data 332417c0fc2SLinus Walleij * @critical: critical capacity level in percent 333417c0fc2SLinus Walleij * @low: low capacity level in percent 334417c0fc2SLinus Walleij * @normal: normal capacity level in percent 335417c0fc2SLinus Walleij * @high: high capacity level in percent 336417c0fc2SLinus Walleij * @full: full capacity level in percent 337417c0fc2SLinus Walleij */ 338417c0fc2SLinus Walleij struct ab8500_bm_capacity_levels { 339417c0fc2SLinus Walleij int critical; 340417c0fc2SLinus Walleij int low; 341417c0fc2SLinus Walleij int normal; 342417c0fc2SLinus Walleij int high; 343417c0fc2SLinus Walleij int full; 344417c0fc2SLinus Walleij }; 345417c0fc2SLinus Walleij 346417c0fc2SLinus Walleij /** 347417c0fc2SLinus Walleij * struct ab8500_bm_charger_parameters - Charger specific parameters 348bc6e0287SLinus Walleij * @usb_volt_max_uv: maximum allowed USB charger voltage in uV 34983e5aa77SLinus Walleij * @usb_curr_max_ua: maximum allowed USB charger current in uA 350bc6e0287SLinus Walleij * @ac_volt_max_uv: maximum allowed AC charger voltage in uV 35183e5aa77SLinus Walleij * @ac_curr_max_ua: maximum allowed AC charger current in uA 352417c0fc2SLinus Walleij */ 353417c0fc2SLinus Walleij struct ab8500_bm_charger_parameters { 354bc6e0287SLinus Walleij int usb_volt_max_uv; 35583e5aa77SLinus Walleij int usb_curr_max_ua; 356bc6e0287SLinus Walleij int ac_volt_max_uv; 35783e5aa77SLinus Walleij int ac_curr_max_ua; 358417c0fc2SLinus Walleij }; 359417c0fc2SLinus Walleij 360417c0fc2SLinus Walleij /** 361417c0fc2SLinus Walleij * struct ab8500_bm_data - ab8500 battery management data 3626252c706SLinus Walleij * @bi battery info from device tree 363484a9cc3SLinus Walleij * @temp_now present battery temperature 364417c0fc2SLinus Walleij * @temp_interval_chg temperature measurement interval in s when charging 365417c0fc2SLinus Walleij * @temp_interval_nochg temperature measurement interval in s when not charging 366417c0fc2SLinus Walleij * @main_safety_tmr_h safety timer for main charger 367417c0fc2SLinus Walleij * @usb_safety_tmr_h safety timer for usb charger 368417c0fc2SLinus Walleij * @bkup_bat_v voltage which we charge the backup battery with 369417c0fc2SLinus Walleij * @bkup_bat_i current which we charge the backup battery with 370417c0fc2SLinus Walleij * @capacity_scaling indicates whether capacity scaling is to be used 371417c0fc2SLinus Walleij * @chg_unknown_bat flag to enable charging of unknown batteries 372417c0fc2SLinus Walleij * @enable_overshoot flag to enable VBAT overshoot control 373484a9cc3SLinus Walleij * @auto_trig flag to enable auto adc trigger 374417c0fc2SLinus Walleij * @fg_res resistance of FG resistor in 0.1mOhm 375417c0fc2SLinus Walleij * @interval_charging charge alg cycle period time when charging (sec) 376417c0fc2SLinus Walleij * @interval_not_charging charge alg cycle period time when not charging (sec) 377417c0fc2SLinus Walleij * @temp_hysteresis temperature hysteresis 378484a9cc3SLinus Walleij * @maxi maximization parameters 379417c0fc2SLinus Walleij * @cap_levels capacity in percent for the different capacity levels 380417c0fc2SLinus Walleij * @chg_params charger parameters 381417c0fc2SLinus Walleij * @fg_params fuel gauge parameters 382417c0fc2SLinus Walleij */ 383417c0fc2SLinus Walleij struct ab8500_bm_data { 384*25fd3303SLinus Walleij struct power_supply_battery_info *bi; 385484a9cc3SLinus Walleij int temp_now; 386417c0fc2SLinus Walleij int temp_interval_chg; 387417c0fc2SLinus Walleij int temp_interval_nochg; 388417c0fc2SLinus Walleij int main_safety_tmr_h; 389417c0fc2SLinus Walleij int usb_safety_tmr_h; 390417c0fc2SLinus Walleij int bkup_bat_v; 391417c0fc2SLinus Walleij int bkup_bat_i; 392417c0fc2SLinus Walleij bool capacity_scaling; 393417c0fc2SLinus Walleij bool chg_unknown_bat; 394417c0fc2SLinus Walleij bool enable_overshoot; 395484a9cc3SLinus Walleij bool auto_trig; 396417c0fc2SLinus Walleij int fg_res; 397417c0fc2SLinus Walleij int interval_charging; 398417c0fc2SLinus Walleij int interval_not_charging; 399417c0fc2SLinus Walleij int temp_hysteresis; 400417c0fc2SLinus Walleij const struct ab8500_maxim_parameters *maxi; 401417c0fc2SLinus Walleij const struct ab8500_bm_capacity_levels *cap_levels; 402417c0fc2SLinus Walleij const struct ab8500_bm_charger_parameters *chg_params; 403417c0fc2SLinus Walleij const struct ab8500_fg_parameters *fg_params; 404417c0fc2SLinus Walleij }; 405417c0fc2SLinus Walleij 406484a9cc3SLinus Walleij /* Forward declaration */ 407484a9cc3SLinus Walleij struct ab8500_fg; 408484a9cc3SLinus Walleij 409484a9cc3SLinus Walleij extern struct ab8500_bm_data ab8500_bm_data; 410417c0fc2SLinus Walleij 411417c0fc2SLinus Walleij void ab8500_charger_usb_state_changed(u8 bm_usb_state, u16 mA); 412417c0fc2SLinus Walleij struct ab8500_fg *ab8500_fg_get(void); 413417c0fc2SLinus Walleij int ab8500_fg_inst_curr_blocking(struct ab8500_fg *dev); 414417c0fc2SLinus Walleij int ab8500_fg_inst_curr_start(struct ab8500_fg *di); 415417c0fc2SLinus Walleij int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res); 416417c0fc2SLinus Walleij int ab8500_fg_inst_curr_started(struct ab8500_fg *di); 417417c0fc2SLinus Walleij int ab8500_fg_inst_curr_done(struct ab8500_fg *di); 41859f1b854SLinus Walleij int ab8500_bm_of_probe(struct power_supply *psy, 419484a9cc3SLinus Walleij struct ab8500_bm_data *bm); 4206252c706SLinus Walleij void ab8500_bm_of_remove(struct power_supply *psy, 4216252c706SLinus Walleij struct ab8500_bm_data *bm); 422417c0fc2SLinus Walleij 4231c1f13a0SLinus Walleij extern struct platform_driver ab8500_fg_driver; 4241c1f13a0SLinus Walleij extern struct platform_driver ab8500_btemp_driver; 425c5b64a99SLinus Walleij extern struct platform_driver ab8500_chargalg_driver; 4261c1f13a0SLinus Walleij 427417c0fc2SLinus Walleij #endif /* _AB8500_CHARGER_H_ */ 428