summaryrefslogtreecommitdiff
path: root/common/battery.c
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2018-10-29 14:10:08 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-11-08 00:48:02 -0800
commit776eadc1b4b1a92688c441cbebfacf1eea6471fc (patch)
tree03516231f93f3363adfee360023f84d9062b889a /common/battery.c
parent0275d7360271f2fad2740f0c56cf0c83bf3a24d8 (diff)
downloadchrome-ec-776eadc1b4b1a92688c441cbebfacf1eea6471fc.tar.gz
Battery: Get display charge percentage
This patch converts the actual battery charge to the display percentage using the same conversion used by Powerd. EC can use this number to control LEDs synchronously to the value on the display. Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> BUG=b:109954565,b:80270446 BRANCH=none TEST=Verify charge LED changes to white (full) on Sona synchronously to the display percentage. TEST=Verify charge LED changes to blinking white (low) on Sona within 30 seconds synchronously to the display percentage. Change-Id: I2041cb768dee27b8dba94a32db0eb62dfa14c73b Reviewed-on: https://chromium-review.googlesource.com/1309033 Commit-Ready: Daisuke Nojiri <dnojiri@chromium.org> Tested-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'common/battery.c')
-rw-r--r--common/battery.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/common/battery.c b/common/battery.c
index d3a256b9e0..68ff0f3e62 100644
--- a/common/battery.c
+++ b/common/battery.c
@@ -26,6 +26,7 @@
* TODO: Allow host (powerd) to update it.
*/
static int batt_full_factor = CONFIG_BATT_FULL_FACTOR;
+static int batt_host_shutdown_pct = CONFIG_BATT_HOST_SHUTDOWN_PERCENTAGE;
#ifdef CONFIG_BATTERY_V2
/*
@@ -565,6 +566,7 @@ DECLARE_HOOK(HOOK_INIT, battery_init, HOOK_PRIO_DEFAULT);
void battery_compensate_params(struct batt_params *batt)
{
+ int numer, denom;
int remain = batt->remaining_capacity;
int full = batt->full_capacity;
@@ -575,6 +577,19 @@ void battery_compensate_params(struct batt_params *batt)
if (remain <= 0 || full <= 0)
return;
- if (remain * 100 > full * batt_full_factor)
+ if (remain * 100 > full * batt_full_factor) {
batt->remaining_capacity = full;
+ batt->display_charge = 1000;
+ return;
+ }
+
+ /*
+ * Powerd uses the following equation to calculate display percentage:
+ * charge = 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);
+ /* Rounding (instead of truncating) */
+ batt->display_charge = (numer + denom / 2) / denom;
}