diff options
author | Shawn Nematbakhsh <shawnn@chromium.org> | 2014-11-19 15:58:30 -0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-11-20 02:55:41 +0000 |
commit | b3bf2a61a385bf9aee3b231b1a0051d9ea349811 (patch) | |
tree | 5cad03b32da38ea1140253fc3b1724026e20c2d7 /util/ectool.c | |
parent | d5803a02693f72a80da64193a729a71ac585df6b (diff) | |
download | chrome-ec-b3bf2a61a385bf9aee3b231b1a0051d9ea349811.tar.gz |
charge_manager: Add PD_CHARGE_PORT_OVERRIDE host command
Add host command to set charge port override.
BUG=chrome-os-partner:32003
BRANCH=Samus
TEST=Manual on Samus. Insert PD charger in port1 and BC1.2 charger in
port0.
./ectool --name=cros_pd chargeoverride 0 --> Charges from port 0
./ectool --name=cros_pd chargeoverride off --> Charges from port 1
./ectool --name=cros_pd chargeoverride dontcharge --> No charge port
./ectool --name=cros_pd chargeoverride 1 --> Charges from port 1
./ectool --name=cros_pd chargeoverride 2 --> Correctly returns error
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Change-Id: Ib35f797a4a24e96fd2e3c008ace3fd6291b89d25
Reviewed-on: https://chromium-review.googlesource.com/230910
Reviewed-by: Alec Berg <alecaberg@chromium.org>
Diffstat (limited to 'util/ectool.c')
-rw-r--r-- | util/ectool.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/util/ectool.c b/util/ectool.c index 0222720d00..9901358b5d 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -60,6 +60,8 @@ const char help_str[] = " Set the maximum battery charging current\n" " chargecontrol\n" " Force the battery to stop charging or discharge\n" + " chargeoverride\n" + " Overrides charge port selection logic\n" " chargestate\n" " Handle commands related to charge state v2 (and later)\n" " chipinfo\n" @@ -5159,6 +5161,39 @@ int cmd_force_lid_open(int argc, char *argv[]) return 0; } +int cmd_charge_port_override(int argc, char *argv[]) +{ + struct ec_params_charge_port_override p; + char *e; + int rv; + + if (argc < 2) { + fprintf(stderr, "Usage: %s <port# | dontcharge | off>\n", + argv[0]); + return -1; + } + + if (!strcasecmp(argv[1], "dontcharge")) + p.override_port = OVERRIDE_DONT_CHARGE; + else if (!strcasecmp(argv[1], "off")) + p.override_port = OVERRIDE_OFF; + else { + p.override_port = strtol(argv[1], &e, 0); + if (e && *e) { + fprintf(stderr, "Bad parameter.\n"); + return -1; + } + } + + rv = ec_command(EC_CMD_PD_CHARGE_PORT_OVERRIDE, 0, &p, sizeof(p), + NULL, 0); + if (rv < 0) + return rv; + + printf("Override port set to %d\n", p.override_port); + return 0; +} + /* NULL-terminated list of commands */ const struct command commands[] = { {"extpwrcurrentlimit", cmd_ext_power_current_limit}, @@ -5170,6 +5205,7 @@ const struct command commands[] = { {"boardversion", cmd_board_version}, {"chargecurrentlimit", cmd_charge_current_limit}, {"chargecontrol", cmd_charge_control}, + {"chargeoverride", cmd_charge_port_override}, {"chargestate", cmd_charge_state}, {"chipinfo", cmd_chipinfo}, {"cmdversions", cmd_cmdversions}, |