diff options
Diffstat (limited to 'common/charge_state_v2.c')
-rw-r--r-- | common/charge_state_v2.c | 15 |
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; |