summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@chromium.org>2019-09-10 17:58:16 +0000
committerCommit Bot <commit-bot@chromium.org>2019-10-01 12:52:59 +0000
commit2d592c8b467b99061dad3f0b7552bc4b184f444a (patch)
tree077c4b0d73fd187c20738e8233ca7d1cd564f211
parent1db81be6d747c8c90ddb3f1e93dadc230506b859 (diff)
downloadchrome-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.c1
-rw-r--r--driver/charger/isl923x.c4
-rw-r--r--driver/charger/rt946x.c3
-rw-r--r--include/battery.h8
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 */