diff options
Diffstat (limited to 'board/eve/board.c')
-rw-r--r-- | board/eve/board.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/board/eve/board.c b/board/eve/board.c index 50190f0fba..5a11f21241 100644 --- a/board/eve/board.c +++ b/board/eve/board.c @@ -85,6 +85,61 @@ void tablet_mode_interrupt(enum gpio_signal signal) hook_call_deferred(&enable_input_devices_data, LID_DEBOUNCE_US); } +#ifdef CONFIG_USB_PD_TCPC_LOW_POWER +static void anx74xx_c0_cable_det_handler(void) +{ + int level = gpio_get_level(GPIO_USB_C0_CABLE_DET); + + /* + * Setting the low power is handled by DRP status hence + * handle only the attach event. + */ + if (level) + anx74xx_handle_power_mode(I2C_PORT_TCPC0, + ANX74XX_NORMAL_MODE); + + /* confirm if cable_det is asserted */ + if (!level || gpio_get_level(GPIO_USB_C0_PD_RST_L)) + return; + + task_set_event(TASK_ID_PD_C0, PD_EVENT_TCPC_RESET, 0); +} +DECLARE_DEFERRED(anx74xx_c0_cable_det_handler); +DECLARE_HOOK(HOOK_CHIPSET_RESUME, anx74xx_c0_cable_det_handler, HOOK_PRIO_LAST); + +static void anx74xx_c1_cable_det_handler(void) +{ + int level = gpio_get_level(GPIO_USB_C1_CABLE_DET); + + /* + * Setting the low power is handled by DRP status hence + * handle only the attach event. + */ + if (level) + anx74xx_handle_power_mode(I2C_PORT_TCPC1, + ANX74XX_NORMAL_MODE); + + /* confirm if cable_det is asserted */ + if (!level || gpio_get_level(GPIO_USB_C1_PD_RST_L)) + return; + + task_set_event(TASK_ID_PD_C1, PD_EVENT_TCPC_RESET, 0); +} +DECLARE_DEFERRED(anx74xx_c1_cable_det_handler); +DECLARE_HOOK(HOOK_CHIPSET_RESUME, anx74xx_c1_cable_det_handler, HOOK_PRIO_LAST); + +void anx74xx_cable_det_interrupt(enum gpio_signal signal) +{ + /* Check if it is port 0 or 1, and debounce for 2 msec. */ + if (signal == GPIO_USB_C0_CABLE_DET) + hook_call_deferred(&anx74xx_c0_cable_det_handler_data, + (2 * MSEC)); + else + hook_call_deferred(&anx74xx_c1_cable_det_handler_data, + (2 * MSEC)); +} +#endif + #include "gpio_list.h" /* power signal list. Must match order of enum power_signal. */ @@ -221,6 +276,12 @@ void board_tcpc_init(void) gpio_enable_interrupt(GPIO_USB_C0_PD_INT_ODL); gpio_enable_interrupt(GPIO_USB_C1_PD_INT_ODL); +#ifdef CONFIG_USB_PD_TCPC_LOW_POWER + /* Enable CABLE_DET interrupt for ANX3429 wake from standby */ + gpio_enable_interrupt(GPIO_USB_C0_CABLE_DET); + gpio_enable_interrupt(GPIO_USB_C1_CABLE_DET); +#endif + /* * Initialize HPD to low; after sysjump SOC needs to see * HPD pulse to enable video path |