From dfe34f9026090603040e10c82de07107d089926e Mon Sep 17 00:00:00 2001 From: David Date: Mon, 9 Sep 2013 15:43:23 +0800 Subject: Add battery ship mode function Add battery cutoff command and resume command when AC plug in BRANCH=leon BUG=chrome-os-partner:22567 TEST=manual 1. Use ectool batterycutoff to check battery enter ship mode. 2. Plug in AC and boot on, then plug out AC to check battery resume from ship mode. Change-Id: I9ff37aa809e2a6c4ea7abe7924512ff15a92d781 Signed-off-by: David Huang Reviewed-on: https://chromium-review.googlesource.com/168396 Reviewed-by: Shawn Nematbakhsh --- common/battery_leon.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/common/battery_leon.c b/common/battery_leon.c index 64d5c09d1e..9b64af2c30 100644 --- a/common/battery_leon.c +++ b/common/battery_leon.c @@ -7,6 +7,14 @@ #include "battery_pack.h" #include "gpio.h" +#include "host_command.h" +#include "smart_battery.h" +#include "extpower.h" +#include "hooks.h" + +#define SB_SHIP_MODE_ADDR 0x35 +#define SB_SHIP_MODE_DATA 0x0004 +#define SB_SHIP_RESET_DATA 0x0003 /* FIXME: We need REAL values for all this stuff */ const struct battery_temperature_ranges bat_temp_ranges = { @@ -33,6 +41,20 @@ const struct battery_info *battery_get_info(void) return &info; } +static void battery_leon_ac_change(void) +{ + if (extpower_is_present()) + sb_write(SB_SHIP_MODE_ADDR, SB_SHIP_RESET_DATA); +} +DECLARE_HOOK(HOOK_AC_CHANGE, battery_leon_ac_change, HOOK_PRIO_DEFAULT); + +int battery_command_cut_off(struct host_cmd_handler_args *args) +{ + return sb_write(SB_SHIP_MODE_ADDR, SB_SHIP_MODE_DATA); +} +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) -- cgit v1.2.1