summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenry Hsu <Henry.Hsu@quantatw.com>2013-10-18 19:32:40 +0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-10-21 04:01:12 +0000
commitca7282a9df5128ab50ce2327f862129cdf78edc1 (patch)
treef9b0fc7c0996934f25f180e7455353f3d384f9ca
parente837097b91c87af9ffa27756c3bf001047bae828 (diff)
downloadchrome-ec-ca7282a9df5128ab50ce2327f862129cdf78edc1.tar.gz
Support battery ship mode command
Support wolf enter ship mode. BUG=chrome-os-partner:23431 BRANCH=Wolf TEST=manual triger command 'ectool batterycutoff', then system shut down after 10 seconds. Change-Id: If3c23ebb33b83ebe4c98726ed6309696b94fb795 Signed-off-by: Henry Hsu <Henry.Hsu@quantatw.com> Reviewed-on: https://chromium-review.googlesource.com/173666 Reviewed-by: Dave Parker <dparker@chromium.org>
-rw-r--r--common/battery_wolf.c19
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)