diff options
author | Denis Brockus <dbrockus@google.com> | 2021-02-17 16:09:29 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-03-02 00:12:20 +0000 |
commit | a4d04c52b68ba1a38c7b77e5c4a6ed2415391b05 (patch) | |
tree | e283bbdf9a9fa797555e48f62ccd3f74e5609e77 /common/usbc/usb_tc_drp_acc_trysrc_sm.c | |
parent | 6e6dd4f867b68d7bbd2f89c839cfb6d12a910f83 (diff) | |
download | chrome-ec-a4d04c52b68ba1a38c7b77e5c4a6ed2415391b05.tar.gz |
TCPMv2: PD Timers - Add TC PDDebounce to framework
BUG=b:178029034
BRANCH=none
TEST=make runtests
Signed-off-by: Denis Brockus <dbrockus@google.com>
Change-Id: I1a27ff33162e81fd7c328681ff823ab580d4d76b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2707811
Commit-Queue: Denis Brockus <dbrockus@chromium.org>
Tested-by: Denis Brockus <dbrockus@chromium.org>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'common/usbc/usb_tc_drp_acc_trysrc_sm.c')
-rw-r--r-- | common/usbc/usb_tc_drp_acc_trysrc_sm.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c index 3fa3c0e143..d284beff4e 100644 --- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c +++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c @@ -404,12 +404,6 @@ static struct type_c { uint32_t flags; /* Time a port shall wait before it can determine it is attached */ uint64_t cc_debounce; - /* - * Time a Sink port shall wait before it can determine it is detached - * due to the potential for USB PD signaling on CC as described in - * the state definitions. - */ - uint64_t pd_debounce; #ifdef CONFIG_USB_PD_TRY_SRC /* * Time a port shall wait before it can determine it is @@ -2278,7 +2272,7 @@ static void tc_attach_wait_snk_run(const int port) /* Debounce the cc state */ if (new_cc_state != tc[port].cc_state) { tc[port].cc_debounce = get_time().val + PD_T_CC_DEBOUNCE; - tc[port].pd_debounce = get_time().val + PD_T_PD_DEBOUNCE; + pd_timer_enable(port, TC_TIMER_PD_DEBOUNCE, PD_T_PD_DEBOUNCE); tc[port].cc_state = new_cc_state; return; } @@ -2290,7 +2284,7 @@ static void tc_attach_wait_snk_run(const int port) * Unattached.SNK. */ if (new_cc_state == PD_CC_NONE && - get_time().val > tc[port].pd_debounce) { + pd_timer_is_expired(port, TC_TIMER_PD_DEBOUNCE)) { /* We are detached */ if (drp_state[port] == PD_DRP_TOGGLE_OFF || drp_state[port] == PD_DRP_FREEZE @@ -2341,6 +2335,11 @@ static void tc_attach_wait_snk_run(const int port) } } +static void tc_attach_wait_snk_exit(const int port) +{ + pd_timer_disable(port, TC_TIMER_PD_DEBOUNCE); +} + /** * Attached.SNK, shared with Debug Accessory.SNK */ @@ -3387,15 +3386,15 @@ static void tc_try_wait_snk_run(const int port) /* Debounce the cc state */ if (new_cc_state != tc[port].cc_state) { tc[port].cc_state = new_cc_state; - tc[port].pd_debounce = get_time().val + PD_T_PD_DEBOUNCE; + pd_timer_enable(port, TC_TIMER_PD_DEBOUNCE, PD_T_PD_DEBOUNCE); } /* * The port shall transition to Unattached.SNK when the state of both * of the CC1 and CC2 pins is SNK.Open for at least tPDDebounce. */ - if ((get_time().val > tc[port].pd_debounce) && - (new_cc_state == PD_CC_NONE)) { + if (new_cc_state == PD_CC_NONE && + pd_timer_is_expired(port, TC_TIMER_PD_DEBOUNCE)) { set_state_tc(port, TC_UNATTACHED_SNK); return; } @@ -3408,6 +3407,11 @@ static void tc_try_wait_snk_run(const int port) pd_is_vbus_present(port)) set_state_tc(port, TC_ATTACHED_SNK); } + +static void tc_try_wait_snk_exit(const int port) +{ + pd_timer_disable(port, TC_TIMER_PD_DEBOUNCE); +} #endif /* @@ -3838,6 +3842,7 @@ static __const_data const struct usb_state tc_states[] = { [TC_ATTACH_WAIT_SNK] = { .entry = tc_attach_wait_snk_entry, .run = tc_attach_wait_snk_run, + .exit = tc_attach_wait_snk_exit, .parent = &tc_states[TC_CC_RD], }, [TC_ATTACHED_SNK] = { @@ -3870,6 +3875,7 @@ static __const_data const struct usb_state tc_states[] = { [TC_TRY_WAIT_SNK] = { .entry = tc_try_wait_snk_entry, .run = tc_try_wait_snk_run, + .exit = tc_try_wait_snk_exit, .parent = &tc_states[TC_CC_RD], }, #endif /* CONFIG_USB_PD_TRY_SRC */ |