summaryrefslogtreecommitdiff
path: root/board/servo_v4/board.c
diff options
context:
space:
mode:
authorWai-Hong Tam <waihong@google.com>2019-06-14 13:38:01 -0700
committerCommit Bot <commit-bot@chromium.org>2019-06-18 15:22:42 +0000
commite467b21013cf120ce9167bfb6b6e61ccfa258129 (patch)
tree9bd52ce3d6cc0a2bfe3902cb97c1c8194f10057d /board/servo_v4/board.c
parent3a44908beda662eb7bdf5a7b877c7dadbc8b6d50 (diff)
downloadchrome-ec-e467b21013cf120ce9167bfb6b6e61ccfa258129.tar.gz
servo_v4: Enable VBUS detection interrupts to wake PD tasks fast enough
It fixes a hard reset issue. After a hard reset, the PD state goes to SNK_HARD_RESET_RECOVER state and waits for the VBUS "off" and then back "on" again. When the VBUS goes back to "on", it then transits to SNK_DISCOVERY state that replies the Source_Cap message. In order to make the VBUS detection fast enough, these interrupts are needed to wake the PD tasks up; otherwise, it missed the Source_Cap message BUG=b:134701032 BRANCH=servo TEST=Made servo v4 as sink and issued Hard_Reset on either DUT or servo. 2019-06-14 13:55:04 > cc snk 2019-06-14 13:55:06 cc: on 2019-06-14 13:55:06 dts mode: off 2019-06-14 13:55:06 chg mode: off 2019-06-14 13:55:06 chg allowed: off 2019-06-14 13:55:06 > C1 st3 SNK_DISCONNECTED_DEBOUNCE 2019-06-14 13:55:06 C1 st5 SNK_DISCOVERY 2019-06-14 13:55:06 C1 Req [1] 5000mV 3000mA 2019-06-14 13:55:06 C1 st6 SNK_REQUESTED 2019-06-14 13:55:06 C1 st7 SNK_TRANSITION 2019-06-14 13:55:06 C1 st8 SNK_READY 2019-06-14 13:55:07 2019-06-14 13:55:07 > pd 1 hard 2019-06-14 13:55:16 C1 st34 HARD_RESET_SEND 2019-06-14 13:55:16 > C1 st35 HARD_RESET_EXECUTE 2019-06-14 13:55:16 C1 HARD RST TX 2019-06-14 13:55:16 C1 st4 SNK_HARD_RESET_RECOVER 2019-06-14 13:55:16 Repeat msg_id[0] port[1] 2019-06-14 13:55:16 Repeat msg_id[0] port[1] 2019-06-14 13:55:16 Repeat msg_id[0] port[1] 2019-06-14 13:55:16 C1 st5 SNK_DISCOVERY 2019-06-14 13:55:16 Repeat msg_id[0] port[1] 2019-06-14 13:55:16 C1 HARD RST RX 2019-06-14 13:55:16 C1 st4 SNK_HARD_RESET_RECOVER 2019-06-14 13:55:17 C1 st5 SNK_DISCOVERY 2019-06-14 13:55:17 C1 Req [1] 5000mV 3000mA 2019-06-14 13:55:17 C1 st6 SNK_REQUESTED 2019-06-14 13:55:17 C1 st7 SNK_TRANSITION 2019-06-14 13:55:18 C1 st8 SNK_READY 2019-06-14 13:55:18 C1 Req [1] 5000mV 3000mA 2019-06-14 13:55:18 C1 st6 SNK_REQUESTED 2019-06-14 13:55:18 C1 st7 SNK_TRANSITION 2019-06-14 13:55:18 C1 st8 SNK_READY Issued "pd 0 hard" on DUT: 2019-06-14 13:56:07 > C1 HARD RST RX 2019-06-14 13:56:11 C1 st4 SNK_HARD_RESET_RECOVER 2019-06-14 13:56:12 C1 st5 SNK_DISCOVERY 2019-06-14 13:56:12 C1 Req [1] 5000mV 3000mA 2019-06-14 13:56:12 C1 st6 SNK_REQUESTED 2019-06-14 13:56:12 C1 st7 SNK_TRANSITION 2019-06-14 13:56:12 C1 st8 SNK_READY Change-Id: I0cc80515df8044ec07fa6795d3723aca2a3dc0ef Signed-off-by: Wai-Hong Tam <waihong@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1660125 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'board/servo_v4/board.c')
-rw-r--r--board/servo_v4/board.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/board/servo_v4/board.c b/board/servo_v4/board.c
index d0e1bd08be..405c90c7aa 100644
--- a/board/servo_v4/board.c
+++ b/board/servo_v4/board.c
@@ -29,6 +29,20 @@
#include "usb-stream.h"
#include "util.h"
+/******************************************************************************
+ * GPIO interrupt handlers.
+ */
+
+static void vbus0_evt(enum gpio_signal signal)
+{
+ task_wake(TASK_ID_PD_C0);
+}
+
+static void vbus1_evt(enum gpio_signal signal)
+{
+ task_wake(TASK_ID_PD_C1);
+}
+
#include "gpio_list.h"
#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args)
@@ -439,6 +453,10 @@ static void board_init(void)
*/
pd_set_max_voltage(PD_MIN_MV);
+ /* Enable VBUS detection to wake PD tasks fast enough */
+ gpio_enable_interrupt(GPIO_USB_DET_PP_CHG);
+ gpio_enable_interrupt(GPIO_USB_DET_PP_DUT);
+
hook_call_deferred(&ccd_measure_sbu_data, 1000 * MSEC);
}