diff options
author | Edward Hill <ecgh@chromium.org> | 2018-01-15 14:42:24 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-01-16 01:26:15 -0800 |
commit | be1f97a2551549d81f77f0439a23683343234c40 (patch) | |
tree | eca99c1677e80fac5336535795a952985f96b129 | |
parent | 7f1bb54c108d8e01158b5fade051552942664fd0 (diff) | |
download | chrome-ec-be1f97a2551549d81f77f0439a23683343234c40.tar.gz |
grunt: Enable TCPC + PPC interrupts and overcurrent GPIOs
BUG=b:69378796
BRANCH=none
TEST=PD still works on both ports
Change-Id: I6c9d378483d141db821da2a717cf1256099b01ec
Signed-off-by: Edward Hill <ecgh@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/867234
Reviewed-by: Aaron Durbin <adurbin@google.com>
-rw-r--r-- | board/grunt/board.c | 22 | ||||
-rw-r--r-- | board/grunt/gpio.inc | 4 |
2 files changed, 23 insertions, 3 deletions
diff --git a/board/grunt/board.c b/board/grunt/board.c index 06b36b406e..a542c735de 100644 --- a/board/grunt/board.c +++ b/board/grunt/board.c @@ -91,6 +91,13 @@ void anx74xx_cable_det_interrupt(enum gpio_signal signal) } #endif +static void ppc_interrupt(enum gpio_signal signal) +{ + int port = (signal == GPIO_USB_C0_SWCTL_INT_ODL) ? 0 : 1; + + sn5s330_interrupt(port); +} + #include "gpio_list.h" const enum gpio_signal hibernate_wake_pins[] = { @@ -200,6 +207,14 @@ static void board_init(void) { /* Enable Gyro interrupts */ gpio_enable_interrupt(GPIO_6AXIS_INT_L); + + /* Enable PPC interrupts. */ + gpio_enable_interrupt(GPIO_USB_C0_SWCTL_INT_ODL); + gpio_enable_interrupt(GPIO_USB_C1_SWCTL_INT_ODL); + + /* Enable TCPC interrupts. */ + gpio_enable_interrupt(GPIO_USB_C0_PD_INT_ODL); + gpio_enable_interrupt(GPIO_USB_C1_PD_INT_ODL); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); @@ -302,7 +317,12 @@ void board_tcpc_init(void) void board_overcurrent_event(int port) { - /* TODO(ecgh): assert GPIO to notify SOC */ + enum gpio_signal signal = (port == 0) ? GPIO_USB_C0_OC_L + : GPIO_USB_C1_OC_L; + + gpio_set_level(signal, 0); + + CPRINTS("p%d: overcurrent!", port); } int board_set_active_charge_port(int port) diff --git a/board/grunt/gpio.inc b/board/grunt/gpio.inc index ab24ffbdc4..2a4cc5bec8 100644 --- a/board/grunt/gpio.inc +++ b/board/grunt/gpio.inc @@ -10,6 +10,8 @@ GPIO_INT(USB_C0_PD_INT_ODL, PIN(A, 0), GPIO_INT_FALLING, tcpc_alert_event) GPIO_INT(USB_C1_PD_INT_ODL, PIN(F, 5), GPIO_INT_FALLING, tcpc_alert_event) +GPIO_INT(USB_C0_SWCTL_INT_ODL, PIN(0, 3), GPIO_INT_FALLING, ppc_interrupt) +GPIO_INT(USB_C1_SWCTL_INT_ODL, PIN(0, 4), GPIO_INT_FALLING, ppc_interrupt) GPIO_INT(PCH_SLP_S3_L, PIN(A, 6), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(PCH_SLP_S5_L, PIN(A, 3), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(VGATE, PIN(F, 4), GPIO_INT_BOTH, power_signal_interrupt) @@ -72,8 +74,6 @@ GPIO(USB_C0_OC_L, PIN(7, 3), GPIO_OUT_HIGH) /* C0 Over Current */ GPIO(USB_C1_OC_L, PIN(D, 7), GPIO_OUT_HIGH) /* C1 Over Current */ GPIO(USB_C0_PD_RST_L, PIN(F, 1), GPIO_OUT_HIGH) /* C0 PD Reset */ GPIO(USB_C1_PD_RST_L, PIN(D, 5), GPIO_OUT_HIGH) /* C1 PD Reset */ -GPIO(USB_C0_SWCTL_INT_ODL, PIN(0, 3), GPIO_INPUT) /* C0 Switch Interrupt */ -GPIO(USB_C1_SWCTL_INT_ODL, PIN(0, 4), GPIO_INPUT) /* C1 Switch Interrupt */ GPIO(USB_C0_BC12_VBUS_ON_L, PIN(8, 2), GPIO_ODR_HIGH) /* C0 BC1.2 Power */ GPIO(USB_C1_BC12_VBUS_ON_L, PIN(B, 1), GPIO_ODR_HIGH) /* C1 BC1.2 Power */ GPIO(USB_C0_BC12_CHG_DET, PIN(6, 2), GPIO_INPUT) /* C0 BC1.2 Detect */ |