diff options
author | Peter Marheine <pmarheine@chromium.org> | 2020-06-17 13:58:03 +1000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-19 02:11:42 +0000 |
commit | c3368bb9cccabea2eeeadd34fd7f91f04a1e3295 (patch) | |
tree | 37576fd14ae4500f47f28295760221c64508b879 | |
parent | e0c415b8f76a5179474b89418094f986fd1cd772 (diff) | |
download | chrome-ec-c3368bb9cccabea2eeeadd34fd7f91f04a1e3295.tar.gz |
dalboz: move HDMI HPD off the IO expander
On earlier board versions (prior to version 2) the hotplug detect signal
was routed only through an IO expander, but latency in that
configuration is too high- new hardware routes it directly to an EC
GPIO. Because the old one was too slow, drop support for it and use the
new direct IO exclusively.
BUG=b:153399461
TEST=HPD passthrough works on new boards.
BRANCH=None
Signed-off-by: Peter Marheine <pmarheine@chromium.org>
Change-Id: If7a0cc8f57e8264a8910291879515de4eb1c338e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2247968
Reviewed-by: Edward Hill <ecgh@chromium.org>
-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 */ |