summaryrefslogtreecommitdiff
path: root/common/usbc/usb_pe_ctvpd_sm.c
diff options
context:
space:
mode:
authorJett Rink <jettrink@chromium.org>2019-09-04 09:58:03 -0600
committerCommit Bot <commit-bot@chromium.org>2019-09-05 23:10:18 +0000
commitad2887717164edd1a6b296117a239957f8d48c5e (patch)
treea48d1350ce6a08933121569d04b0328f93e21595 /common/usbc/usb_pe_ctvpd_sm.c
parentdf7ecbc55f4b7d67174a14db9dc781789f07ac60 (diff)
downloadchrome-ec-ad2887717164edd1a6b296117a239957f8d48c5e.tar.gz
usb: clean up statemachine pausing
Remove recursive call for resuming after a pause. Reset the state machine by zero'ing out the statemachine context instead of existing the more recent state (which can have other unintended consequences) BRANCH=none BUG=none TEST=builds, pass units tests Change-Id: I107ad6cf158b84fe201cc80a51ee11f8784e9b24 Signed-off-by: Jett Rink <jettrink@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1783531 Commit-Queue: Denis Brockus <dbrockus@chromium.org> Reviewed-by: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'common/usbc/usb_pe_ctvpd_sm.c')
-rw-r--r--common/usbc/usb_pe_ctvpd_sm.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/common/usbc/usb_pe_ctvpd_sm.c b/common/usbc/usb_pe_ctvpd_sm.c
index 90e22fb78c..f7db231907 100644
--- a/common/usbc/usb_pe_ctvpd_sm.c
+++ b/common/usbc/usb_pe_ctvpd_sm.c
@@ -46,7 +46,10 @@ static void set_state_pe(const int port, enum usb_pe_state new_state)
void pe_init(int port)
{
+ const struct sm_ctx cleared = {};
+
pe[port].flags = 0;
+ pe[port].ctx = cleared;
set_state_pe(port, PE_REQUEST);
}
@@ -55,26 +58,19 @@ void pe_run(int port, int evt, int en)
static enum sm_local_state local_state[CONFIG_USB_PD_PORT_COUNT];
switch (local_state[port]) {
+ case SM_PAUSED:
+ if (!en)
+ break;
+ /* fall through */
case SM_INIT:
pe_init(port);
local_state[port] = SM_RUN;
/* fall through */
case SM_RUN:
- if (!en) {
- /* Exit all states and pause state machine. */
- set_state(port, &pe[port].ctx, NULL);
+ if (en)
+ exe_state(port, &pe[port].ctx);
+ else
local_state[port] = SM_PAUSED;
- break;
- }
-
- exe_state(port, &pe[port].ctx);
- break;
- case SM_PAUSED:
- if (en) {
- /* Restart state machine right now. */
- local_state[port] = SM_INIT;
- pe_run(port, evt, en);
- }
break;
}
}