summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2015-01-20 21:16:05 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-01-30 03:28:25 +0000
commitfab110efe4f57e1a1a5f18119c5f65c551e01813 (patch)
tree91963c8410b07fcfbd75292d807365cbea4118a7
parent3e4541d479cef2ffce8362c5f28184e55e0a1375 (diff)
downloadchrome-ec-fab110efe4f57e1a1a5f18119c5f65c551e01813.tar.gz
pd: export the data role to the AP
For dual-role USB ports (host/device), let the AP know whether we are currently DFP (USB host) or UFP (USB device) by exporting the data role in addition to the power role in the EC_CMD_USB_PD_CONTROL response. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=samus BUG=none TEST=ectool --name=cros_pd usbpd 0 plug various accessories on the port and see properly "SRC DFP" for the USB key, "SNK DFP" for the power supply and "SNK UFP" for a regular C-to-A charging cable. Reviewed-on: https://chromium-review.googlesource.com/242012 Reviewed-by: Alec Berg <alecaberg@chromium.org> Trybot-Ready: Vincent Palatin <vpalatin@chromium.org> Tested-by: Vincent Palatin <vpalatin@chromium.org> Commit-Queue: Vincent Palatin <vpalatin@chromium.org> (cherry picked from commit 9e07dfb6cb7391844dfd56ba856b30329318f05e) Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Original-Change-Id: I292da15fa8cf3566109dd05995ef1d00bed6f92d Reviewed-on: https://chromium-review.googlesource.com/242128 Tested-by: Duncan Laurie <dlaurie@chromium.org> Commit-Queue: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Duncan Laurie <dlaurie@chromium.org> (cherry picked from commit 2808539c0ff1aa4ac693b85bcef70aa23a9e1cd5) Signed-off-by: Todd Broch <tbroch@chromium.org> Change-Id: I8ccad1109b03a202c6bc0c43121f5f9a7f381759 Reviewed-on: https://chromium-review.googlesource.com/244228 Reviewed-by: Alec Berg <alecaberg@chromium.org> Tested-by: Todd Broch <tbroch@chromium.org> Commit-Queue: Todd Broch <tbroch@chromium.org>
-rw-r--r--common/usb_pd_protocol.c3
-rw-r--r--include/ec_commands.h2
-rw-r--r--util/ectool.c7
3 files changed, 7 insertions, 5 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index 76d08be20f..e1890ddb2d 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -3213,7 +3213,8 @@ static int hc_usb_pd_control(struct host_cmd_handler_args *args)
args->response_size = sizeof(*r);
} else {
r_v1->enabled = pd_comm_enabled;
- r_v1->role = pd[p->port].power_role;
+ r_v1->role = pd[p->port].power_role |
+ (pd[p->port].data_role << 1);
r_v1->polarity = pd[p->port].polarity;
strzcpy(r_v1->state,
pd_state_names[pd[p->port].task_state],
diff --git a/include/ec_commands.h b/include/ec_commands.h
index 1c4efdfdcc..18e9e454f7 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -2741,7 +2741,7 @@ struct ec_response_usb_pd_control {
struct ec_response_usb_pd_control_v1 {
uint8_t enabled;
- uint8_t role;
+ uint8_t role; /* [0] power: 0=SNK/1=SRC [1] data: 0=UFP/1=DFP */
uint8_t polarity;
char state[32];
} __packed;
diff --git a/util/ectool.c b/util/ectool.c
index 2062ac7888..52b9eedf31 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -3136,9 +3136,10 @@ int cmd_usb_pd(int argc, char *argv[])
r->role == PD_ROLE_SOURCE ? "SRC" : "SNK",
r->polarity + 1, r->state);
} else {
- printf("Port C%d is %sabled, Role:%s Polarity:CC%d State:%s\n",
- p.port, (r_v1->enabled) ? "en" : "dis",
- r_v1->role == PD_ROLE_SOURCE ? "SRC" : "SNK",
+ printf("Port C%d is %s, Role:%s %s Polarity:CC%d State:%s\n",
+ p.port, (r_v1->enabled) ? "enabled" : "disabled",
+ r_v1->role & PD_ROLE_SOURCE ? "SRC" : "SNK",
+ r_v1->role & (PD_ROLE_DFP << 1) ? "DFP" : "UFP",
r_v1->polarity + 1, r_v1->state);
}
return (rv < 0 ? rv : 0);