summaryrefslogtreecommitdiff
path: root/driver/charger
diff options
context:
space:
mode:
authorZhuohao Lee <zhuohao@chromium.org>2022-08-31 13:15:28 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-08 00:35:29 +0000
commit37e35d3aff2809c2eda33b053278e918a5e9cdc0 (patch)
tree9a9b242554598688c8c7d06a1d2f776e087aced9 /driver/charger
parent244ccd0acb3d5cce60b9efcde7d259b1bc2bcb12 (diff)
downloadchrome-ec-37e35d3aff2809c2eda33b053278e918a5e9cdc0.tar.gz
sm5803: add the CONFIG_BATTERY for the battery api
In order to support the HW design which includes a charger ic but doesn't include a battery, we add some checks and only call the battery api when the CONFIG_BATTERY is defined. LOW_COVERAGE_REASON=no SM5803 emulator set up yet BUG=b:242949656 BRANCH=none TEST=build pass with/without CONFIG_BATTERY build pass with `make buildall` Change-Id: I2a8903cb620a70aff5c639eef46607c4c535c7f1 Signed-off-by: Zhuohao Lee <zhuohao@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3865213 Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com> Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'driver/charger')
-rw-r--r--driver/charger/sm5803.c102
1 files changed, 60 insertions, 42 deletions
diff --git a/driver/charger/sm5803.c b/driver/charger/sm5803.c
index a1fbb4a884..99a274c3d0 100644
--- a/driver/charger/sm5803.c
+++ b/driver/charger/sm5803.c
@@ -360,8 +360,9 @@ enum ec_error_list sm5803_vbus_sink_enable(int chgnum, int enable)
* Only enable auto fast charge when a battery is
* connected and out of cutoff.
*/
- if (battery_get_disconnect_state() ==
- BATTERY_NOT_DISCONNECTED) {
+ if (IS_ENABLED(CONFIG_BATTERY) &&
+ battery_get_disconnect_state() ==
+ BATTERY_NOT_DISCONNECTED) {
rv = sm5803_flow2_update(
chgnum, SM5803_FLOW2_AUTO_ENABLED,
MASK_SET);
@@ -470,9 +471,6 @@ static void sm5803_init(int chgnum)
enum ec_error_list rv;
int reg;
int vbus_mv;
- const struct battery_info *batt_info;
- int pre_term;
- int cells;
/*
* If a charger is not currently present, disable switching per OCPC
@@ -746,40 +744,52 @@ static void sm5803_init(int chgnum)
rv |= chg_write8(chgnum, SM5803_REG_FLOW2, SM5803_FLOW2_HOST_MODE_EN);
if (chgnum == CHARGER_PRIMARY) {
- int ibat_eoc_ma;
-
- /* Set end of fast charge threshold */
- batt_info = battery_get_info();
- ibat_eoc_ma = batt_info->precharge_current - 50;
- ibat_eoc_ma /= 100;
- ibat_eoc_ma = CLAMP(ibat_eoc_ma, 0, SM5803_CONF5_IBAT_EOC_TH);
- rv |= chg_read8(chgnum, SM5803_REG_FAST_CONF5, &reg);
- reg &= ~SM5803_CONF5_IBAT_EOC_TH;
- reg |= ibat_eoc_ma;
- rv |= chg_write8(CHARGER_PRIMARY, SM5803_REG_FAST_CONF5, reg);
-
- /* Setup the proper precharge thresholds. */
- cells = batt_info->voltage_max / 4;
- pre_term = batt_info->voltage_min / cells;
- pre_term /= 100; /* Convert to decivolts. */
- pre_term = CLAMP(pre_term, SM5803_VBAT_PRE_TERM_MIN_DV,
- SM5803_VBAT_PRE_TERM_MAX_DV);
- pre_term -= SM5803_VBAT_PRE_TERM_MIN_DV; /* Convert to regval */
-
- rv |= chg_read8(chgnum, SM5803_REG_PRE_FAST_CONF_REG1, &reg);
- reg &= ~SM5803_VBAT_PRE_TERM;
- reg |= pre_term << SM5803_VBAT_PRE_TERM_SHIFT;
- rv |= chg_write8(chgnum, SM5803_REG_PRE_FAST_CONF_REG1, reg);
+ if (IS_ENABLED(CONFIG_BATTERY)) {
+ const struct battery_info *batt_info;
+ int ibat_eoc_ma;
+ int pre_term;
+ int cells;
+
+ /* Set end of fast charge threshold */
+ batt_info = battery_get_info();
+ ibat_eoc_ma = batt_info->precharge_current - 50;
+ ibat_eoc_ma /= 100;
+ ibat_eoc_ma =
+ CLAMP(ibat_eoc_ma, 0, SM5803_CONF5_IBAT_EOC_TH);
+ rv |= chg_read8(chgnum, SM5803_REG_FAST_CONF5, &reg);
+ reg &= ~SM5803_CONF5_IBAT_EOC_TH;
+ reg |= ibat_eoc_ma;
+ rv |= chg_write8(CHARGER_PRIMARY, SM5803_REG_FAST_CONF5,
+ reg);
+
+ /* Setup the proper precharge thresholds. */
+ cells = batt_info->voltage_max / 4;
+ pre_term = batt_info->voltage_min / cells;
+ /* Convert to decivolts. */
+ pre_term /= 100;
+ pre_term = CLAMP(pre_term, SM5803_VBAT_PRE_TERM_MIN_DV,
+ SM5803_VBAT_PRE_TERM_MAX_DV);
+ /* Convert to regval */
+ pre_term -= SM5803_VBAT_PRE_TERM_MIN_DV;
+
+ rv |= chg_read8(chgnum, SM5803_REG_PRE_FAST_CONF_REG1,
+ &reg);
+ reg &= ~SM5803_VBAT_PRE_TERM;
+ reg |= pre_term << SM5803_VBAT_PRE_TERM_SHIFT;
+ rv |= chg_write8(chgnum, SM5803_REG_PRE_FAST_CONF_REG1,
+ reg);
- /*
- * Set up precharge current
- * Note it is preferred to under-shoot the precharge current
- * requested. Upper bits of this register are read/write 1 to
- * clear
- */
- reg = SM5803_CURRENT_TO_REG(batt_info->precharge_current);
- reg = MIN(reg, SM5803_PRECHG_ICHG_PRE_SET);
- rv |= chg_write8(chgnum, SM5803_REG_PRECHG, reg);
+ /*
+ * Set up precharge current
+ * Note it is preferred to under-shoot the precharge
+ * current requested. Upper bits of this register are
+ * read/write 1 to clear
+ */
+ reg = SM5803_CURRENT_TO_REG(
+ batt_info->precharge_current);
+ reg = MIN(reg, SM5803_PRECHG_ICHG_PRE_SET);
+ rv |= chg_write8(chgnum, SM5803_REG_PRECHG, reg);
+ }
/*
* Set up BFET alerts
@@ -894,6 +904,7 @@ static void sm5803_disable_runtime_low_power_mode(void)
DECLARE_HOOK(HOOK_USB_PD_CONNECT, sm5803_disable_runtime_low_power_mode,
HOOK_PRIO_FIRST);
+#ifdef CONFIG_BATTERY
static enum ec_error_list sm5803_enable_linear_charge(int chgnum, bool enable)
{
int rv;
@@ -942,6 +953,7 @@ static enum ec_error_list sm5803_enable_linear_charge(int chgnum, bool enable)
return rv;
}
+#endif
static void sm5803_enable_runtime_low_power_mode(void)
{
@@ -1102,8 +1114,7 @@ void sm5803_handle_interrupt(int chgnum)
enum ec_error_list rv;
int int_reg, meas_reg;
static bool throttled;
- struct batt_params bp;
- int act_chg, val;
+ int act_chg;
/* Note: Interrupt registers are clear on read */
rv = main_read8(chgnum, SM5803_REG_INT1_REQ, &int_reg);
@@ -1243,8 +1254,12 @@ void sm5803_handle_interrupt(int chgnum)
return;
}
- if ((int_reg & SM5803_INT3_BFET_PWR_LIMIT) ||
- (int_reg & SM5803_INT3_BFET_PWR_HWSAFE_LIMIT)) {
+ if (IS_ENABLED(CONFIG_BATTERY) &&
+ ((int_reg & SM5803_INT3_BFET_PWR_LIMIT) ||
+ (int_reg & SM5803_INT3_BFET_PWR_HWSAFE_LIMIT))) {
+ struct batt_params bp;
+ int val;
+
battery_get_params(&bp);
act_chg = charge_manager_get_active_charge_port();
CPRINTS("%s BFET power limit reached! (%s)", CHARGER_NAME,
@@ -1516,6 +1531,7 @@ static enum ec_error_list sm5803_set_voltage(int chgnum, int voltage)
/* Once battery is connected, set up fast charge enable */
if (fast_charge_disabled && chgnum == CHARGER_PRIMARY &&
+ IS_ENABLED(CONFIG_BATTERY) &&
battery_get_disconnect_state() == BATTERY_NOT_DISCONNECTED) {
rv = sm5803_flow2_update(chgnum, SM5803_FLOW2_AUTO_ENABLED,
MASK_SET);
@@ -2047,7 +2063,9 @@ const struct charger_drv sm5803_drv = {
.is_sourcing_otg_power = &sm5803_is_sourcing_otg_power,
.set_vsys_compensation = &sm5803_set_vsys_compensation,
.is_icl_reached = &sm5803_is_input_current_limit_reached,
+#ifdef CONFIG_BATTERY
.enable_linear_charge = &sm5803_enable_linear_charge,
+#endif
#ifdef CONFIG_CHARGE_RAMP_HW
.set_hw_ramp = &sm5803_set_hw_ramp,
.ramp_is_stable = &sm5803_ramp_is_stable,