summaryrefslogtreecommitdiff
path: root/util/ectool.c
diff options
context:
space:
mode:
authorAbe Levkoy <alevkoy@chromium.org>2020-10-15 10:52:50 -0600
committerCommit Bot <commit-bot@chromium.org>2020-10-22 19:38:09 +0000
commite1728abb335acf11e2c9512ae88181a770935850 (patch)
tree75e3d109394193178e2552bf41f0492d44f5db01 /util/ectool.c
parent67645100a8dd165840c65f4bb73343ec1e53300f (diff)
downloadchrome-ec-e1728abb335acf11e2c9512ae88181a770935850.tar.gz
TCPMv2: Add typeccontrol enter-mode subcommand
Define and implement TYPEC_CONTROL_COMMAND_ENTER_MODE. Allow DPM state to be accessed asynchronously by host commands. Add support for this command to ectool. BUG=b:168030639 TEST=Attach DP dongle; discovers but does not enter TEST=ectool typeccontrol 1 2 0; enters DP TEST=Attach TBT dock and TBT active cable; discovers but does not enter TEST=ectool typeccontrol 1 2 1; enters TBT BRANCH=none Change-Id: I218c4b9a92004ef1efe9a27b2a920031961b33f3 Signed-off-by: Abe Levkoy <alevkoy@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2454538 Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'util/ectool.c')
-rw-r--r--util/ectool.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/util/ectool.c b/util/ectool.c
index 3220f3fd98..78f7a89473 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -9479,6 +9479,7 @@ int cmd_pd_write_log(int argc, char *argv[])
int cmd_typec_control(int argc, char *argv[])
{
struct ec_params_typec_control p;
+ long conversion_result;
char *endptr;
int rv;
@@ -9486,9 +9487,13 @@ int cmd_typec_control(int argc, char *argv[])
fprintf(stderr,
"Usage: %s <port> <command> [args]\n"
" <port> is the type-c port to query\n"
- " <type> is one of:\n"
+ " <command> is one of:\n"
" 0: Exit modes\n"
- " 1: Clear events\n", argv[0]);
+ " 1: Clear events\n"
+ " args: <event mask>\n"
+ " 2: Enter mode\n"
+ " args: <0: DP, 1:TBT, 2:USB4>\n",
+ argv[0]);
return -1;
}
@@ -9504,7 +9509,8 @@ int cmd_typec_control(int argc, char *argv[])
return -1;
}
- if (p.command == TYPEC_CONTROL_COMMAND_CLEAR_EVENTS) {
+ switch (p.command) {
+ case TYPEC_CONTROL_COMMAND_CLEAR_EVENTS:
if (argc < 4) {
fprintf(stderr, "Missing event mask\n");
return -1;
@@ -9515,6 +9521,20 @@ int cmd_typec_control(int argc, char *argv[])
fprintf(stderr, "Bad event mask\n");
return -1;
}
+ break;
+ case TYPEC_CONTROL_COMMAND_ENTER_MODE:
+ if (argc < 4) {
+ fprintf(stderr, "Missing mode\n");
+ return -1;
+ }
+
+ conversion_result = strtol(argv[3], &endptr, 0);
+ if ((endptr && *endptr) || conversion_result > UINT8_MAX ||
+ conversion_result < 0) {
+ fprintf(stderr, "Bad mode\n");
+ return -1;
+ }
+ p.mode_to_enter = conversion_result;
}
rv = ec_command(EC_CMD_TYPEC_CONTROL, 0, &p, sizeof(p),