diff options
author | Aseda Aboagye <aaboagye@google.com> | 2018-01-11 18:40:51 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-01-12 17:12:35 -0800 |
commit | 6efe929eccb2ea1dd56934bdbac8a6d080deea1e (patch) | |
tree | ccc1324ae826a32ae2063c1c986d30612c1c3fd7 | |
parent | 2bd336f1d2658ddbad7f5bd148c45eaaed197948 (diff) | |
download | chrome-ec-6efe929eccb2ea1dd56934bdbac8a6d080deea1e.tar.gz |
meowth: zoombini: Check for battery disconnect.
This commit enables support for reviving a battery from disconnect while
also providing the code to detect if the batteries are disconnected or
not. The disconnection code behaves similarly to some other battery
packs used in Chromebooks.
BUG=b:71515229
BRANCH=None
TEST=Flash zoombini; cut off battery; apply AC and verify that we do not
leave safe mode until the battery is no longer "disconnected".
TEST=Repeat above test for meowth.
TEST=Cutoff the battery and apply AC and verify that board wakes up from
cutoff.
Change-Id: I52fe91bd6522901671ad5a302bfa0ca27e5f5aa0
Signed-off-by: Aseda Aboagye <aaboagye@google.com>
Reviewed-on: https://chromium-review.googlesource.com/864830
Commit-Ready: Aseda Aboagye <aaboagye@chromium.org>
Tested-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r-- | board/zoombini/battery.c | 45 | ||||
-rw-r--r-- | board/zoombini/board.h | 1 |
2 files changed, 46 insertions, 0 deletions
diff --git a/board/zoombini/battery.c b/board/zoombini/battery.c index a5077881c1..f29f9b6009 100644 --- a/board/zoombini/battery.c +++ b/board/zoombini/battery.c @@ -9,6 +9,7 @@ #include "battery_smart.h" #include "common.h" #include "ec_commands.h" +#include "extpower.h" /* Shutdown mode parameter to write to manufacturer access register */ #define SB_SHUTDOWN_DATA 0x0010 @@ -71,3 +72,47 @@ const struct battery_info *battery_get_info(void) { return &info; } + +enum battery_disconnect_state battery_get_disconnect_state(void) +{ + uint8_t data[6]; + int rv; + + /* + * Take note if we find that the battery isn't in disconnect state, + * and always return NOT_DISCONNECTED without probing the battery. + * This assumes the battery will not go to disconnect state during + * runtime. + */ + static int not_disconnected; + + if (not_disconnected) + return BATTERY_NOT_DISCONNECTED; + + if (extpower_is_present()) { + /* Check if battery charging + discharging is disabled. */ + rv = sb_read_mfgacc(PARAM_OPERATION_STATUS, + SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data)); + if (rv) + return BATTERY_DISCONNECT_ERROR; + if (~data[3] & (BATTERY_DISCHARGING_DISABLED | + BATTERY_CHARGING_DISABLED)) { + not_disconnected = 1; + return BATTERY_NOT_DISCONNECTED; + } + + /* + * Battery is neither charging nor discharging. Verify that + * we didn't enter this state due to a safety fault. + */ + rv = sb_read_mfgacc(PARAM_SAFETY_STATUS, + SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data)); + if (rv || data[2] || data[3] || data[4] || data[5]) + return BATTERY_DISCONNECT_ERROR; + + /* No safety fault, battery is disconnected */ + return BATTERY_DISCONNECTED; + } + not_disconnected = 1; + return BATTERY_NOT_DISCONNECTED; +} diff --git a/board/zoombini/board.h b/board/zoombini/board.h index b1c6f29dae..dfc459078b 100644 --- a/board/zoombini/board.h +++ b/board/zoombini/board.h @@ -42,6 +42,7 @@ #define CONFIG_BATTERY_CUT_OFF #define CONFIG_BATTERY_SMART +#define CONFIG_BATTERY_REVIVE_DISCONNECT #define CONFIG_BATTERY_PRESENT_GPIO GPIO_BAT_PRESENT_L #define CONFIG_BOARD_VERSION |