From 0df89000a5bcfc8307a3f8bc85b0fdbe6653da6c Mon Sep 17 00:00:00 2001 From: Vincent Palatin Date: Fri, 17 Apr 2015 09:43:33 -0700 Subject: pd: add a connection flag to pd port info for host Export what the PD protocol stack thinks about the port connection state. This simplifies getting a meaningful data role/power role from the host (eg we are not really a UFP if we are simply dual-role toggling but not connected). Do not increment the command version as this is mostly backward-compatible and currently no client actually uses that field. Signed-off-by: Vincent Palatin BRANCH=samus BUG=none TEST=ectool --name=cros_pd usbpd 0 plug and unplug various accessories on the port and check the result. Change-Id: Ief3e0d47b6a288bcfc5b8fbb8156f29fd09dd336 Reviewed-on: https://chromium-review.googlesource.com/266120 Trybot-Ready: Vincent Palatin Reviewed-by: Alec Berg Reviewed-by: Benson Leung Commit-Queue: Vincent Palatin Tested-by: Vincent Palatin --- common/usb_pd_protocol.c | 3 ++- include/ec_commands.h | 2 +- util/ectool.c | 5 +++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index 0438fb7229..803f1a615e 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -3431,7 +3431,8 @@ static int hc_usb_pd_control(struct host_cmd_handler_args *args) r->state = pd[p->port].task_state; args->response_size = sizeof(*r); } else { - r_v1->enabled = pd_comm_enabled; + r_v1->enabled = pd_comm_enabled | + (pd_is_connected(p->port) << 1); r_v1->role = pd[p->port].power_role | (pd[p->port].data_role << 1); r_v1->polarity = pd[p->port].polarity; diff --git a/include/ec_commands.h b/include/ec_commands.h index 8210dd858a..ef7836d40c 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -2885,7 +2885,7 @@ struct ec_response_usb_pd_control { } __packed; struct ec_response_usb_pd_control_v1 { - uint8_t enabled; + uint8_t enabled; /* [0] comm enabled [1] connected */ uint8_t role; /* [0] power: 0=SNK/1=SRC [1] data: 0=UFP/1=DFP */ uint8_t polarity; char state[32]; diff --git a/util/ectool.c b/util/ectool.c index d7e3cf6907..b173d7ad19 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -3710,8 +3710,9 @@ 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 %s, Role:%s %s Polarity:CC%d State:%s\n", - p.port, (r_v1->enabled) ? "enabled" : "disabled", + printf("Port C%d is %s,%s, Role:%s %s Polarity:CC%d State:%s\n", + p.port, (r_v1->enabled & 1) ? "enabled" : "disabled", + (r_v1->enabled & 2) ? "connected" : "disconnected", r_v1->role & PD_ROLE_SOURCE ? "SRC" : "SNK", r_v1->role & (PD_ROLE_DFP << 1) ? "DFP" : "UFP", r_v1->polarity + 1, r_v1->state); -- cgit v1.2.1