diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2018-11-01 12:46:33 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-11-14 16:56:25 -0800 |
commit | e470e5a7f05143646685ed1bb0b73076fc2682ba (patch) | |
tree | 0b0bcbfec4019b7d7636f6975549c8b2356d28d7 | |
parent | 8edc6088475e1a346156315c6765af89cc1b7856 (diff) | |
download | chrome-ec-e470e5a7f05143646685ed1bb0b73076fc2682ba.tar.gz |
Battery: Apply full factor to full capacity
This change introduces CONFIG_BATT_HOST_FULL_FACTOR. If it's 100,
meaning no compensation, we multiply full capacity by
CONFIG_BATT_FULL_FACTOR. This makes the rest of the system see
consistent charge percentage behavior.
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
BUG=b:109954565,b:80270446
BRANCH=none
TEST=Verify display percentages printed by EC and power_supply_info
move up synchronously on charge and turns to full at the same time.
Change-Id: Ifb27c802b0cf04195ac5b426c13f9476189feb75
Reviewed-on: https://chromium-review.googlesource.com/1313468
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r-- | common/battery.c | 20 | ||||
-rw-r--r-- | include/config.h | 5 |
2 files changed, 14 insertions, 11 deletions
diff --git a/common/battery.c b/common/battery.c index 68ff0f3e62..71b05ba40a 100644 --- a/common/battery.c +++ b/common/battery.c @@ -21,11 +21,9 @@ #define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args) #define CPRINTS(format, args...) cprints(CC_CHARGER, format, ## args) -/* - * See config.h for details. - * TODO: Allow host (powerd) to update it. - */ +/* See config.h for details */ static int batt_full_factor = CONFIG_BATT_FULL_FACTOR; +static int batt_host_full_factor = CONFIG_BATT_HOST_FULL_FACTOR; static int batt_host_shutdown_pct = CONFIG_BATT_HOST_SHUTDOWN_PERCENTAGE; #ifdef CONFIG_BATTERY_V2 @@ -577,7 +575,15 @@ void battery_compensate_params(struct batt_params *batt) if (remain <= 0 || full <= 0) return; - if (remain * 100 > full * batt_full_factor) { + if (batt_host_full_factor == 100) { + /* full_factor is effectively disabled in powerd. */ + batt->full_capacity = full * batt_full_factor / 100; + full = batt->full_capacity; + if (remain > full) { + batt->remaining_capacity = full; + remain = batt->remaining_capacity; + } + } else if (remain * 100 > full * batt_full_factor) { batt->remaining_capacity = full; batt->display_charge = 1000; return; @@ -585,11 +591,11 @@ void battery_compensate_params(struct batt_params *batt) /* * Powerd uses the following equation to calculate display percentage: - * charge = remain/full; + * charge = 100 * remain/full; * 100 * (charge - shutdown_pct) / (full_factor - shutdown_pct); */ numer = (100 * remain - full * batt_host_shutdown_pct) * 1000; - denom = full * (batt_full_factor - 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; } diff --git a/include/config.h b/include/config.h index 6f283416e4..4051703f99 100644 --- a/include/config.h +++ b/include/config.h @@ -425,12 +425,9 @@ * Some batteries don't update full capacity timely or don't update it at all. * On such systems, compensation is required to guarantee remaining_capacity * will be equal to full_capacity eventually. This used to be done in ACPI. - * - * This number should match those used by powerd to evenly scale battery - * reading from 0 to 100%. These are default values, which are effective until - * the host boots. */ #define CONFIG_BATT_FULL_FACTOR 98 +#define CONFIG_BATT_HOST_FULL_FACTOR 94 #define CONFIG_BATT_HOST_SHUTDOWN_PERCENTAGE 4 /* |