summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--baseboard/octopus/baseboard.c2
-rw-r--r--baseboard/octopus/baseboard.h8
-rw-r--r--board/casta/board.c25
-rw-r--r--board/casta/board.h3
-rw-r--r--driver/charger/bd9995x.c13
-rw-r--r--driver/charger/bd9995x.h13
-rw-r--r--driver/charger/bq24773.c16
-rw-r--r--driver/charger/bq24773.h16
-rw-r--r--driver/charger/bq25710.c7
-rw-r--r--driver/charger/isl923x.c45
-rw-r--r--driver/charger/isl923x.h38
-rw-r--r--driver/charger/rt946x.c13
-rw-r--r--driver/charger/rt946x.h13
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