diff options
Diffstat (limited to 'driver/charger/isl9241.h')
-rw-r--r-- | driver/charger/isl9241.h | 158 |
1 files changed, 83 insertions, 75 deletions
diff --git a/driver/charger/isl9241.h b/driver/charger/isl9241.h index f6f7844ef5..e1b4d18b14 100644 --- a/driver/charger/isl9241.h +++ b/driver/charger/isl9241.h @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -10,21 +10,21 @@ #include "driver/charger/isl9241_public.h" -#define CHARGER_NAME "ISL9241" -#define CHARGE_V_MAX 18304 -#define CHARGE_V_MIN 64 -#define CHARGE_V_STEP 8 +#define CHARGER_NAME "ISL9241" +#define CHARGE_V_MAX 18304 +#define CHARGE_V_MIN 64 +#define CHARGE_V_STEP 8 /* * When the default sense resistor value is used, register values * represent mA. For other sense resistors values, register * values must be scaled accordingly to convert to mA. */ -#define CHARGE_I_MAX 6140 -#define CHARGE_I_MIN 4 -#define CHARGE_I_STEP 4 -#define INPUT_I_MAX 6140 -#define INPUT_I_MIN 4 -#define INPUT_I_STEP 4 +#define CHARGE_I_MAX 6140 +#define CHARGE_I_MIN 4 +#define CHARGE_I_STEP 4 +#define INPUT_I_MAX 6140 +#define INPUT_I_MIN 4 +#define INPUT_I_STEP 4 /* Registers */ @@ -32,30 +32,30 @@ * ChargeCurrentLimit [12:2] 11-bit (0x0000h = disables fast charging, * trickle charging is allowed) */ -#define ISL9241_REG_CHG_CURRENT_LIMIT 0x14 +#define ISL9241_REG_CHG_CURRENT_LIMIT 0x14 /* MaxSystemVoltage [14:3] 12-bit, (0x0000h = disables switching) */ -#define ISL9241_REG_MAX_SYSTEM_VOLTAGE 0x15 +#define ISL9241_REG_MAX_SYSTEM_VOLTAGE 0x15 -#define ISL9241_REG_CONTROL7 0x38 +#define ISL9241_REG_CONTROL7 0x38 /* Configures various charger options */ -#define ISL9241_REG_CONTROL0 0x39 +#define ISL9241_REG_CONTROL0 0x39 /* 2: Input Voltage Regulation (0 = Enable (default), 1 = Disable) */ -#define ISL9241_CONTROL0_INPUT_VTG_REGULATION BIT(2) -#define ISL9241_CONTROL0_EN_VIN_VOUT_COMP BIT(5) -#define ISL9241_CONTROL0_EN_CHARGE_PUMPS BIT(6) -#define ISL9241_CONTROL0_EN_BYPASS_GATE BIT(11) -#define ISL9241_CONTROL0_NGATE_OFF BIT(12) +#define ISL9241_CONTROL0_INPUT_VTG_REGULATION BIT(2) +#define ISL9241_CONTROL0_EN_VIN_VOUT_COMP BIT(5) +#define ISL9241_CONTROL0_EN_CHARGE_PUMPS BIT(6) +#define ISL9241_CONTROL0_EN_BYPASS_GATE BIT(11) +#define ISL9241_CONTROL0_NGATE_OFF BIT(12) -#define ISL9241_REG_INFORMATION1 0x3A -#define ISL9241_REG_ADAPTER_CUR_LIMIT2 0x3B +#define ISL9241_REG_INFORMATION1 0x3A +#define ISL9241_REG_ADAPTER_CUR_LIMIT2 0x3B /* Configures various charger options */ -#define ISL9241_REG_CONTROL1 0x3C -#define ISL9241_CONTROL1_PSYS BIT(3) -#define ISL9241_CONTROL1_BGATE_OFF BIT(6) -#define ISL9241_CONTROL1_LEARN_MODE BIT(12) +#define ISL9241_REG_CONTROL1 0x3C +#define ISL9241_CONTROL1_PSYS BIT(3) +#define ISL9241_CONTROL1_BGATE_OFF BIT(6) +#define ISL9241_CONTROL1_LEARN_MODE BIT(12) /* * 9:7 - Switching Frequency */ @@ -63,14 +63,14 @@ #define ISL9241_CONTROL1_SWITCHING_FREQ_1420KHZ 0 #define ISL9241_CONTROL1_SWITCHING_FREQ_1180KHZ 1 #define ISL9241_CONTROL1_SWITCHING_FREQ_1020KHZ 2 -#define ISL9241_CONTROL1_SWITCHING_FREQ_890KHZ 3 -#define ISL9241_CONTROL1_SWITCHING_FREQ_808KHZ 4 -#define ISL9241_CONTROL1_SWITCHING_FREQ_724KHZ 5 -#define ISL9241_CONTROL1_SWITCHING_FREQ_656KHZ 6 -#define ISL9241_CONTROL1_SWITCHING_FREQ_600KHZ 7 +#define ISL9241_CONTROL1_SWITCHING_FREQ_890KHZ 3 +#define ISL9241_CONTROL1_SWITCHING_FREQ_808KHZ 4 +#define ISL9241_CONTROL1_SWITCHING_FREQ_724KHZ 5 +#define ISL9241_CONTROL1_SWITCHING_FREQ_656KHZ 6 +#define ISL9241_CONTROL1_SWITCHING_FREQ_600KHZ 7 /* Configures various charger options */ -#define ISL9241_REG_CONTROL2 0x3D +#define ISL9241_REG_CONTROL2 0x3D /* * 15:13 - Trickle Charging Current * <000> 32mA (do not use) @@ -82,79 +82,87 @@ * <110> 224mA * <111> 256mA */ -#define ISL9241_CONTROL2_TRICKLE_CHG_CURR(curr) ((((curr) >> 5) - 1) << 13) +#define ISL9241_CONTROL2_TRICKLE_CHG_CURR(curr) ((((curr) >> 5) - 1) << 13) /* 12 - Two-Level Adapter Current Limit */ -#define ISL9241_CONTROL2_TWO_LEVEL_ADP_CURR BIT(12) +#define ISL9241_CONTROL2_TWO_LEVEL_ADP_CURR BIT(12) /* 10:9 PROCHOT# debounce time in uS */ -#define ISL9241_CONTROL2_PROCHOT_DEBOUNCE_MASK GENMASK(10, 9) -#define ISL9241_CONTROL2_PROCHOT_DEBOUNCE_500 (2 << 9) -#define ISL9241_CONTROL2_PROCHOT_DEBOUNCE_1000 (3 << 9) +#define ISL9241_CONTROL2_PROCHOT_DEBOUNCE_MASK GENMASK(10, 9) +#define ISL9241_CONTROL2_PROCHOT_DEBOUNCE_500 (2 << 9) +#define ISL9241_CONTROL2_PROCHOT_DEBOUNCE_1000 (3 << 9) /* MinSystemVoltage [13:6] 8-bit (0x0000h = disables all battery charging) */ -#define ISL9241_REG_MIN_SYSTEM_VOLTAGE 0x3E +#define ISL9241_REG_MIN_SYSTEM_VOLTAGE 0x3E -#define ISL9241_REG_ADAPTER_CUR_LIMIT1 0x3F -#define ISL9241_REG_ACOK_REFERENCE 0x40 -#define ISL9241_REG_CONTROL6 0x43 -#define ISL9241_REG_AC_PROCHOT 0x47 -#define ISL9241_REG_DC_PROCHOT 0x48 -#define ISL9241_REG_OTG_VOLTAGE 0x49 -#define ISL9241_REG_OTG_CURRENT 0x4A +#define ISL9241_REG_ADAPTER_CUR_LIMIT1 0x3F +#define ISL9241_REG_ACOK_REFERENCE 0x40 +#define ISL9241_REG_CONTROL6 0x43 +#define ISL9241_REG_AC_PROCHOT 0x47 +#define ISL9241_REG_DC_PROCHOT 0x48 +#define ISL9241_REG_OTG_VOLTAGE 0x49 +#define ISL9241_REG_OTG_CURRENT 0x4A -#define ISL9241_MV_TO_ACOK_REFERENCE(mv) (((mv) / 96) << 6) +#define ISL9241_MV_TO_ACOK_REFERENCE(mv) (((mv) / 96) << 6) /* VIN Voltage (ADP Min Voltage) (default 4.096V) */ -#define ISL9241_REG_VIN_VOLTAGE 0x4B +#define ISL9241_REG_VIN_VOLTAGE 0x4B /* Configures various charger options */ -#define ISL9241_REG_CONTROL3 0x4C +#define ISL9241_REG_CONTROL3 0x4C /* 14: ACLIM Reload (0 - reload, 1 - Do not reload */ -#define ISL9241_CONTROL3_ACLIM_RELOAD BIT(14) +#define ISL9241_CONTROL3_ACLIM_RELOAD BIT(14) /* 5: Input Current Limit Loop (0 - Enable, 1 - Disable */ -#define ISL9241_CONTROL3_INPUT_CURRENT_LIMIT BIT(5) +#define ISL9241_CONTROL3_INPUT_CURRENT_LIMIT BIT(5) /* 2: Digital Reset (0 - Idle, 1 - Reset */ -#define ISL9241_CONTROL3_DIGITAL_RESET BIT(2) +#define ISL9241_CONTROL3_DIGITAL_RESET BIT(2) /* 0: Enable ADC (0 - Active when charging, 1 - Active always) */ -#define ISL9241_CONTROL3_ENABLE_ADC BIT(0) +#define ISL9241_CONTROL3_ENABLE_ADC BIT(0) /* Indicates various charger status */ -#define ISL9241_REG_INFORMATION2 0x4D +#define ISL9241_REG_INFORMATION2 0x4D /* 12: BATGONE pin status (0 = Battery is present, 1 = No battery) */ -#define ISL9241_INFORMATION2_BATGONE_PIN BIT(12) +#define ISL9241_INFORMATION2_BATGONE_PIN BIT(12) /* 14: ACOK pin status (0 = No adapter, 1 = Adapter is present) */ -#define ISL9241_INFORMATION2_ACOK_PIN BIT(14) +#define ISL9241_INFORMATION2_ACOK_PIN BIT(14) -#define ISL9241_REG_CONTROL4 0x4E -#define ISL9241_CONTROL4_FORCE_BUCK_MODE BIT(10) +#define ISL9241_REG_CONTROL4 0x4E +#define ISL9241_CONTROL4_FORCE_BUCK_MODE BIT(10) /* 11: Rsense (Rs1:Rs2) ratio for PSYS (0 - 2:1, 1 - 1:1) */ -#define ISL9241_CONTROL4_PSYS_RSENSE_RATIO BIT(11) +#define ISL9241_CONTROL4_PSYS_RSENSE_RATIO BIT(11) /* 13: Enable VSYS slew rate control (0 - disable, 1 - enable) */ -#define ISL9241_CONTROL4_SLEW_RATE_CTRL BIT(13) +#define ISL9241_CONTROL4_SLEW_RATE_CTRL BIT(13) -#define ISL9241_REG_CONTROL5 0x4F -#define ISL9241_REG_NTC_ADC_RESULTS 0x80 -#define ISL9241_REG_VBAT_ADC_RESULTS 0x81 -#define ISL9241_REG_TJ_ADC_RESULTS 0x82 +#define ISL9241_REG_CONTROL5 0x4F +#define ISL9241_REG_NTC_ADC_RESULTS 0x80 +#define ISL9241_REG_VBAT_ADC_RESULTS 0x81 +#define ISL9241_REG_TJ_ADC_RESULTS 0x82 /* ADC result for adapter current measurements, LSB = 22.2mA */ -#define ISL9241_REG_IADP_ADC_RESULTS 0x83 +#define ISL9241_REG_IADP_ADC_RESULTS 0x83 -#define ISL9241_REG_DC_ADC_RESULTS 0x84 -#define ISL9241_REG_CC_ADC_RESULTS 0x85 -#define ISL9241_REG_VSYS_ADC_RESULTS 0x86 -#define ISL9241_REG_VIN_ADC_RESULTS 0x87 -#define ISL9241_REG_INFORMATION3 0x90 -#define ISL9241_REG_INFORMATION4 0x91 -#define ISL9241_REG_MANUFACTURER_ID 0xFE -#define ISL9241_REG_DEVICE_ID 0xFF +#define ISL9241_REG_DC_ADC_RESULTS 0x84 +#define ISL9241_REG_CC_ADC_RESULTS 0x85 +#define ISL9241_REG_VSYS_ADC_RESULTS 0x86 +#define ISL9241_REG_VIN_ADC_RESULTS 0x87 +#define ISL9241_REG_INFORMATION3 0x90 +#define ISL9241_REG_INFORMATION4 0x91 +#define ISL9241_REG_MANUFACTURER_ID 0xFE +#define ISL9241_REG_DEVICE_ID 0xFF -#define ISL9241_VIN_ADC_BIT_OFFSET 6 -#define ISL9241_VIN_ADC_STEP_MV 96 +#define ISL9241_VIN_ADC_BIT_OFFSET 6 +#define ISL9241_VIN_ADC_STEP_MV 96 + +#define ISL9241_ADC_POLLING_TIME_US 400 /* * Used to reset ACOKref register to normal value to detect low voltage (5V or * 9V) adapter during next plug in event */ -#define ISL9241_ACOK_REF_LOW_VOLTAGE_ADAPTER_MV 3600 +#define ISL9241_ACOK_REF_LOW_VOLTAGE_ADAPTER_MV 3600 + +/* + * Max wait time for Vsys to be close to Vin (Vadp) before turning on the bypass + * gate. See 2.5.1 of application notes for details. + */ +#define ISL9241_BYPASS_VSYS_TIMEOUT_MS 500 #endif /* __CROS_EC_ISL9241_H */ |