diff options
-rw-r--r-- | baseboard/octopus/baseboard.c | 2 | ||||
-rw-r--r-- | baseboard/octopus/baseboard.h | 8 | ||||
-rw-r--r-- | board/casta/board.c | 25 | ||||
-rw-r--r-- | board/casta/board.h | 3 | ||||
-rw-r--r-- | driver/charger/bd9995x.c | 13 | ||||
-rw-r--r-- | driver/charger/bd9995x.h | 13 | ||||
-rw-r--r-- | driver/charger/bq24773.c | 16 | ||||
-rw-r--r-- | driver/charger/bq24773.h | 16 | ||||
-rw-r--r-- | driver/charger/bq25710.c | 7 | ||||
-rw-r--r-- | driver/charger/isl923x.c | 45 | ||||
-rw-r--r-- | driver/charger/isl923x.h | 38 | ||||
-rw-r--r-- | driver/charger/rt946x.c | 13 | ||||
-rw-r--r-- | driver/charger/rt946x.h | 13 |
13 files changed, 129 insertions, 83 deletions
diff --git a/baseboard/octopus/baseboard.c b/baseboard/octopus/baseboard.c index 105a3bf71c..a096825c0c 100644 --- a/baseboard/octopus/baseboard.c +++ b/baseboard/octopus/baseboard.c @@ -306,7 +306,7 @@ 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(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 264e62c38e..a20b7bc8de 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 700a99d284..bdedbdd1a3 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" @@ -87,6 +90,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_FLAGS, + .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. @@ -141,7 +154,17 @@ static void cbi_init(void) sku_id = val; CPRINTS("SKU: %d", sku_id); } -DECLARE_HOOK(HOOK_INIT, cbi_init, HOOK_PRIO_INIT_I2C + 1); +DECLARE_HOOK(HOOK_INIT, cbi_init, HOOK_PRIO_INIT_I2C); + +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_FLAGS; +} +DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_INIT_I2C); void board_overcurrent_event(int port, int is_overcurrented) { diff --git a/board/casta/board.h b/board/casta/board.h index 7f934dc4c6..fa2c8fb535 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 @@ -57,6 +57,7 @@ #define CONFIG_STEINHART_HART_3V3_51K1_47K_4050B /* 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/driver/charger/bd9995x.c b/driver/charger/bd9995x.c index 2531d4225d..950657f457 100644 --- a/driver/charger/bd9995x.c +++ b/driver/charger/bd9995x.c @@ -67,6 +67,19 @@ 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, .voltage_max = CHARGE_V_MAX, diff --git a/driver/charger/bd9995x.h b/driver/charger/bd9995x.h index 5d346eb969..a1f1bdb64f 100644 --- a/driver/charger/bd9995x.h +++ b/driver/charger/bd9995x.h @@ -34,19 +34,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 87ef187357..bfaac4873a 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 c22bfa528a..46f8939036 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" #define I2C_ADDR_CHARGER_FLAGS BQ24770_ADDR_FLAGS diff --git a/driver/charger/bq25710.c b/driver/charger/bq25710.c index e653588bca..d8a406b73c 100644 --- a/driver/charger/bq25710.c +++ b/driver/charger/bq25710.c @@ -35,6 +35,13 @@ /* Sense resistor configurations and macros */ #define DEFAULT_SENSE_RESISTOR 10 +#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 + + #define INPUT_RESISTOR_RATIO \ ((CONFIG_CHARGER_SENSE_RESISTOR_AC) / DEFAULT_SENSE_RESISTOR) #define REG_TO_INPUT_CURRENT(REG) ((REG + 1) * 50 / INPUT_RESISTOR_RATIO) diff --git a/driver/charger/isl923x.c b/driver/charger/isl923x.c index 5ab4c7f9f1..454aef494c 100644 --- a/driver/charger/isl923x.c +++ b/driver/charger/isl923x.c @@ -30,6 +30,13 @@ #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 @@ -39,6 +46,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) #define CPRINTS(format, args...) cprints(CC_CHARGER, format, ## args) diff --git a/driver/charger/isl923x.h b/driver/charger/isl923x.h index 1b2cf30954..9b38b623e9 100644 --- a/driver/charger/isl923x.h +++ b/driver/charger/isl923x.h @@ -339,44 +339,6 @@ enum isl9237_fsm_state { #define RAA489000_C10_RP1_SHIFT 10 #define RAA489000_C10_ENABLE_DVC_MODE BIT(15) -#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 - #define I2C_ADDR_CHARGER_FLAGS ISL923X_ADDR_FLAGS extern const struct charger_drv isl923x_drv; diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c index d78089439c..8586f989a0 100644 --- a/driver/charger/rt946x.c +++ b/driver/charger/rt946x.c @@ -32,6 +32,19 @@ cprints(CC_CHARGER, "%s " format, "RT946X", ## 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, .voltage_max = CHARGE_V_MAX, diff --git a/driver/charger/rt946x.h b/driver/charger/rt946x.h index 38ec200c77..5e6f9e0223 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 |