summaryrefslogtreecommitdiff
path: root/common/charge_state_v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/charge_state_v2.c')
-rw-r--r--common/charge_state_v2.c15
1 files changed, 10 insertions, 5 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;