From 3c06f602b638f1f6eff1bde29dd1cbd3caf8c707 Mon Sep 17 00:00:00 2001 From: Randall Spangler Date: Tue, 2 Oct 2012 14:12:45 -0700 Subject: link: Add charge_near_full state Tell the host the battery is no longer charging when it hits 97%, and set the power adapter LED to green. This solves several problems: 1) The last 3% of charge takes a looong time. Kernel/ACPI/UI already have a hack to show the battery as charged when it's about 3% from full, but the EC still showed a yellow LED. 2) If the system is charged and you briefly unplug the adapter, the LED turned yellow for a long time as it slowly trickle-charged. Now it goes right to green. 3) A fully-charged battery will drop below 100% charge as it settles, but won't accept more current at that time. This caused the LED to turn yellow and stay there until the battery finally settled down to ~96%, at which point it'd accept more current and top itself off. The whole time it did this, the kernel/ACPI/UI hack from (1) would keep reporting "battery full". Now the LED stays green too. BUG=chrome-os-partner:11248 BRANCH=link TEST=manual - Discharge system to <95% full. - Plug adapter in. LED should come on yellow. - At around 97% full, the LED should turn green. - Around that the UI will display "battery full". (Note that due to rounding, the UI may take a few minutes to display "battery full" after the LED goes green; that's ok) - Unplug and replug adapter. LED should come on green. UI still reports "battery full". Change-Id: Ie56fbf3a05239e73d2c765bb98d36aa5cfedc2ef Signed-off-by: Randall Spangler Reviewed-on: https://gerrit.chromium.org/gerrit/34452 --- include/charge_state.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'include/charge_state.h') diff --git a/include/charge_state.h b/include/charge_state.h index 9b4e6d364f..d3b310607e 100644 --- a/include/charge_state.h +++ b/include/charge_state.h @@ -48,19 +48,28 @@ /* Power states */ enum power_state { + /* Meta-state; unchanged from previous time through task loop */ PWR_STATE_UNCHANGE = 0, + /* (Re-)initalizing charge state machine */ PWR_STATE_INIT, + /* Just transitioned from init to idle */ PWR_STATE_IDLE0, + /* Idle; AC present */ PWR_STATE_IDLE, + /* Discharging */ PWR_STATE_DISCHARGE, + /* Charging */ PWR_STATE_CHARGE, + /* Charging, almost fully charged */ + PWR_STATE_CHARGE_NEAR_FULL, + /* Charging state machine error */ PWR_STATE_ERROR }; /* Debugging constants, in the same order as enum power_state. This string * table was moved here to sync with enum above. */ -#define POWER_STATE_NAME_TABLE \ +#define POWER_STATE_NAME_TABLE \ { \ "unchange", \ "init", \ @@ -68,6 +77,7 @@ enum power_state { "idle", \ "discharge", \ "charge", \ + "charge_near_full", \ "error" \ } /* End of POWER_STATE_NAME_TABLE macro */ -- cgit v1.2.1