diff options
author | Dave Parker <dparker@google.com> | 2014-06-21 15:44:27 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-07-15 20:25:36 +0000 |
commit | 53eb6dce2961f403b8e862d9950a6f37d201cbb4 (patch) | |
tree | 2fcb5ecf2a32b714be808c75afa5e074ac91be30 | |
parent | 4702a1d19bef7da427dc05b3675d53b76b0c979b (diff) | |
download | chrome-ec-53eb6dce2961f403b8e862d9950a6f37d201cbb4.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.h | 1 | ||||
-rw-r--r-- | util/ectool.c | 33 |
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"); |