diff options
-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); |