summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
Diffstat (limited to 'board')
-rw-r--r--board/dalboz/board.c24
-rw-r--r--board/dalboz/gpio.inc5
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 */