summaryrefslogtreecommitdiff
path: root/util/ectool.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/ectool.c')
-rw-r--r--util/ectool.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/util/ectool.c b/util/ectool.c
index de1b378fdc..cb7e7e904e 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -876,7 +876,7 @@ static int in_gfu_mode(int *opos, int port)
}
}
- return r->active && (r->opos == *opos);
+ return r->opos == *opos;
}
/**
@@ -905,6 +905,7 @@ static int enter_gfu_mode(int port)
p->port = port;
p->svid = USB_VID_GOOGLE;
p->opos = opos;
+ p->cmd = PD_ENTER_MODE;
ec_command(EC_CMD_USB_PD_SET_AMODE, 0, p, sizeof(*p),
NULL, 0);
@@ -1113,8 +1114,9 @@ int cmd_pd_set_amode(int argc, char *argv[])
struct ec_params_usb_pd_set_mode_request *p =
(struct ec_params_usb_pd_set_mode_request *)ec_outbuf;
- if (argc < 4) {
- fprintf(stderr, "Usage: %s <port> <svid> <opos>\n", argv[0]);
+ if (argc < 5) {
+ fprintf(stderr, "Usage: %s <port> <svid> <opos> <cmd>\n",
+ argv[0]);
return -1;
}
@@ -1125,17 +1127,22 @@ int cmd_pd_set_amode(int argc, char *argv[])
}
p->svid = strtol(argv[2], &e, 0);
- if (e && *e) {
+ if ((e && *e) || !p->svid) {
fprintf(stderr, "Bad svid\n");
return -1;
}
p->opos = strtol(argv[3], &e, 0);
- if (e && *e) {
- fprintf(stderr, "Bad mode\n");
+ if ((e && *e) || !p->opos) {
+ fprintf(stderr, "Bad opos\n");
return -1;
}
+ p->cmd = strtol(argv[4], &e, 0);
+ if ((e && *e) || (p->cmd >= PD_MODE_CMD_COUNT)) {
+ fprintf(stderr, "Bad cmd\n");
+ return -1;
+ }
return ec_command(EC_CMD_USB_PD_SET_AMODE, 0, p, sizeof(*p), NULL, 0);
}
@@ -1165,10 +1172,10 @@ int cmd_pd_get_amode(int argc, char *argv[])
ec_inbuf, ec_max_insize);
if (!r->svid)
break;
- printf("%cSVID:0x%04x ", (r->active) ? '*' : ' ',
+ printf("%cSVID:0x%04x ", (r->opos) ? '*' : ' ',
r->svid);
for (i = 0; i < PDO_MODES; i++) {
- printf("%c0x%08x ", (r->active && (r->opos == i + 1)) ?
+ printf("%c0x%08x ", (r->opos && (r->opos == i + 1)) ?
'*' : ' ', r->vdo[i]);
}
printf("\n");