diff options
author | Randall Spangler <rspangler@chromium.org> | 2013-10-28 14:21:04 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2013-10-28 23:38:12 +0000 |
commit | 6aaab6ab0b12f7cc71b126dd19ebf8e50b7462e4 (patch) | |
tree | b933274bf416298fdcf24da86b7f5d68f8600199 | |
parent | 7d9ee9a4e941e614895a89bc8a98227e7a7228de (diff) | |
download | chrome-ec-6aaab6ab0b12f7cc71b126dd19ebf8e50b7462e4.tar.gz |
rambi: Implement battery cutoff command
Needed for shipping systems. Puts battery into shutdown mode until AC
reapplied.
BUG=chrome-os-partner:23634
BRANCH=none
TEST=With system on battery power, 'battcutoff'. System will shut off
after a few seconds. Power button will not turn it on. Plugging
AC power in will turn system back on.
Change-Id: I10a28c3c21623508dc8e4dee1cc5dc8d6fb9a6af
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/174888
Reviewed-by: Dave Parker <dparker@chromium.org>
-rw-r--r-- | board/rambi/battery.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/board/rambi/battery.c b/board/rambi/battery.c index 2c28f6a07b..6edd535354 100644 --- a/board/rambi/battery.c +++ b/board/rambi/battery.c @@ -6,7 +6,14 @@ */ #include "battery.h" +#include "battery_smart.h" +#include "console.h" #include "gpio.h" +#include "host_command.h" +#include "util.h" + +/* Shutdown mode parameter to write to manufacturer access register */ +#define SB_SHUTDOWN_DATA 0x0010 const struct battery_temperature_ranges bat_temp_ranges = { .start_charging_min_c = 0, @@ -29,4 +36,31 @@ const struct battery_info *battery_get_info(void) return &info; } -/* TODO(crosbug.com/p/23597): Battery cutoff command; need vendor info */ +static int cutoff(void) +{ + int rv; + + /* Ship mode command must be sent twice to take effect */ + rv = sb_write(SB_MANUFACTURER_ACCESS, SB_SHUTDOWN_DATA); + + if (rv != EC_SUCCESS) + return rv; + + return sb_write(SB_MANUFACTURER_ACCESS, SB_SHUTDOWN_DATA); +} + +static int battery_command_cut_off(struct host_cmd_handler_args *args) +{ + return cutoff() ? EC_RES_SUCCESS : EC_RES_ERROR; +} +DECLARE_HOST_COMMAND(EC_CMD_BATTERY_CUT_OFF, battery_command_cut_off, + EC_VER_MASK(0)); + +static int command_battcutoff(int argc, char **argv) +{ + return cutoff(); +} +DECLARE_CONSOLE_COMMAND(battcutoff, command_battcutoff, + NULL, + "Enable battery cutoff (ship mode)", + NULL); |