summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2018-01-11 18:40:51 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-01-12 17:12:35 -0800
commit6efe929eccb2ea1dd56934bdbac8a6d080deea1e (patch)
treeccc1324ae826a32ae2063c1c986d30612c1c3fd7
parent2bd336f1d2658ddbad7f5bd148c45eaaed197948 (diff)
downloadchrome-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.c45
-rw-r--r--board/zoombini/board.h1
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