diff options
author | Derek Basehore <dbasehore@google.com> | 2023-05-04 14:55:37 -0700 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-05-11 00:11:14 +0000 |
commit | 24bc963111a5aa0c419d75918807c55ed420095b (patch) | |
tree | db2e11010ba8394396d4607735037c6a981b8ea8 | |
parent | 69da0638ea7c3b2cea9292a8f342a3ac5447caa8 (diff) | |
download | chrome-ec-firmware-atlas-11827.B.tar.gz |
chgstv2: Always discharge if soc is > sustainer_soc.upperfirmware-atlas-11827.B
For the Charge Limit feature, we need to discharge down to the upper
limit for the battery sustainer. The Charge Limit feature requires that
the system never charge above 80%, so if the feature is enabled when the
system is over that, it needs to discharge down to 80%.
BUG=b:222619859
TEST=run-sbs_charging_v2
Change-Id: I3f65743144de64411484dd3f2aa6c5fd681a47c9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4507759
Tested-by: Derek Basehore <dbasehore@chromium.org>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Commit-Queue: Derek Basehore <dbasehore@chromium.org>
Auto-Submit: Derek Basehore <dbasehore@chromium.org>
-rw-r--r-- | common/charge_state_v2.c | 15 | ||||
-rw-r--r-- | test/sbs_charging_v2.c | 4 |
2 files changed, 12 insertions, 7 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 70e676a07a..be9c98052f 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -1539,10 +1539,12 @@ static void sustain_battery_soc(void) */ switch (mode) { case CHARGE_CONTROL_NORMAL: - /* Going up */ - if (sustain_soc.upper < soc) - mode = sustain_soc.upper == sustain_soc.lower ? - CHARGE_CONTROL_IDLE : CHARGE_CONTROL_DISCHARGE; + /* Going up. Always DISCHARGE if the soc is above upper. */ + if (sustain_soc.lower == soc && soc == sustain_soc.upper) { + mode = CHARGE_CONTROL_IDLE; + } else if (sustain_soc.upper < soc) { + mode = CHARGE_CONTROL_DISCHARGE; + } break; case CHARGE_CONTROL_IDLE: /* Discharging naturally */ @@ -1551,8 +1553,11 @@ static void sustain_battery_soc(void) break; case CHARGE_CONTROL_DISCHARGE: /* Discharging actively. */ - if (soc < sustain_soc.lower) + if (sustain_soc.lower == soc && soc == sustain_soc.upper) { + mode = CHARGE_CONTROL_IDLE; + } else if (soc < sustain_soc.lower) { mode = CHARGE_CONTROL_NORMAL; + } break; default: return; diff --git a/test/sbs_charging_v2.c b/test/sbs_charging_v2.c index addd438d7e..e1c7602ad8 100644 --- a/test/sbs_charging_v2.c +++ b/test/sbs_charging_v2.c @@ -831,7 +831,7 @@ static int test_battery_sustainer_discharge_idle(void) /* (lower =) upper < SoC */ display_soc = 810; wait_charging_state(); - TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_IDLE); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE); /* Unplug AC. Sustainer gets deactivated. */ gpio_set_level(GPIO_AC_PRESENT, 0); @@ -841,7 +841,7 @@ static int test_battery_sustainer_discharge_idle(void) /* Replug AC. Sustainer gets re-activated. */ gpio_set_level(GPIO_AC_PRESENT, 1); wait_charging_state(); - TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_IDLE); + TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE); /* lower = SoC = upper */ display_soc = 800; |