diff options
Diffstat (limited to 'board/elm/board.c')
-rw-r--r-- | board/elm/board.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/board/elm/board.c b/board/elm/board.c index c0083c625b..ed985f6158 100644 --- a/board/elm/board.c +++ b/board/elm/board.c @@ -68,19 +68,8 @@ DECLARE_DEFERRED(deferred_reset_pd_mcu); void usb_evt(enum gpio_signal signal) { - /* - * check if this is from BC12 or ANX7688 CABLE_DET - * note that CABLE_DET can only trigger irq when 0 -> 1 (plug in) - */ if (!gpio_get_level(GPIO_BC12_WAKE_L)) task_set_event(TASK_ID_USB_CHG_P0, USB_CHG_EVENT_BC12, 0); - - if (!gpio_get_level(GPIO_USB_C0_CABLE_DET_L) && - gpio_get_level(GPIO_USB_C0_PWR_EN_L)) { - hook_call_deferred(&deferred_reset_pd_mcu_data, -1); - /* pull PWR_EN after 10ms */ - hook_call_deferred(&deferred_reset_pd_mcu_data, 10*MSEC); - } } #include "gpio_list.h" @@ -220,12 +209,8 @@ void deferred_reset_pd_mcu(void) case 3: /* * PWR_EN_L high, RST high - * cable detected - enable power - * cable not detected - do nothing + * enable power and wait for 10ms then pull RESET_N */ - if (gpio_get_level(GPIO_USB_C0_CABLE_DET_L)) - return; - /* enable power and wait for 10ms then pull RESET_N */ gpio_set_level(GPIO_USB_C0_PWR_EN_L, 0); hook_call_deferred(&deferred_reset_pd_mcu_data, 10*MSEC); break; @@ -239,6 +224,14 @@ void deferred_reset_pd_mcu(void) } } +static void board_power_on_pd_mcu(void) +{ + /* check if power is already on */ + if (!gpio_get_level(GPIO_USB_C0_PWR_EN_L)) + return; + hook_call_deferred(&deferred_reset_pd_mcu_data, 1*MSEC); +} + void board_reset_pd_mcu(void) { /* enable port controller's cable detection before reset */ @@ -283,7 +276,7 @@ static void board_init(void) gpio_enable_interrupt(GPIO_BC12_CABLE_INT); /* Check if typeC is already connected, and do 7688 power on flow */ - usb_evt(0); + board_power_on_pd_mcu(); /* Update VBUS supplier */ usb_charger_vbus_change(0, pd_snk_is_vbus_provided(0)); |