From 61998464402f768ba855f937c6d5612118ea4542 Mon Sep 17 00:00:00 2001 From: Daisuke Nojiri Date: Tue, 29 Jun 2021 10:33:02 -0700 Subject: Battery: Apply fake SoC to display charge This patch makes the battfake command apply the fake SoC to the display SoC as well as the raw battery SoC. This patch also cleans up battery_compensate_params. BUG=None BRANCH=None TEST=Atlas Change-Id: Ifbdaa81204d27501df8a4f5e025c19a79d62feff Signed-off-by: Daisuke Nojiri Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2994748 Reviewed-by: Aseda Aboagye Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3872714 --- common/battery.c | 12 ++++++------ driver/battery/smart.c | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/common/battery.c b/common/battery.c index 50d689f0d1..7e0baf6986 100644 --- a/common/battery.c +++ b/common/battery.c @@ -577,18 +577,18 @@ void battery_compensate_params(struct batt_params *batt) { int numer, denom; int *remain = &(batt->remaining_capacity); - int *full = &(batt->full_capacity); + int full = batt->full_capacity; if ((batt->flags & BATT_FLAG_BAD_FULL_CAPACITY) || (batt->flags & BATT_FLAG_BAD_REMAINING_CAPACITY)) return; - if (*remain <= 0 || *full <= 0) + if (*remain <= 0 || full <= 0) return; /* Some batteries don't update full capacity as often. */ - if (*remain > *full) - *remain = *full; + if (*remain > full) + *remain = full; /* * EC calculates the display SoC like how Powerd used to do. Powerd @@ -611,8 +611,8 @@ void battery_compensate_params(struct batt_params *batt) * = ----------------------------------- x 1000 * full x (full_factor - shutdown_pct) */ - numer = 1000 * ((100 * *remain) - (*full * batt_host_shutdown_pct)); - denom = *full * (batt_host_full_factor - batt_host_shutdown_pct); + numer = 1000 * ((100 * *remain) - (full * batt_host_shutdown_pct)); + denom = full * (batt_host_full_factor - batt_host_shutdown_pct); /* Rounding (instead of truncating) */ batt->display_charge = (numer + denom / 2) / denom; if (batt->display_charge < 0) diff --git a/driver/battery/smart.c b/driver/battery/smart.c index 643793a7ac..cdadf07cec 100644 --- a/driver/battery/smart.c +++ b/driver/battery/smart.c @@ -320,6 +320,7 @@ static void apply_fake_state_of_charge(struct batt_params *batt) batt->state_of_charge = fake_state_of_charge; batt->remaining_capacity = full * fake_state_of_charge / 100; + battery_compensate_params(batt); batt->flags &= ~BATT_FLAG_BAD_STATE_OF_CHARGE; batt->flags &= ~BATT_FLAG_BAD_REMAINING_CAPACITY; } -- cgit v1.2.1