summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Parker <dparker@google.com>2014-06-21 15:44:27 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-07-15 20:25:36 +0000
commit53eb6dce2961f403b8e862d9950a6f37d201cbb4 (patch)
tree2fcb5ecf2a32b714be808c75afa5e074ac91be30
parent4702a1d19bef7da427dc05b3675d53b76b0c979b (diff)
downloadchrome-ec-release-R37-5978.B.tar.gz
CHERRY-PICK: ectool: Add back support for version 0 of batterycutoff commandstabilize.59781.98.Bstabilize.5978.98.Bstabilize.5978.51.Brelease-R37-5978.B
ectool must support all prior versions of commands that shipped EC binaries use. BUG=chrome-os-partner:29830 BRANCH=None TEST=Manual With an EC that only supports version 0: - Run 'ectool batterycutoff' -> success - Run 'ectool batterycutoff at-shutdown' -> error with explicit message about at-shutdown not being supported - Run 'ectool batterycutoff foo' -> error, bad parameter With an EC that support version 0 or 1: - Run 'ectool batterycutoff' -> success - Run 'ectool batterycutoff at-shutdown' -> success - Run 'ectool batterycutoff foo' -> error, bad parameter Change-Id: Ifd1d24a37abae259d3f504805267ca1183598b58 Original-Change-Id: Ia88cfc5fa7c5125828ec0595f0b6a505916c97ea Signed-off-by: Dave Parker <dparker@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/205155 Reviewed-by: Vic Yang <victoryang@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/207682 Reviewed-by: Mohammed Habibulla <moch@chromium.org>
-rw-r--r--include/ec_commands.h1
-rw-r--r--util/ectool.c33
2 files changed, 25 insertions, 9 deletions
diff --git a/include/ec_commands.h b/include/ec_commands.h
index 55187cdb93..2e28734ab0 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -1974,7 +1974,6 @@ struct ec_params_charge_control {
* EC_RES_ERROR if the cut off command failed.
*/
#define EC_CMD_BATTERY_CUT_OFF 0x99
-#define EC_VER_BATTERY_CUT_OFF 1
#define EC_BATTERY_CUTOFF_FLAG_AT_SHUTDOWN (1 << 0)
diff --git a/util/ectool.c b/util/ectool.c
index 17a5ad011a..2cbd74e60a 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -3654,20 +3654,36 @@ cmd_error:
int cmd_battery_cut_off(int argc, char *argv[])
{
struct ec_params_battery_cutoff p;
+ int cmd_version;
int rv;
memset(&p, 0, sizeof(p));
- if (argc > 1) {
- if (!strcasecmp(argv[1], "at-shutdown")) {
- p.flags = EC_BATTERY_CUTOFF_FLAG_AT_SHUTDOWN;
- } else {
- fprintf(stderr, "Bad parameter: %s\n", argv[1]);
+ if (ec_cmd_version_supported(EC_CMD_BATTERY_CUT_OFF, 1)) {
+ cmd_version = 1;
+ if (argc > 1) {
+ if (!strcasecmp(argv[1], "at-shutdown")) {
+ p.flags = EC_BATTERY_CUTOFF_FLAG_AT_SHUTDOWN;
+ } else {
+ fprintf(stderr, "Bad parameter: %s\n", argv[1]);
+ return -1;
+ }
+ }
+ } else {
+ /* Fall back to version 0 command */
+ cmd_version = 0;
+ if (argc > 1) {
+ if (!strcasecmp(argv[1], "at-shutdown")) {
+ fprintf(stderr, "Explicit 'at-shutdown' ");
+ fprintf(stderr, "parameter not supported.\n");
+ } else {
+ fprintf(stderr, "Bad parameter: %s\n", argv[1]);
+ }
return -1;
}
}
- rv = ec_command(EC_CMD_BATTERY_CUT_OFF, EC_VER_BATTERY_CUT_OFF,
- &p, sizeof(p), NULL, 0);
+ rv = ec_command(EC_CMD_BATTERY_CUT_OFF, cmd_version, &p, sizeof(p),
+ NULL, 0);
rv = (rv < 0 ? rv : 0);
if (rv < 0) {
@@ -3680,7 +3696,8 @@ int cmd_battery_cut_off(int argc, char *argv[])
printf("\n");
printf("SUCCESS. The battery has arranged a cut-off.\n");
- if (p.flags & EC_BATTERY_CUTOFF_FLAG_AT_SHUTDOWN)
+ if (cmd_version == 1 &&
+ (p.flags & EC_BATTERY_CUTOFF_FLAG_AT_SHUTDOWN))
printf("The battery will be cut off after shutdown.\n");
else
printf("The system should be shutdown immediately.\n");