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 /common/charge_manager.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 'common/charge_manager.c')
-rw-r--r-- | common/charge_manager.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/common/charge_manager.c b/common/charge_manager.c index 7e80ca02f4..ba0afd5958 100644 --- a/common/charge_manager.c +++ b/common/charge_manager.c @@ -348,7 +348,30 @@ DECLARE_HOST_COMMAND(EC_CMD_USB_PD_POWER_INFO, EC_VER_MASK(0)); #endif /* TEST_CHARGE_MANAGER */ -static int command_charge_override(int argc, char **argv) +static int hc_charge_port_override(struct host_cmd_handler_args *args) +{ + const struct ec_params_charge_port_override *p = args->params; + const int16_t override_port = p->override_port; + + if (override_port < OVERRIDE_DONT_CHARGE || + override_port >= PD_PORT_COUNT) + return EC_RES_INVALID_PARAM; + + if (override_port >= 0 && pd_get_role(override_port) != PD_ROLE_SINK) + /* + * TODO(crosbug.com/p/31195): Switch dual-role ports + * from source to sink. + */ + return EC_RES_ERROR; + + charge_manager_set_override(override_port); + return EC_RES_SUCCESS; +} +DECLARE_HOST_COMMAND(EC_CMD_PD_CHARGE_PORT_OVERRIDE, + hc_charge_port_override, + EC_VER_MASK(0)); + +static int command_charge_port_override(int argc, char **argv) { int port = OVERRIDE_OFF; char *e; @@ -359,11 +382,18 @@ static int command_charge_override(int argc, char **argv) return EC_ERROR_PARAM1; } + if (port >= 0 && pd_get_role(override_port) != PD_ROLE_SINK) + /* + * TODO(crosbug.com/p/31195): Switch dual-role ports + * from source to sink. + */ + return EC_ERROR_PARAM1; + charge_manager_set_override(port); ccprintf("Set override: %d\n", port); return EC_SUCCESS; } -DECLARE_CONSOLE_COMMAND(chargeoverride, command_charge_override, +DECLARE_CONSOLE_COMMAND(chgoverride, command_charge_port_override, "[port | -1 | -2]", "Force charging from a given port (-1 = off, -2 = disable charging)", NULL); |