summaryrefslogtreecommitdiff
path: root/common/usbc/usb_prl_sm.c
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@google.com>2020-05-30 12:20:36 -0600
committerCommit Bot <commit-bot@chromium.org>2020-06-11 02:47:30 +0000
commit0ca41341b9bb80b3e640aaa516a16e2096327515 (patch)
tree674ace0f1290cb1327071857912500b403cec09d /common/usbc/usb_prl_sm.c
parent8a834c60790e232db196032eec905f56032c5515 (diff)
downloadchrome-ec-0ca41341b9bb80b3e640aaa516a16e2096327515.tar.gz
tcpmv2: cache analog and collision Rp in CL
Adding update_cc mechanism to keep correct Rp set BUG=b:158291622 BRANCH=none TEST=check Rp value over attach, hard reset and pr-swap Signed-off-by: Denis Brockus <dbrockus@google.com> Change-Id: I369c71e637cbb6a8fc37b434194ce39cc9bf5417 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2232830 Tested-by: Denis Brockus <dbrockus@chromium.org> Reviewed-by: Denis Brockus <dbrockus@chromium.org> Commit-Queue: Denis Brockus <dbrockus@chromium.org> Auto-Submit: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'common/usbc/usb_prl_sm.c')
-rw-r--r--common/usbc/usb_prl_sm.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/common/usbc/usb_prl_sm.c b/common/usbc/usb_prl_sm.c
index 9ddca79416..8585fa93a1 100644
--- a/common/usbc/usb_prl_sm.c
+++ b/common/usbc/usb_prl_sm.c
@@ -483,7 +483,13 @@ static void prl_init(int port)
int i;
const struct sm_ctx cleared = {};
+ /*
+ * flags without PRL_FLAGS_SINK_NG present means we are initially
+ * in SinkTxOK state
+ */
prl_tx[port].flags = 0;
+ if (IS_ENABLED(CONFIG_USB_PD_REV30))
+ typec_select_src_collision_rp(port, SINK_TX_OK);
prl_tx[port].last_xmit_type = TCPC_TX_SOP;
prl_tx[port].xmit_status = TCPC_TX_UNSET;
@@ -757,8 +763,8 @@ static void prl_tx_wait_for_message_request_run(const int port)
if (IS_ENABLED(CONFIG_USB_PD_REV30) && !pe_in_local_ams(port)) {
/* Note PRL_Tx_Src_Sink_Tx is embedded here. */
if (PRL_TX_CHK_FLAG(port, PRL_FLAGS_SINK_NG)) {
- tcpm_select_rp_value(port, SINK_TX_OK);
- tcpm_set_cc(port, TYPEC_CC_RP);
+ typec_select_src_collision_rp(port, SINK_TX_OK);
+ typec_update_cc(port);
}
PRL_TX_CLR_FLAG(port,
PRL_FLAGS_SINK_NG | PRL_FLAGS_WAIT_SINK_OK);
@@ -852,8 +858,8 @@ static void prl_tx_src_source_tx_entry(const int port)
print_current_prl_tx_state(port);
/* Set Rp = SinkTxNG */
- tcpm_select_rp_value(port, SINK_TX_NG);
- tcpm_set_cc(port, TYPEC_CC_RP);
+ typec_select_src_collision_rp(port, SINK_TX_NG);
+ typec_update_cc(port);
}
static void prl_tx_src_source_tx_run(const int port)