From 4b8be2f7786c2cd32eafc895016a721fc8d29074 Mon Sep 17 00:00:00 2001 From: Alec Berg Date: Fri, 5 Dec 2014 20:33:58 -0800 Subject: [PATCH] pd: add hard reset counter to sink hard reset recovery state The new hard reset recovery state was endlessly sending hard resets. Added in hard reset counter to cap the number of hard resets for a sink. BUG=none BRANCH=samus TEST=test with non-PD type-C charger and verify that we only send two hard resets and set the appropriate input current limit after the hard resets. Change-Id: I95a3739be28ad2a5fed245aad021bcd6d51d94b1 Signed-off-by: Alec Berg Reviewed-on: https://chromium-review.googlesource.com/233754 Reviewed-by: Todd Broch Reviewed-by: Vincent Palatin --- common/usb_pd_protocol.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c index 30d729052d..88ef00719d 100644 --- a/common/usb_pd_protocol.c +++ b/common/usb_pd_protocol.c @@ -1938,7 +1938,10 @@ void pd_task(void) set_state_timeout(port, get_time().val + PD_T_SAFE_0V, - PD_STATE_HARD_RESET_SEND); + hard_reset_count < + PD_HARD_RESET_COUNT ? + PD_STATE_HARD_RESET_SEND : + PD_STATE_SNK_DISCOVERY); } if (!pd_snk_is_vbus_provided(port) && @@ -2179,7 +2182,9 @@ void pd_task(void) break; case PD_STATE_HARD_RESET_SEND: #ifdef CONFIG_USB_PD_DUAL_ROLE - if (pd[port].last_state == PD_STATE_SNK_DISCOVERY) + if (pd[port].last_state == PD_STATE_SNK_DISCOVERY || + pd[port].last_state == + PD_STATE_SNK_HARD_RESET_RECOVER) hard_reset_count++; #endif if (pd[port].last_state != pd[port].task_state) {