diff options
author | Abe Levkoy <alevkoy@chromium.org> | 2020-10-15 10:52:50 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-10-22 19:38:09 +0000 |
commit | e1728abb335acf11e2c9512ae88181a770935850 (patch) | |
tree | 75e3d109394193178e2552bf41f0492d44f5db01 /util/ectool.c | |
parent | 67645100a8dd165840c65f4bb73343ec1e53300f (diff) | |
download | chrome-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.c | 26 |
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), |