diff options
-rw-r--r-- | common/battery_wolf.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/common/battery_wolf.c b/common/battery_wolf.c index 4eb0966950..a2ab0a92d6 100644 --- a/common/battery_wolf.c +++ b/common/battery_wolf.c @@ -7,6 +7,11 @@ #include "battery_pack.h" #include "gpio.h" +#include "host_command.h" +#include "smart_battery.h" + +#define SB_SHIP_MODE_ADDR 0x00 +#define SB_SHIP_MODE_DATA 0x0010 const struct battery_temperature_ranges bat_temp_ranges = { .start_charging_min_c = 0, @@ -33,6 +38,20 @@ const struct battery_info *battery_get_info(void) return &info; } +/* Triger the command twice to make sure the battery can be cut-off. + * Need to confirm with vendor why the command should be trigered twice. + * By the result of experiment, it's ok and can be cut-off. */ +int battery_command_cut_off(struct host_cmd_handler_args *args) +{ + int rv; + rv = sb_write(SB_SHIP_MODE_ADDR, SB_SHIP_MODE_DATA); + if (!rv) + rv = sb_write(SB_SHIP_MODE_ADDR, SB_SHIP_MODE_DATA); + return rv; +} +DECLARE_HOST_COMMAND(EC_CMD_BATTERY_CUT_OFF, battery_command_cut_off, + EC_VER_MASK(0)); + /* FIXME: The smart battery should do the right thing - that's why it's * called "smart". Do we really want to second-guess it? For now, let's not. */ void battery_vendor_params(struct batt_params *batt) |