diff options
author | li feng <li1.feng@intel.com> | 2020-09-19 17:46:19 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-09-23 23:54:09 +0000 |
commit | e7eadea4bf1bbef469e661263ecd3a016e5bd1ad (patch) | |
tree | afa26643df133dc38aa19c17cfb79fac23d1fce9 /common/usb_pd_protocol.c | |
parent | da7a19ba2716dc4420caf8eb62c6f4e6f1bef4cc (diff) | |
download | chrome-ec-e7eadea4bf1bbef469e661263ecd3a016e5bd1ad.tar.gz |
usb_pd: Add common function to get PD revision
Add common function for both TCPMv1 and TCPMv2 to get PD revision
Modify TCPMv1 pd_get_vdo_ver() to get correct cable VDO version
BUG=none
BRANCH=none
TEST=make buildall
Signed-off-by: li feng <li1.feng@intel.com>
Change-Id: I7cc597a45e9581346683b7af54894bffb48d16bd
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2420468
Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
Diffstat (limited to 'common/usb_pd_protocol.c')
-rw-r--r-- | common/usb_pd_protocol.c | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index aed9e4dd86..83d16720d1 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -344,29 +344,32 @@ static inline void set_state_timeout(int port, pd[port].timeout_state = timeout_state; } -#ifdef CONFIG_USB_PD_REV30 -int pd_get_rev(int port) +int pd_get_rev(int port, enum tcpm_transmit_type type) { - return pd[port].rev; -} +#ifdef CONFIG_USB_PD_REV30 + /* TCPMv1 Only stores PD revision for SOP and SOP' types */ + ASSERT(type < NUM_SOP_STAR_TYPES - 1); -int pd_get_vdo_ver(int port, enum tcpm_transmit_type type) -{ if (type == TCPC_TX_SOP_PRIME) return get_usb_pd_cable_revision(port); - return vdo_ver[pd[port].rev]; -} + return pd[port].rev; #else -int pd_get_rev(int port) -{ return PD_REV20; +#endif } + int pd_get_vdo_ver(int port, enum tcpm_transmit_type type) { +#ifdef CONFIG_USB_PD_REV30 + if (type == TCPC_TX_SOP_PRIME) + return vdo_ver[get_usb_pd_cable_revision(port)]; + + return vdo_ver[pd[port].rev]; +#else return VDM_VER10; -} #endif +} /* Return flag for pd state is connected */ int pd_is_connected(int port) @@ -984,7 +987,7 @@ static int send_control(int port, int type) int bit_len; uint16_t header = PD_HEADER(type, pd[port].power_role, pd[port].data_role, pd[port].msg_id, 0, - pd_get_rev(port), 0); + pd_get_rev(port, TCPC_TX_SOP), 0); /* * For PD 3.0, collision avoidance logic needs to know if this message * will begin a new Atomic Message Sequence (AMS) @@ -1022,11 +1025,11 @@ static int send_source_cap(int port, enum ams_seq ams) /* No source capabilities defined, sink only */ header = PD_HEADER(PD_CTRL_REJECT, pd[port].power_role, pd[port].data_role, pd[port].msg_id, 0, - pd_get_rev(port), 0); + pd_get_rev(port, TCPC_TX_SOP), 0); else header = PD_HEADER(PD_DATA_SOURCE_CAP, pd[port].power_role, pd[port].data_role, pd[port].msg_id, src_pdo_cnt, - pd_get_rev(port), 0); + pd_get_rev(port, TCPC_TX_SOP), 0); bit_len = pd_transmit(port, TCPC_TX_SOP, header, src_pdo, ams); if (debug_level >= 2) @@ -1197,7 +1200,7 @@ static void send_sink_cap(int port) int bit_len; uint16_t header = PD_HEADER(PD_DATA_SINK_CAP, pd[port].power_role, pd[port].data_role, pd[port].msg_id, pd_snk_pdo_cnt, - pd_get_rev(port), 0); + pd_get_rev(port, TCPC_TX_SOP), 0); bit_len = pd_transmit(port, TCPC_TX_SOP, header, pd_snk_pdo, AMS_RESPONSE); @@ -1210,7 +1213,7 @@ static int send_request(int port, uint32_t rdo) int bit_len; uint16_t header = PD_HEADER(PD_DATA_REQUEST, pd[port].power_role, pd[port].data_role, pd[port].msg_id, 1, - pd_get_rev(port), 0); + pd_get_rev(port, TCPC_TX_SOP), 0); /* Note: ams will need to be AMS_START if used for PPS keep alive */ bit_len = pd_transmit(port, TCPC_TX_SOP, header, &rdo, AMS_RESPONSE); @@ -1230,7 +1233,7 @@ static int send_bist_cmd(int port) int bit_len; uint16_t header = PD_HEADER(PD_DATA_BIST, pd[port].power_role, pd[port].data_role, pd[port].msg_id, 1, - pd_get_rev(port), 0); + pd_get_rev(port, TCPC_TX_SOP), 0); bit_len = pd_transmit(port, TCPC_TX_SOP, header, &bdo, AMS_START); CPRINTF("C%d BIST>%d\n", port, bit_len); @@ -2172,7 +2175,8 @@ static void exit_tbt_mode_sop_prime(int port) header = PD_HEADER(PD_DATA_VENDOR_DEF, pd[port].power_role, pd[port].data_role, pd[port].msg_id, - (int)pd[port].vdo_count, pd_get_rev(port), 0); + (int)pd[port].vdo_count, + pd_get_rev(port, TCPC_TX_SOP), 0); pd[port].vdo_data[0] = VDO(USB_VID_INTEL, 1, CMD_EXIT_MODE | VDO_OPOS(opos)); @@ -2225,7 +2229,7 @@ static void pd_vdm_send_state_machine(int port) 0, pd[port].msg_id, (int)pd[port].vdo_count, - pd_get_rev(port), + pd_get_rev(port, TCPC_TX_SOP), 0); res = pd_transmit(port, msg_type, header, pd[port].vdo_data, AMS_START); @@ -2249,7 +2253,9 @@ static void pd_vdm_send_state_machine(int port) pd[port].data_role, pd[port].msg_id, (int)pd[port].vdo_count, - pd_get_rev(port), 0); + pd_get_rev + (port, TCPC_TX_SOP), + 0); if ((msg_type == TCPC_TX_SOP_PRIME_PRIME) && IS_ENABLED(CONFIG_USBC_SS_MUX)) { @@ -2269,7 +2275,7 @@ static void pd_vdm_send_state_machine(int port) pd[port].data_role, pd[port].msg_id, (int)pd[port].vdo_count, - pd_get_rev(port), 0); + pd_get_rev(port, TCPC_TX_SOP), 0); res = pd_transmit(port, TCPC_TX_SOP, header, pd[port].vdo_data, AMS_START); } |