diff options
author | Ting Shen <phoenixshen@chromium.org> | 2019-09-10 17:58:16 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-10-01 12:52:59 +0000 |
commit | 2d592c8b467b99061dad3f0b7552bc4b184f444a (patch) | |
tree | 077c4b0d73fd187c20738e8233ca7d1cd564f211 | |
parent | 1db81be6d747c8c90ddb3f1e93dadc230506b859 (diff) | |
download | chrome-ec-2d592c8b467b99061dad3f0b7552bc4b184f444a.tar.gz |
battery: add precharge voltage
Add a precharge_voltage field to batt_info in case we need its value
differ from voltage_min, and set precharge_voltage = 3.4V according to
battery spec.
BUG=b:139012899
TEST=observe the charging curve (see issue link above for test result)
BRANCH=master
Change-Id: I2e4b240a12cd023ed90aaeda922e10b262508624
Signed-off-by: Ting Shen <phoenixshen@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1795491
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r-- | baseboard/kukui/battery_mm8013.c | 1 | ||||
-rw-r--r-- | driver/charger/isl923x.c | 4 | ||||
-rw-r--r-- | driver/charger/rt946x.c | 3 | ||||
-rw-r--r-- | include/battery.h | 8 |
4 files changed, 13 insertions, 3 deletions
diff --git a/baseboard/kukui/battery_mm8013.c b/baseboard/kukui/battery_mm8013.c index 8fed84fe53..5c22675703 100644 --- a/baseboard/kukui/battery_mm8013.c +++ b/baseboard/kukui/battery_mm8013.c @@ -34,6 +34,7 @@ static const struct battery_info info[] = { .voltage_max = 4400, .voltage_normal = 3850, .voltage_min = 3000, + .precharge_voltage = 3400, .precharge_current = 256, .start_charging_min_c = 0, .start_charging_max_c = 45, diff --git a/driver/charger/isl923x.c b/driver/charger/isl923x.c index 04abb042c8..7a02f62ca0 100644 --- a/driver/charger/isl923x.c +++ b/driver/charger/isl923x.c @@ -339,8 +339,10 @@ static void isl923x_init(void) #ifdef CONFIG_TRICKLE_CHARGING const struct battery_info *bi = battery_get_info(); + int precharge_voltage = bi->precharge_voltage ? + bi->precharge_voltage : bi->voltage_min; - if (raw_write16(ISL923X_REG_SYS_VOLTAGE_MIN, bi->voltage_min)) + if (raw_write16(ISL923X_REG_SYS_VOLTAGE_MIN, precharge_voltage)) goto init_fail; #endif diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c index 2615f9ff25..244fb2f12d 100644 --- a/driver/charger/rt946x.c +++ b/driver/charger/rt946x.c @@ -457,7 +457,8 @@ static int rt946x_init_setting(void) rv = rt946x_set_ircmp_res(setting->ircmp_res); if (rv) return rv; - rv = rt946x_set_vprec(batt_info->voltage_min); + rv = rt946x_set_vprec(batt_info->precharge_voltage ? + batt_info->precharge_voltage : batt_info->voltage_min); if (rv) return rv; rv = rt946x_set_iprec(batt_info->precharge_current); diff --git a/include/battery.h b/include/battery.h index 85f8f2cc2b..7052e2d663 100644 --- a/include/battery.h +++ b/include/battery.h @@ -125,11 +125,17 @@ int battery_get_avg_voltage(void); /* in mV */ /* Battery constants */ struct battery_info { - /* Design voltage in mV */ + /* Operation voltage in mV */ int voltage_max; int voltage_normal; int voltage_min; /* (TODO(chromium:756700): add desired_charging_current */ + /** + * Pre-charge to fast charge threshold in mV, + * default to voltage_min if not specified. + * This option is only available on isl923x and rt946x. + */ + int precharge_voltage; /* Pre-charge current in mA */ int precharge_current; /* Working temperature ranges in degrees C */ |