diff options
author | Abe Levkoy <alevkoy@chromium.org> | 2020-06-03 11:06:53 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-11 19:44:59 +0000 |
commit | b9203fa3b2b032c3aa7b2e3ccfb01dce7eea8f22 (patch) | |
tree | 7969549ba4fdc71e0d4427765543330f8f40df11 /common/usb_pd_policy.c | |
parent | 7b2203f0e45e6dc653aec4bc4c5cd4b72e844b9f (diff) | |
download | chrome-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.c | 18 |
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, |