summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd Broch <tbroch@chromium.org>2014-09-08 17:18:42 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-09-11 20:00:12 +0000
commitf5b7b3242349aeabe55779541f34133681a96193 (patch)
tree91734c93fbfa7eb2976d5c59447925c59b51ac5d
parent7698c323eae7da62890a7d01447894629d29b22b (diff)
downloadchrome-ec-f5b7b3242349aeabe55779541f34133681a96193.tar.gz
samus: enhance usbpd host command to return port status.
CL provides some useful information similar to the EC console command 'pd state <port>' when host command 'usbpd <port>' is sent from host with no additional arguments. Also added a few build asserts for role & mux strings. BRANCH=none BUG=chrome-os-partner:31690 TEST=manual ectool --interface=lpc --dev=1 usbpd 1 Port C1 is enabled. Role:SNK Polarity:CC1 State:6 # has zinger attached ectool --interface=lpc --dev=1 usbpd 0 Port C0 is enabled. Role:SNK Polarity:CC1 State:2 Change-Id: Id44eb7bf6a6fcfa888a0008a2249601967c50bcc Signed-off-by: Todd Broch <tbroch@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/217138 Reviewed-by: Alec Berg <alecaberg@chromium.org>
-rw-r--r--common/usb_pd_protocol.c7
-rw-r--r--include/ec_commands.h9
-rw-r--r--util/ectool.c20
3 files changed, 31 insertions, 5 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index 55f17a0eb0..161a851519 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -1879,6 +1879,7 @@ DECLARE_CONSOLE_COMMAND(typec, command_typec,
static int hc_usb_pd_control(struct host_cmd_handler_args *args)
{
const struct ec_params_usb_pd_control *p = args->params;
+ struct ec_response_usb_pd_control *r = args->response;
if (p->role != USB_PD_CTRL_ROLE_NO_CHANGE) {
enum pd_dual_role_states role;
@@ -1924,7 +1925,11 @@ static int hc_usb_pd_control(struct host_cmd_handler_args *args)
board_set_usb_mux(p->port, mux, pd_get_polarity(p->port));
}
#endif /* CONFIG_USBC_SS_MUX */
-
+ r->enabled = pd_comm_enabled;
+ r->role = pd[p->port].role;
+ r->polarity = pd[p->port].polarity;
+ r->state = pd[p->port].task_state;
+ args->response_size = sizeof(*r);
return EC_RES_SUCCESS;
}
DECLARE_HOST_COMMAND(EC_CMD_USB_PD_CONTROL,
diff --git a/include/ec_commands.h b/include/ec_commands.h
index 6cbfe4fd4c..4428648511 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -2591,6 +2591,7 @@ enum usb_pd_control_role {
USB_PD_CTRL_ROLE_TOGGLE_OFF = 2,
USB_PD_CTRL_ROLE_FORCE_SINK = 3,
USB_PD_CTRL_ROLE_FORCE_SOURCE = 4,
+ USB_PD_CTRL_ROLE_COUNT
};
enum usb_pd_control_mux {
@@ -2600,6 +2601,7 @@ enum usb_pd_control_mux {
USB_PD_CTRL_MUX_DP = 3,
USB_PD_CTRL_MUX_DOCK = 4,
USB_PD_CTRL_MUX_AUTO = 5,
+ USB_PD_CTRL_MUX_COUNT
};
struct ec_params_usb_pd_control {
@@ -2608,6 +2610,13 @@ struct ec_params_usb_pd_control {
uint8_t mux;
} __packed;
+struct ec_response_usb_pd_control {
+ uint8_t enabled;
+ uint8_t role;
+ uint8_t polarity;
+ uint8_t state;
+} __packed;
+
/* Write USB-PD device FW */
#define EC_CMD_USB_PD_FW_UPDATE 0x110
diff --git a/util/ectool.c b/util/ectool.c
index 822a418260..e816a7828b 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -23,6 +23,7 @@
#include "misc_util.h"
#include "panic.h"
#include "sha1.h"
+#include "usb_pd.h"
/* Command line options */
enum {
@@ -2621,17 +2622,21 @@ int cmd_usb_mux(int argc, char *argv[])
int cmd_usb_pd(int argc, char *argv[])
{
const char *role_str[] = {"", "toggle", "toggle-off", "sink", "source"};
- const char *mux_str[] = {"", "none", "usb", "dp", "dock"};
+ const char *mux_str[] = {"", "none", "usb", "dp", "dock", "auto"};
struct ec_params_usb_pd_control p;
+ struct ec_response_usb_pd_control *r =
+ (struct ec_response_usb_pd_control *)ec_inbuf;
int rv, i, j;
int option_ok;
char *e;
+ BUILD_ASSERT(ARRAY_SIZE(role_str) == USB_PD_CTRL_ROLE_COUNT);
+ BUILD_ASSERT(ARRAY_SIZE(mux_str) == USB_PD_CTRL_MUX_COUNT);
p.role = USB_PD_CTRL_ROLE_NO_CHANGE;
p.mux = USB_PD_CTRL_MUX_NO_CHANGE;
- if (argc <= 2) {
- fprintf(stderr, "No option specified.\n");
+ if (argc < 2) {
+ fprintf(stderr, "No port specified.\n");
return -1;
}
@@ -2688,7 +2693,14 @@ int cmd_usb_pd(int argc, char *argv[])
}
}
- rv = ec_command(EC_CMD_USB_PD_CONTROL, 0, &p, sizeof(p), NULL, 0);
+ rv = ec_command(EC_CMD_USB_PD_CONTROL, 0, &p, sizeof(p),
+ ec_inbuf, ec_max_insize);
+
+ if ((rv >= 0) && (argc == 2))
+ printf("Port C%d is %sabled, Role:%s Polarity:CC%d State:%d\n",
+ p.port, (r->enabled) ? "en" : "dis",
+ r->role == PD_ROLE_SOURCE ? "SRC" : "SNK",
+ r->polarity + 1, r->state);
return (rv < 0 ? rv : 0);
}