diff options
Diffstat (limited to 'board')
-rw-r--r-- | board/dalboz/board.c | 24 | ||||
-rw-r--r-- | board/dalboz/gpio.inc | 5 |
2 files changed, 20 insertions, 9 deletions
diff --git a/board/dalboz/board.c b/board/dalboz/board.c index 3f82897b3b..b2e5606a4e 100644 --- a/board/dalboz/board.c +++ b/board/dalboz/board.c @@ -49,18 +49,24 @@ void c1_tcpc_interrupt(enum gpio_signal signal) c1_tcpc_config_interrupt(signal); } -static void hdmi_hpd_handler(void) +/* Interrupt for C1 PPC with USB-C DB, HPD with HDMI DB. */ +void (*c1_ppc_config_interrupt)(enum gpio_signal signal) = ppc_interrupt; + +void c1_ppc_interrupt(enum gpio_signal signal) { - int hpd = 0; + c1_ppc_config_interrupt(signal); +} +static void hdmi_hpd_handler(void) +{ /* Pass HPD through from DB OPT1 HDMI connector to AP's DP1. */ - ioex_get_level(IOEX_HDMI_CONN_HPD_3V3_DB, &hpd); + int hpd = gpio_get_level(GPIO_USB_C1_PPC_INT_ODL); gpio_set_level(GPIO_DP1_HPD, hpd); ccprints("HDMI HPD %d", hpd); } DECLARE_DEFERRED(hdmi_hpd_handler); -void hdmi_hpd_interrupt(enum ioex_signal signal) +void hdmi_hpd_interrupt(enum gpio_signal signal) { /* Debounce for 2 msec. */ hook_call_deferred(&hdmi_hpd_handler_data, (2 * MSEC)); @@ -287,7 +293,12 @@ void ppc_interrupt(enum gpio_signal signal) break; case GPIO_USB_C1_PPC_INT_ODL: - nx20p348x_interrupt(USBC_PORT_C1); + /* + * Sensitive only to falling edges; GPIO is configured for both + * because this input may be used for HDMI HPD instead. + */ + if (!gpio_get_level(signal)) + nx20p348x_interrupt(USBC_PORT_C1); break; default: @@ -520,7 +531,7 @@ static void setup_fw_config(void) IOEX_USB_A1_CHARGE_EN_DB_L = IOEX_USB_A1_CHARGE_EN_DB_L_OPT2; usb_port_enable[USBA_PORT_A1] = IOEX_EN_USB_A1_5V_DB_OPT2; c1_tcpc_config_interrupt = pcal6408_interrupt; - ioex_enable_interrupt(IOEX_HDMI_CONN_HPD_3V3_DB); + c1_ppc_config_interrupt = hdmi_hpd_interrupt; } else { ccprints("DB OPT1 USBC"); ioex_config[IOEX_C1_NCT3807].flags = 0; @@ -529,6 +540,7 @@ static void setup_fw_config(void) IOEX_USB_A1_CHARGE_EN_DB_L = IOEX_USB_A1_CHARGE_EN_DB_L_OPT1; usb_port_enable[USBA_PORT_A1] = IOEX_EN_USB_A1_5V_DB_OPT1; c1_tcpc_config_interrupt = tcpc_alert_event; + c1_ppc_config_interrupt = ppc_interrupt; } /* Enable PPC interrupts. */ diff --git a/board/dalboz/gpio.inc b/board/dalboz/gpio.inc index 53829d77d2..14035d541b 100644 --- a/board/dalboz/gpio.inc +++ b/board/dalboz/gpio.inc @@ -11,7 +11,8 @@ GPIO_INT(USB_C0_TCPC_INT_ODL, PIN(3, 4), GPIO_INT_FALLING, tcpc_alert_event) GPIO_INT(USB_C1_TCPC_INT_ODL, PIN(F, 1), GPIO_INT_FALLING, c1_tcpc_interrupt) GPIO_INT(USB_C0_PPC_FAULT_ODL, PIN(6, 3), GPIO_INT_FALLING, ppc_interrupt) -GPIO_INT(USB_C1_PPC_INT_ODL, PIN(D, 4), GPIO_INT_FALLING, ppc_interrupt) +/* PPC interrupts trigger on falling edge, but HDMI HPD triggers on rising edge. */ +GPIO_INT(USB_C1_PPC_INT_ODL, PIN(D, 4), GPIO_INT_BOTH, c1_ppc_interrupt) GPIO_INT(USB_C0_BC12_INT_ODL, PIN(9, 3), GPIO_INT_FALLING | GPIO_PULL_UP, bc12_interrupt) GPIO_INT(USB_C1_BC12_INT_ODL, PIN(A, 4), GPIO_INT_FALLING | GPIO_PULL_UP, bc12_interrupt) GPIO_INT(SLP_S3_L, PIN(7, 4), GPIO_INT_BOTH, power_signal_interrupt) @@ -60,8 +61,6 @@ GPIO(LED3_PWM, PIN(C, 3), GPIO_OUT_HIGH) * OPT1 DB (USB-C1), IOEX_HDMI_PCAL6408 is the OPT2 DB (HDMI). */ -IOEX_INT(HDMI_CONN_HPD_3V3_DB, EXPIN(IOEX_HDMI_PCAL6408, 0, 4), GPIO_INT_BOTH, hdmi_hpd_interrupt) - IOEX(USB_C0_FAULT_ODL, EXPIN(IOEX_C0_NCT3807, 0, 3), GPIO_ODR_HIGH) /* C0 Fault to SOC */ IOEX(USB_C0_TCPC_FASTSW_CTL_EN, EXPIN(IOEX_C0_NCT3807, 0, 4), GPIO_OUT_LOW) /* C0 FastSwitch Control */ IOEX(USB_C1_FAULT_ODL, EXPIN(IOEX_C0_NCT3807, 1, 0), GPIO_ODR_HIGH) /* C1 Fault to SOC */ |