summaryrefslogtreecommitdiff
path: root/board/servo_v4/usb_pd_policy.c
diff options
context:
space:
mode:
authorWai-Hong Tam <waihong@google.com>2019-06-28 14:59:26 -0700
committerCommit Bot <commit-bot@chromium.org>2019-07-20 03:17:02 +0000
commit7d29ac01ea9c3a6ac3aba2dcace88ca43e2d8201 (patch)
treee6bb1b53de087448944cc0f850d1a6dd4afa46e0 /board/servo_v4/usb_pd_policy.c
parentb1d81401eebb4444123cacac08e88ef6e38ee58d (diff)
downloadchrome-ec-7d29ac01ea9c3a6ac3aba2dcace88ca43e2d8201.tar.gz
servo_v4: Support sink roles with PD comm enabled
For the normal lab use, emulating a sink has no PD comm, like a passive hub. For the PD FAFT use, we need to validate some PD behavior, should support sink roles with PD comm enabled. Two new roles "pdsnk" and "pdsnkdts" are introduced. BRANCH=servo BUG=b:134700685 TEST=Typed "cc pdsnk" or "cc pdsnkdts" can transit the DUT port to the PD state "SNK_READY", instead "SNK_DISCOVERY". Change-Id: If6a7c39cd296986b8b28de1c1fbe66ee8438c709 Signed-off-by: Wai-Hong Tam <waihong@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1682920 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'board/servo_v4/usb_pd_policy.c')
-rw-r--r--board/servo_v4/usb_pd_policy.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c
index ec127c734f..b4746628f9 100644
--- a/board/servo_v4/usb_pd_policy.c
+++ b/board/servo_v4/usb_pd_policy.c
@@ -39,6 +39,9 @@
CC_ENABLE_DRP)
#define CONFIG_SNK(c) CONFIG_SET_CLEAR(c, \
CC_DISABLE_DTS, \
+ CC_ALLOW_SRC | CC_ENABLE_DRP | CC_SNK_WITH_PD)
+#define CONFIG_PDSNK(c) CONFIG_SET_CLEAR(c, \
+ CC_DISABLE_DTS | CC_SNK_WITH_PD, \
CC_ALLOW_SRC | CC_ENABLE_DRP)
#define CONFIG_DRP(c) CONFIG_SET_CLEAR(c, \
CC_DISABLE_DTS | CC_ALLOW_SRC | CC_ENABLE_DRP, \
@@ -48,6 +51,10 @@
CC_ENABLE_DRP | CC_DISABLE_DTS)
#define CONFIG_SNKDTS(c) CONFIG_SET_CLEAR(c, \
0, \
+ CC_ALLOW_SRC | CC_ENABLE_DRP | \
+ CC_DISABLE_DTS | CC_SNK_WITH_PD)
+#define CONFIG_PDSNKDTS(c) CONFIG_SET_CLEAR(c, \
+ CC_SNK_WITH_PD, \
CC_ALLOW_SRC | CC_ENABLE_DRP | CC_DISABLE_DTS)
#define CONFIG_DRPDTS(c) CONFIG_SET_CLEAR(c, \
CC_ALLOW_SRC | CC_ENABLE_DRP, \
@@ -794,7 +801,17 @@ static void do_cc(int cc_config_new)
*/
if (dualrole != PD_DRP_TOGGLE_ON)
pd_set_host_mode(DUT, chargeable);
- pd_comm_enable(DUT, chargeable);
+
+ /*
+ * For the normal lab use, emulating a sink has no PD
+ * comm, like a passive hub. For the PD FAFT use, we
+ * need to validate some PD behavior, so a flag
+ * CC_SNK_WITH_PD to force enabling PD comm.
+ */
+ if (cc_config & CC_SNK_WITH_PD)
+ pd_comm_enable(DUT, 1);
+ else
+ pd_comm_enable(DUT, chargeable);
}
}
}
@@ -818,12 +835,16 @@ static int command_cc(int argc, char **argv)
cc_config_new = CONFIG_SRC(cc_config_new);
else if (!strcasecmp(argv[1], "snk"))
cc_config_new = CONFIG_SNK(cc_config_new);
+ else if (!strcasecmp(argv[1], "pdsnk"))
+ cc_config_new = CONFIG_PDSNK(cc_config_new);
else if (!strcasecmp(argv[1], "drp"))
cc_config_new = CONFIG_DRP(cc_config_new);
else if (!strcasecmp(argv[1], "srcdts"))
cc_config_new = CONFIG_SRCDTS(cc_config_new);
else if (!strcasecmp(argv[1], "snkdts"))
cc_config_new = CONFIG_SNKDTS(cc_config_new);
+ else if (!strcasecmp(argv[1], "pdsnkdts"))
+ cc_config_new = CONFIG_PDSNKDTS(cc_config_new);
else if (!strcasecmp(argv[1], "drpdts"))
cc_config_new = CONFIG_DRPDTS(cc_config_new);
else
@@ -836,7 +857,8 @@ static int command_cc(int argc, char **argv)
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(cc, command_cc,
- "[off|on|src|snk|drp|srcdts|snkdts|drpdts]",
+ "[off|on|src|snk|pdsnk|drp|srcdts|snkdts|pdsnkdts|"
+ "drpdts]",
"Servo_v4 DTS and CHG mode");
static void fake_disconnect_end(void)