From 34e78a2e1debf9df58575f4dc2cf4d17407ec5ce Mon Sep 17 00:00:00 2001 From: "YongBeum.Ha" Date: Fri, 25 Sep 2020 15:02:15 +0900 Subject: Casta : Support Multi-Charger Casta need to support 2 chargers(ISL9238 & BQ25710) BUG=b:168122776 BRANCH=firmware-octopus-11297.B TEST=Build, flash EC and check with each system that have BQ25710 and ISL9238 Signed-off-by: YongBeum.Ha Change-Id: I18758acbd0920132c2958bf9d238b4eac3fb5b73 Signed-off-by: YongBeum.Ha Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2428358 Reviewed-by: Daisuke Nojiri Commit-Queue: Daisuke Nojiri --- baseboard/octopus/baseboard.c | 3 +- baseboard/octopus/baseboard.h | 8 +++ board/casta/board.c | 24 +++++++++ board/casta/board.h | 3 +- common/charger.c | 10 ++++ driver/charger/bd9995x.c | 13 +++++ driver/charger/bd9995x.h | 13 ----- driver/charger/bq24773.c | 16 ++++++ driver/charger/bq24773.h | 16 ------ driver/charger/bq25710.c | 122 ++++++++++++++++++++++++++++++------------ driver/charger/bq25710.h | 14 ++++- driver/charger/isl923x.c | 49 +++++++++++++++++ driver/charger/isl923x.h | 20 ------- driver/charger/rt946x.c | 13 +++++ driver/charger/rt946x.h | 13 ----- 15 files changed, 236 insertions(+), 101 deletions(-) diff --git a/baseboard/octopus/baseboard.c b/baseboard/octopus/baseboard.c index a6f37b3356..bbc6944c1e 100644 --- a/baseboard/octopus/baseboard.c +++ b/baseboard/octopus/baseboard.c @@ -323,7 +323,8 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, * Empirically, the charger seems to draw a little more current that * it is set to, so we reduce our limit by 5%. */ -#ifdef VARIANT_OCTOPUS_CHARGER_ISL9238 +#if defined(VARIANT_OCTOPUS_CHARGER_ISL9238) || \ + defined(CONFIG_CHARGER_BQ25710) || defined(CONFIG_CHARGER_ISL9238) charge_ma = (charge_ma * 95) / 100; #endif charge_set_input_current_limit(MAX(charge_ma, diff --git a/baseboard/octopus/baseboard.h b/baseboard/octopus/baseboard.h index c20af902b3..c3097907cf 100644 --- a/baseboard/octopus/baseboard.h +++ b/baseboard/octopus/baseboard.h @@ -128,6 +128,14 @@ */ #undef CONFIG_EXTPOWER_DEBOUNCE_MS #define CONFIG_EXTPOWER_DEBOUNCE_MS 50 +#elif defined(CONFIG_CHARGER_RUNTIME_CONFIG) + #define CONFIG_CHARGER_ISL9238 + #define CONFIG_CHARGER_BQ25710 + #define CONFIG_CHARGER_SENSE_RESISTOR_AC_ISL9238 20 + #define CONFIG_CHARGER_SENSE_RESISTOR_AC_BQ25710 10 + + #undef CONFIG_EXTPOWER_DEBOUNCE_MS + #define CONFIG_EXTPOWER_DEBOUNCE_MS 200 #else #error Must define a VARIANT_OCTOPUS_CHARGER #endif /* VARIANT_OCTOPUS_CHARGER */ diff --git a/board/casta/board.c b/board/casta/board.c index 71311e5ce2..71ab12891e 100644 --- a/board/casta/board.c +++ b/board/casta/board.c @@ -8,11 +8,14 @@ #include "adc.h" #include "adc_chip.h" #include "battery.h" +#include "cbi_ssfc.h" #include "charge_manager.h" #include "charge_state.h" #include "common.h" #include "cros_board_info.h" #include "driver/charger/bd9995x.h" +#include "driver/charger/bq25710.h" +#include "driver/charger/isl923x.h" #include "driver/ppc/nx20p348x.h" #include "driver/tcpm/anx7447.h" #include "driver/tcpm/ps8xxx.h" @@ -88,6 +91,16 @@ const struct temp_sensor_t temp_sensors[] = { }; BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT); +/* Charger config. Start i2c address at isl9238, update during runtime */ +struct charger_config_t chg_chips[] = { + { + .i2c_port = I2C_PORT_CHARGER, + .i2c_addr_flags = ISL923X_ADDR, + .drv = &isl923x_drv, + }, +}; +const unsigned int chg_cnt = ARRAY_SIZE(chg_chips); + /* * I2C callbacks to ensure bus free time for battery I2C transactions is at * least 5ms. @@ -131,6 +144,17 @@ void i2c_end_xfer_notify(int port, int slave_addr) battery_last_i2c_time = get_time(); } +/* TODO: Casta: remove this routine after rev0 is not supported */ +static void board_init(void) +{ + if(get_cbi_ssfc_charger() != SSFC_CHARGER_BQ25710) + return; + + chg_chips[0].drv = &bq25710_drv; + chg_chips[0].i2c_addr_flags = BQ25710_SMBUS_ADDR1; +} +DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_INIT_I2C + 2); + void board_overcurrent_event(int port, int is_overcurrented) { /* Sanity check the port. */ diff --git a/board/casta/board.h b/board/casta/board.h index edba87081f..64c758de1b 100644 --- a/board/casta/board.h +++ b/board/casta/board.h @@ -10,9 +10,9 @@ /* Select Baseboard features */ #define VARIANT_OCTOPUS_EC_NPCX796FB -#define VARIANT_OCTOPUS_CHARGER_ISL9238 #define VARIANT_OCTOPUS_TCPC_0_PS8751 #define VARIANT_OCTOPUS_NO_SENSORS +#define CONFIG_CHARGER_RUNTIME_CONFIG #include "baseboard.h" #define CONFIG_LED_COMMON @@ -59,6 +59,7 @@ #define CONFIG_MKBP_USE_HOST_EVENT /* Battery W/A */ +#define CONFIG_CHARGER_BQ25710_IDCHG_LIMIT_MA 6144 #define CONFIG_CHARGER_PROFILE_OVERRIDE #define CONFIG_I2C_XFER_BOARD_CALLBACK diff --git a/common/charger.c b/common/charger.c index 29002e44da..b3781ab4d7 100644 --- a/common/charger.c +++ b/common/charger.c @@ -276,7 +276,17 @@ static void charger_chips_init(void) chg_chips[chip].drv->init(chip); } } +#if !defined(CONFIG_CHARGER_RUNTIME_CONFIG) DECLARE_HOOK(HOOK_INIT, charger_chips_init, HOOK_PRIO_INIT_I2C + 1); +#else +/* + * If charager is determined by SSFC, + * first cbi can be read after i2c init.(I2C + 1) + * second charge is selected on board_init(I2C + 2) + * then we can init charger_chips_init(I2C + 3) + */ +DECLARE_HOOK(HOOK_INIT, charger_chips_init, HOOK_PRIO_INIT_I2C + 3); +#endif enum ec_error_list charger_post_init(void) { diff --git a/driver/charger/bd9995x.c b/driver/charger/bd9995x.c index 186310af5d..2a63cbb744 100644 --- a/driver/charger/bd9995x.c +++ b/driver/charger/bd9995x.c @@ -66,6 +66,19 @@ static int select_update; static int select_input_port_update; #endif +/* Charger parameters */ +#define CHARGER_NAME BD9995X_CHARGER_NAME +#define CHARGE_V_MAX 19200 +#define CHARGE_V_MIN 3072 +#define CHARGE_V_STEP 16 +#define CHARGE_I_MAX 16320 +#define CHARGE_I_MIN 128 +#define CHARGE_I_OFF 0 +#define CHARGE_I_STEP 64 +#define INPUT_I_MAX 16352 +#define INPUT_I_MIN 512 +#define INPUT_I_STEP 32 + /* Charger parameters */ static const struct charger_info bd9995x_charger_info = { .name = CHARGER_NAME, diff --git a/driver/charger/bd9995x.h b/driver/charger/bd9995x.h index 8d8e2da5be..aa3f27f02e 100644 --- a/driver/charger/bd9995x.h +++ b/driver/charger/bd9995x.h @@ -36,19 +36,6 @@ enum bd9995x_charge_port { BD9995X_CHARGE_PORT_BOTH, }; -/* Charger parameters */ -#define CHARGER_NAME BD9995X_CHARGER_NAME -#define CHARGE_V_MAX 19200 -#define CHARGE_V_MIN 3072 -#define CHARGE_V_STEP 16 -#define CHARGE_I_MAX 16320 -#define CHARGE_I_MIN 128 -#define CHARGE_I_OFF 0 -#define CHARGE_I_STEP 64 -#define INPUT_I_MAX 16352 -#define INPUT_I_MIN 512 -#define INPUT_I_STEP 32 - /* Min. charge current w/ no battery to prevent collapse */ #define BD9995X_NO_BATTERY_CHARGE_I_MIN 512 diff --git a/driver/charger/bq24773.c b/driver/charger/bq24773.c index caded3c5f8..653321ced9 100644 --- a/driver/charger/bq24773.c +++ b/driver/charger/bq24773.c @@ -28,6 +28,22 @@ #define REG8_TO_CURRENT(REG, RS) ((REG) * DEFAULT_SENSE_RESISTOR / (RS) * R8) #define CURRENT_TO_REG8(CUR, RS) ((CUR) * (RS) / DEFAULT_SENSE_RESISTOR / R8) +/* ChargeCurrent Register - 0x14 (mA) */ +#define CHARGE_I_OFF 0 +#define CHARGE_I_MIN 128 +#define CHARGE_I_MAX 8128 +#define CHARGE_I_STEP 64 + +/* MaxChargeVoltage Register - 0x15 (mV) */ +#define CHARGE_V_MIN 1024 +#define CHARGE_V_MAX 19200 +#define CHARGE_V_STEP 16 + +/* InputCurrent Register - 0x3f (mA) */ +#define INPUT_I_MIN 128 +#define INPUT_I_MAX 8128 +#define INPUT_I_STEP 64 + /* Charger parameters */ static const struct charger_info bq2477x_charger_info = { .name = CHARGER_NAME, diff --git a/driver/charger/bq24773.h b/driver/charger/bq24773.h index 40e44827da..24e9a0ed9d 100644 --- a/driver/charger/bq24773.h +++ b/driver/charger/bq24773.h @@ -54,22 +54,6 @@ /* Prochot Option bits */ #define PROCHOT_OPTION1_SELECTOR_MASK 0x7f /* [6:0] PROCHOT SELECTOR */ -/* ChargeCurrent Register - 0x14 (mA) */ -#define CHARGE_I_OFF 0 -#define CHARGE_I_MIN 128 -#define CHARGE_I_MAX 8128 -#define CHARGE_I_STEP 64 - -/* MaxChargeVoltage Register - 0x15 (mV) */ -#define CHARGE_V_MIN 1024 -#define CHARGE_V_MAX 19200 -#define CHARGE_V_STEP 16 - -/* InputCurrent Register - 0x3f (mA) */ -#define INPUT_I_MIN 128 -#define INPUT_I_MAX 8128 -#define INPUT_I_STEP 64 - #ifdef CONFIG_CHARGER_BQ24770 #define CHARGER_NAME "bq24770" #undef I2C_ADDR_CHARGER diff --git a/driver/charger/bq25710.c b/driver/charger/bq25710.c index 62447afdc3..ce80bb4d5b 100644 --- a/driver/charger/bq25710.c +++ b/driver/charger/bq25710.c @@ -5,17 +5,33 @@ * TI bq25710 battery charger driver. */ +#include "battery.h" #include "battery_smart.h" #include "bq25710.h" #include "charge_ramp.h" +#include "charge_state_v2.h" #include "charger.h" #include "common.h" #include "console.h" #include "hooks.h" #include "i2c.h" +#include "task.h" +#include "system.h" #include "timer.h" #include "util.h" +#ifndef CONFIG_CHARGER_NARROW_VDC +#error "BQ25710 is a NVDC charger, please enable CONFIG_CHARGER_NARROW_VDC." +#endif + +/* + * Delay required from taking the bq25710 out of low power mode and having the + * correct value in register 0x3E for VSYS_MIN voltage. The length of the delay + * was determined by experiment. Less than 12 msec was not enough of delay, so + * the value here is set to 20 msec to have plenty of margin. + */ +#define BQ25710_VDDA_STARTUP_DELAY_MSEC 20 + /* Sense resistor configurations and macros */ #define DEFAULT_SENSE_RESISTOR 10 @@ -32,6 +48,16 @@ /* Console output macros */ #define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args) +#ifdef CONFIG_CHARGER_BQ25710_IDCHG_LIMIT_MA +/* + * If this config option is defined, then the bq25710 needs to remain in + * performance mode when the AP is in S0. Performance mode is active whenever AC + * power is connected or when the EN_LWPWR bit in ChargeOption0 is clear. + */ +static uint32_t bq25710_perf_mode_req; +static struct mutex bq25710_perf_mode_mutex; +#endif + /* Charger parameters */ static const struct charger_info bq25710_charger_info = { .name = "bq25710", @@ -65,6 +91,7 @@ static inline enum ec_error_list raw_write16(int chgnum, int offset, int value) #if defined(CONFIG_CHARGE_RAMP_HW) || \ defined(CONFIG_USB_PD_VBUS_MEASURE_CHARGER) +#ifdef CONFIG_USB_PD_VBUS_MEASURE_CHARGER static int bq25710_get_low_power_mode(int chgnum, int *mode) { int rv; @@ -78,6 +105,7 @@ static int bq25710_get_low_power_mode(int chgnum, int *mode) return EC_SUCCESS; } +#endif //CONFIG_USB_PD_VBUS_MEASURE_CHARGER static int bq25710_set_low_power_mode(int chgnum, int enable) { @@ -88,6 +116,21 @@ static int bq25710_set_low_power_mode(int chgnum, int enable) if (rv) return rv; +#ifdef CONFIG_CHARGER_BQ25710_IDCHG_LIMIT_MA + mutex_lock(&bq25710_perf_mode_mutex); + /* + * Performance mode means not in low power mode. The bit that controls + * this is EN_LWPWR in ChargeOption0. The 'enable' param in this + * function is refeerring to low power mode, so enabling low power mode + * means disabling performance mode and vice versa. + */ + if (enable) + bq25710_perf_mode_req &= ~(1 << task_get_current()); + else + bq25710_perf_mode_req |= (1 << task_get_current()); + enable = !bq25710_perf_mode_req; +#endif + if (enable) reg |= BQ25710_CHARGE_OPTION_0_LOW_POWER_MODE; else @@ -103,6 +146,7 @@ static int bq25710_set_low_power_mode(int chgnum, int enable) return EC_SUCCESS; } +#ifdef CONFIG_USB_PD_VBUS_MEASURE_CHARGER static int bq25710_adc_start(int chgnum, int adc_en_mask) { int reg; @@ -146,6 +190,7 @@ static int bq25710_adc_start(int chgnum, int adc_en_mask) return EC_SUCCESS; } +#endif //CONFIG_USB_PD_VBUS_MEASURE_CHARGER #endif static void bq25710_init(int chgnum) @@ -161,22 +206,26 @@ static void bq25710_init(int chgnum) * MIN_SYSTEM_VOLTAGE register prior to setting the reset so that the * correct value is preserved. In order to have the correct value read, * the bq25710 must not be in low power mode, otherwise the VDDA rail - * may not be powered if AC is not connected. + * may not be powered if AC is not connected. Note, this reset is only + * required when running out of RO and not following sysjump to RW. */ - rv = bq25710_set_low_power_mode(chgnum, 0); - /* Allow enough time for VDDA to be powered */ - msleep(BQ25710_VDDA_STARTUP_DELAY_MSEC); - rv |= raw_read16(chgnum, BQ25710_REG_MIN_SYSTEM_VOLTAGE, &vsys); - rv |= raw_read16(chgnum, BQ25710_REG_CHARGE_OPTION_3, ®); - if (!rv) { - reg |= BQ25710_CHARGE_OPTION_3_RESET_REG; - /* Set all registers to default values */ - raw_write16(chgnum, BQ25710_REG_CHARGE_OPTION_3, reg); - /* Restore VSYS_MIN voltage to POR reset value */ - raw_write16(chgnum, BQ25710_REG_MIN_SYSTEM_VOLTAGE, vsys); + if (!system_is_in_rw()) { + rv = bq25710_set_low_power_mode(chgnum, 0); + /* Allow enough time for VDDA to be powered */ + msleep(BQ25710_VDDA_STARTUP_DELAY_MSEC); + rv |= raw_read16(chgnum, BQ25710_REG_MIN_SYSTEM_VOLTAGE, &vsys); + rv |= raw_read16(chgnum, BQ25710_REG_CHARGE_OPTION_3, ®); + if (!rv) { + reg |= BQ25710_CHARGE_OPTION_3_RESET_REG; + /* Set all registers to default values */ + raw_write16(chgnum, BQ25710_REG_CHARGE_OPTION_3, reg); + /* Restore VSYS_MIN voltage to POR reset value */ + raw_write16(chgnum, BQ25710_REG_MIN_SYSTEM_VOLTAGE, + vsys); + } + /* Reenable low power mode */ + bq25710_set_low_power_mode(chgnum, 1); } - /* Reenable low power mode */ - bq25710_set_low_power_mode(chgnum, 1); if (!raw_read16(chgnum, BQ25710_REG_PROCHOT_OPTION_1, ®)) { /* Disable VDPM prochot profile at initialization */ @@ -401,12 +450,18 @@ static int bq25710_get_vbus_voltage(int chgnum, int port) * LSB => 64mV. * Return 0 when VBUS <= 3.2V as ADC can't measure it. */ - return reg ? + *voltage = reg ? (reg * BQ25710_ADC_VBUS_STEP_MV + BQ25710_ADC_VBUS_BASE_MV) : 0; error: - CPRINTF("Could not read VBUS ADC! Error: %d\n", rv); - return 0; + if (rv) + CPRINTF("Could not read VBUS ADC! Error: %d\n", rv); + return rv; +} +#else +static int bq25710_get_vbus_voltage(int chgnum, int port) +{ + return EC_ERROR_UNIMPLEMENTED; } #endif @@ -430,13 +485,20 @@ static void bq25710_chg_ramp_handle(void) /* * Once the charge ramp is stable write back the stable ramp - * current to input current register. + * current to the host input current limit register */ + ramp_curr = chg_ramp_get_current_limit(); if (chg_ramp_is_stable()) { - ramp_curr = chg_ramp_get_current_limit(); if (ramp_curr && !charger_set_input_current(ramp_curr)) - CPRINTF("stable ramp current=%d\n", ramp_curr); + CPRINTF("bq25710: stable ramp current=%d\n", ramp_curr); + } else { + CPRINTF("bq25710: ICO stall, ramp current=%d\n", ramp_curr); } + /* + * Disable ICO mode. When ICO mode is active the input current limit is + * given by the value in register IIN_DPM (0x22) + */ + charger_set_hw_ramp(0); } DECLARE_DEFERRED(bq25710_chg_ramp_handle); @@ -495,9 +557,7 @@ static int bq25710_ramp_is_stable(int chgnum) static int bq25710_ramp_get_current_limit(int chgnum) { - int reg; - int mode; - int tries_left = 8; + int reg, rv; rv = raw_read16(chgnum, BQ25710_REG_IIN_DPM, ®); if (rv) { @@ -506,9 +566,10 @@ static int bq25710_ramp_get_current_limit(int chgnum) return 0; } - /* Exit low power mode so ADC conversion takes typical time */ - if (bq25710_set_low_power_mode(0)) - goto error; + return ((reg >> BQ25710_IIN_DPM_BIT_SHIFT) * BQ25710_IIN_DPM_STEP_MA + + BQ25710_IIN_DPM_STEP_MA); +} +#endif /* CONFIG_CHARGE_RAMP_HW */ #ifdef CONFIG_CHARGER_BQ25710_IDCHG_LIMIT_MA /* Called on AP S5 -> S3 and S3/S0iX -> S0 transition */ @@ -519,15 +580,6 @@ static void bq25710_chipset_startup(void) DECLARE_HOOK(HOOK_CHIPSET_STARTUP, bq25710_chipset_startup, HOOK_PRIO_DEFAULT); DECLARE_HOOK(HOOK_CHIPSET_RESUME, bq25710_chipset_startup, HOOK_PRIO_DEFAULT); - /* - * Wait until the ADC operation completes. The spec says typical - * conversion time is 10 msec. If low power mode isn't exited first, - * then the conversion time jumps to ~60 msec. - */ - do { - msleep(2); - raw_read16(BQ25710_REG_ADC_OPTION, ®); - } while (--tries_left && (reg & BQ25710_ADC_OPTION_ADC_START)); /* Called on AP S0 -> S0iX/S3 or S3 -> S5 transition */ static void bq25710_chipset_suspend(void) diff --git a/driver/charger/bq25710.h b/driver/charger/bq25710.h index 41c7de5798..5d8b4a92fe 100644 --- a/driver/charger/bq25710.h +++ b/driver/charger/bq25710.h @@ -8,6 +8,12 @@ #ifndef __CROS_EC_BQ25710_H #define __CROS_EC_BQ25710_H +#ifdef CONFIG_CHARGER_SENSE_RESISTOR_AC_BQ25710 + #undef CONFIG_CHARGER_SENSE_RESISTOR_AC + #define CONFIG_CHARGER_SENSE_RESISTOR_AC \ + CONFIG_CHARGER_SENSE_RESISTOR_AC_BQ25710 +#endif + /* SMBUS Interface */ #define BQ25710_SMBUS_ADDR1 0x12 @@ -44,10 +50,14 @@ #define BQ25710_CHARGE_OPTION_0_CHRG_INHIBIT (1 << 0) /* ChargeOption2 Register */ -#define BQ25710_CHARGE_OPTION_2_EN_EXTILIM (1 << 7) +#define BQ25710_CHARGE_OPTION_2_EN_EXTILIM BIT(7) +#define BQ25710_CHARGE_OPTION_2_TMAX_SHIFT 8 +#define BQ25710_CHARGE_OPTION_2_TMAX_MASK (0x3 << \ + BQ25710_CHARGE_OPTION_2_TMAX_SHIFT) /* ChargeOption3 Register */ -#define BQ25710_CHARGE_OPTION_3_EN_ICO_MODE (1 << 11) +#define BQ25710_CHARGE_OPTION_3_RESET_REG BIT(14) +#define BQ25710_CHARGE_OPTION_3_EN_ICO_MODE BIT(11) /* ChargeStatus Register */ #define BQ25710_CHARGE_STATUS_ICO_DONE (1 << 14) diff --git a/driver/charger/isl923x.c b/driver/charger/isl923x.c index ec44793d37..d218e7f9ff 100644 --- a/driver/charger/isl923x.c +++ b/driver/charger/isl923x.c @@ -23,6 +23,17 @@ #error "ISL9237/8 is a NVDC charger, please enable CONFIG_CHARGER_NARROW_VDC." #endif +#if defined(CONFIG_CHARGER_ISL9238) || defined(CONFIG_CHARGER_ISL9238C) +#define CHARGER_ISL9238X +#endif + +#ifdef CONFIG_CHARGER_SENSE_RESISTOR_AC_ISL9238 + #undef CONFIG_CHARGER_SENSE_RESISTOR_AC + #define CONFIG_CHARGER_SENSE_RESISTOR_AC \ + CONFIG_CHARGER_SENSE_RESISTOR_AC_ISL9238 +#endif + + #define DEFAULT_R_AC 20 #define DEFAULT_R_SNS 10 #define R_AC CONFIG_CHARGER_SENSE_RESISTOR_AC @@ -32,6 +43,44 @@ #define AC_REG_TO_CURRENT(REG) ((REG) * DEFAULT_R_AC / R_AC) #define AC_CURRENT_TO_REG(CUR) ((CUR) * R_AC / DEFAULT_R_AC) +#if defined(CONFIG_CHARGER_ISL9237) +#define CHARGER_NAME "isl9237" +#define CHARGE_V_MAX ISL9237_SYS_VOLTAGE_REG_MAX +#define CHARGE_V_MIN ISL923X_SYS_VOLTAGE_REG_MIN +#define CHARGE_V_STEP 8 +#elif defined(CONFIG_CHARGER_ISL9238) +#define CHARGER_NAME "isl9238" +#define CHARGE_V_MAX ISL9238_SYS_VOLTAGE_REG_MAX +#define CHARGE_V_MIN ISL923X_SYS_VOLTAGE_REG_MIN +#define CHARGE_V_STEP 8 +#elif defined(CONFIG_CHARGER_ISL9238C) +#define CHARGER_NAME "isl9238c" +#define CHARGE_V_MAX ISL9238_SYS_VOLTAGE_REG_MAX +#define CHARGE_V_MIN ISL923X_SYS_VOLTAGE_REG_MIN +#define CHARGE_V_STEP 8 +#elif defined(CONFIG_CHARGER_RAA489000) +#define CHARGER_NAME "raa489000" +#define CHARGE_V_MAX RAA489000_SYS_VOLTAGE_REG_MAX +#define CHARGE_V_MIN RAA489000_SYS_VOLTAGE_REG_MIN +#define CHARGE_V_STEP 64 +#endif + +#ifdef CONFIG_CHARGER_RAA489000 +#define CHARGE_I_MAX RAA489000_CURRENT_REG_MAX +#else +#define CHARGE_I_MAX ISL923X_CURRENT_REG_MAX +#endif /* CONFIG_CHARGER_RAA489000 */ +#define CHARGE_I_MIN 4 +#define CHARGE_I_OFF 0 +#define CHARGE_I_STEP 4 +#ifdef CONFIG_CHARGER_RAA489000 +#define INPUT_I_MAX RAA489000_CURRENT_REG_MAX +#else +#define INPUT_I_MAX ISL923X_CURRENT_REG_MAX +#endif /* CONFIG_CHARGER_RAA489000 */ +#define INPUT_I_MIN 4 +#define INPUT_I_STEP 4 + /* Console output macros */ #define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args) diff --git a/driver/charger/isl923x.h b/driver/charger/isl923x.h index fb76f55432..586e92aa7b 100644 --- a/driver/charger/isl923x.h +++ b/driver/charger/isl923x.h @@ -282,26 +282,6 @@ enum isl9237_fsm_state { #define ISL923X_INFO_DCHOT (1 << 11) #define ISL9237_INFO_ACHOT (1 << 12) -#if defined(CONFIG_CHARGER_ISL9237) -#define CHARGER_NAME "isl9237" -#define CHARGE_V_MAX ISL9237_SYS_VOLTAGE_REG_MAX -#define CHARGE_V_MIN ISL923X_SYS_VOLTAGE_REG_MIN -#define CHARGE_V_STEP 8 -#elif defined(CONFIG_CHARGER_ISL9238) -#define CHARGER_NAME "isl9238" -#define CHARGE_V_MAX ISL9238_SYS_VOLTAGE_REG_MAX -#define CHARGE_V_MIN ISL923X_SYS_VOLTAGE_REG_MIN -#define CHARGE_V_STEP 8 -#endif - -#define CHARGE_I_MAX ISL923X_CURRENT_REG_MAX -#define CHARGE_I_MIN 4 -#define CHARGE_I_OFF 0 -#define CHARGE_I_STEP 4 -#define INPUT_I_MAX ISL923X_CURRENT_REG_MAX -#define INPUT_I_MIN 4 -#define INPUT_I_STEP 4 - #undef I2C_ADDR_CHARGER #define I2C_ADDR_CHARGER ISL923X_ADDR diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c index 6a30f6b6ef..4a9a37a239 100644 --- a/driver/charger/rt946x.c +++ b/driver/charger/rt946x.c @@ -25,6 +25,19 @@ /* Console output macros */ #define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args) +/* Charger parameters */ +#define CHARGER_NAME RT946X_CHARGER_NAME +#define CHARGE_V_MAX 4710 +#define CHARGE_V_MIN 3900 +#define CHARGE_V_STEP 10 +#define CHARGE_I_MAX 5000 +#define CHARGE_I_MIN 100 +#define CHARGE_I_OFF 0 +#define CHARGE_I_STEP 100 +#define INPUT_I_MAX 3250 +#define INPUT_I_MIN 100 +#define INPUT_I_STEP 50 + /* Charger parameters */ static const struct charger_info rt946x_charger_info = { .name = CHARGER_NAME, diff --git a/driver/charger/rt946x.h b/driver/charger/rt946x.h index 9d9cf4d8bd..c9b3540a0c 100644 --- a/driver/charger/rt946x.h +++ b/driver/charger/rt946x.h @@ -8,19 +8,6 @@ #ifndef __CROS_EC_RT946X_H #define __CROS_EC_RT946X_H -/* Charger parameters */ -#define CHARGER_NAME RT946X_CHARGER_NAME -#define CHARGE_V_MAX 4710 -#define CHARGE_V_MIN 3900 -#define CHARGE_V_STEP 10 -#define CHARGE_I_MAX 5000 -#define CHARGE_I_MIN 100 -#define CHARGE_I_OFF 0 -#define CHARGE_I_STEP 100 -#define INPUT_I_MAX 3250 -#define INPUT_I_MIN 100 -#define INPUT_I_STEP 50 - /* Registers for rt9466, rt9467 */ #if defined(CONFIG_CHARGER_RT9466) || defined(CONFIG_CHARGER_RT9467) #define RT946X_REG_CORECTRL0 0x00 -- cgit v1.2.1