diff options
Diffstat (limited to 'board/pompom')
-rw-r--r-- | board/pompom/board.c | 18 | ||||
-rw-r--r-- | board/pompom/gpio.inc | 4 |
2 files changed, 20 insertions, 2 deletions
diff --git a/board/pompom/board.c b/board/pompom/board.c index afd801401e..062c8bc8ce 100644 --- a/board/pompom/board.c +++ b/board/pompom/board.c @@ -29,6 +29,7 @@ #include "switch.h" #include "tablet_mode.h" #include "task.h" +#include "usbc_ocp.h" #include "usbc_ppc.h" #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) @@ -37,6 +38,7 @@ /* Forward declaration */ static void tcpc_alert_event(enum gpio_signal signal); static void usb0_evt(enum gpio_signal signal); +static void usba_oc_interrupt(enum gpio_signal signal); static void ppc_interrupt(enum gpio_signal signal); static void board_connect_c0_sbu(enum gpio_signal s); @@ -63,6 +65,19 @@ static void usb0_evt(enum gpio_signal signal) task_set_event(TASK_ID_USB_CHG_P0, USB_CHG_EVENT_BC12, 0); } +static void usba_oc_deferred(void) +{ + /* Use next number after all USB-C ports to indicate the USB-A port */ + board_overcurrent_event(CONFIG_USB_PD_PORT_MAX_COUNT, + !gpio_get_level(GPIO_USB_A0_OC_ODL)); +} +DECLARE_DEFERRED(usba_oc_deferred); + +static void usba_oc_interrupt(enum gpio_signal signal) +{ + hook_call_deferred(&usba_oc_deferred_data, 0); +} + static void ppc_interrupt(enum gpio_signal signal) { switch (signal) { @@ -227,6 +242,9 @@ static void board_init(void) /* Enable BC1.2 interrupts */ gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_L); + /* Enable USB-A overcurrent interrupt */ + gpio_enable_interrupt(GPIO_USB_A0_OC_ODL); + /* Enable interrupt for BMI160 sensor */ gpio_enable_interrupt(GPIO_ACCEL_GYRO_INT_L); diff --git a/board/pompom/gpio.inc b/board/pompom/gpio.inc index d53f56fbec..1a7492582f 100644 --- a/board/pompom/gpio.inc +++ b/board/pompom/gpio.inc @@ -8,10 +8,11 @@ /* Declare symbolic names for all the GPIOs that we care about. * Note: Those with interrupt handlers must be declared first. */ -/* USB-C interrupts */ +/* USB interrupts */ GPIO_INT(USB_C0_PD_INT_ODL, PIN(E, 0), GPIO_INT_FALLING, tcpc_alert_event) /* Interrupt from port-0 TCPC */ GPIO_INT(USB_C0_SWCTL_INT_ODL, PIN(0, 3), GPIO_INT_FALLING, ppc_interrupt) /* Interrupt from port-0 PPC */ GPIO_INT(USB_C0_BC12_INT_L, PIN(6, 1), GPIO_INT_FALLING | GPIO_PULL_UP, usb0_evt) /* Interrupt from port-0 BC1.2 */ +GPIO_INT(USB_A0_OC_ODL, PIN(D, 1), GPIO_INT_BOTH | GPIO_PULL_UP, usba_oc_interrupt) /* System interrupts */ GPIO_INT(ACOK_OD, PIN(0, 0), GPIO_INT_BOTH, extpower_interrupt) /* ACOK */ @@ -75,7 +76,6 @@ GPIO(DP_HOT_PLUG_DET, PIN(9, 5), GPIO_OUT_LOW) /* DP HPD to AP */ /* USB-A */ GPIO(EN_USB_A_5V, PIN(8, 6), GPIO_OUT_LOW) GPIO(USB_A_CDP_ILIM_EN, PIN(7, 5), GPIO_OUT_HIGH) /* H: CDP, L:SDP. Only one USB-A port, always CDP */ -GPIO(USB_A0_OC_ODL, PIN(D, 1), GPIO_ODR_HIGH) /* LEDs */ GPIO(EC_CHG_LED_Y_C0, PIN(C, 3), GPIO_OUT_LOW) |