summaryrefslogtreecommitdiff
path: root/common/usb_pd_policy.c
diff options
context:
space:
mode:
authorAbe Levkoy <alevkoy@chromium.org>2020-06-03 11:06:53 -0600
committerCommit Bot <commit-bot@chromium.org>2020-06-11 19:44:59 +0000
commitb9203fa3b2b032c3aa7b2e3ccfb01dce7eea8f22 (patch)
tree7969549ba4fdc71e0d4427765543330f8f40df11 /common/usb_pd_policy.c
parent7b2203f0e45e6dc653aec4bc4c5cd4b72e844b9f (diff)
downloadchrome-ec-b9203fa3b2b032c3aa7b2e3ccfb01dce7eea8f22.tar.gz
TCPMv2: Support mode entry for SOP' and SOP''
Add a transmit type parameter to functions involved in mode entry; also add such a parameter to various functions calling those functions. For DisplayPort-specific definitions or calls, specify SOP; we do not currently support DisplayPort mode for cable plugs. For TCPMv1-specific code, specify SOP. TCPMv1 generally assumes that the discovery/mode structures are 1-dimensional, as they were previously, and changing that is outside the scope of this CL. BUG=b:155890173 TEST=Enter DP mode on Volteer with TCPMv2 TEST=Enter DP mode on Volteer with TCPMv1 TEST=Enter TBT mode on Volteer with TCPMV1 BRANCH=none Change-Id: I8afc75b3f3be8939c4645058ac4a31f24c88fb9e Signed-off-by: Abe Levkoy <alevkoy@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2229279 Reviewed-by: Diana Z <dzigterman@chromium.org> Commit-Queue: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'common/usb_pd_policy.c')
-rw-r--r--common/usb_pd_policy.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c
index 0d468b0ce8..b10b9cb8c7 100644
--- a/common/usb_pd_policy.c
+++ b/common/usb_pd_policy.c
@@ -206,6 +206,7 @@ void disable_enter_usb4_mode(int port)
#ifdef CONFIG_USB_PD_ALT_MODE_DFP
static struct pd_discovery discovery[CONFIG_USB_PD_PORT_MAX_COUNT];
+static struct partner_active_modes partner_amodes[CONFIG_USB_PD_PORT_MAX_COUNT];
static bool is_tbt_compat_enabled(int port)
{
@@ -331,6 +332,7 @@ static bool is_cable_ready_to_enter_usb4(int port, int cnt)
void pd_dfp_discovery_init(int port)
{
memset(&discovery[port], 0, sizeof(struct pd_discovery));
+ memset(&partner_amodes[port], 0, sizeof(partner_amodes[0]));
}
static int dfp_discover_ident(uint32_t *payload)
@@ -354,6 +356,13 @@ struct pd_discovery *pd_get_am_discovery(int port, enum tcpm_transmit_type type)
return &discovery[port];
}
+struct partner_active_modes *pd_get_partner_active_modes(int port,
+ enum tcpm_transmit_type type)
+{
+ assert(type < AMODE_TYPE_COUNT);
+ return &partner_amodes[port];
+}
+
/* Note: Enter mode flag is not needed by TCPMv1 */
void pd_set_dfp_enter_mode_flag(int port, bool set)
{
@@ -656,7 +665,8 @@ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload,
#ifdef CONFIG_USB_PD_ALT_MODE_DFP
struct svdm_amode_data *modep;
- modep = pd_get_amode_data(port, PD_VDO_VID(payload[0]));
+ modep = pd_get_amode_data(port, TCPC_TX_SOP,
+ PD_VDO_VID(payload[0]));
#endif
switch (cmd) {
#ifdef CONFIG_USB_PD_ALT_MODE_DFP
@@ -705,7 +715,8 @@ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload,
* SVID.
*/
disable_tbt_compat_mode(port);
- payload[0] = pd_dfp_enter_mode(port, 0, 0);
+ payload[0] = pd_dfp_enter_mode(port,
+ TCPC_TX_SOP, 0, 0);
if (payload[0])
rsize = 1;
}
@@ -722,7 +733,8 @@ int pd_svdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload,
rsize = 0;
} else {
if (!modep->opos)
- pd_dfp_enter_mode(port, 0, 0);
+ pd_dfp_enter_mode(port, TCPC_TX_SOP, 0,
+ 0);
if (modep->opos) {
rsize = modep->fx->status(port,