diff options
author | David Huang <david.huang@quanta.corp-partner.google.com> | 2020-07-24 13:51:15 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-07-28 05:18:14 +0000 |
commit | e686f1dd1d7027d22a1b24119d2941a16de0e1b5 (patch) | |
tree | 5f54bd35c4adcf3a7f2ef9200b19d6d0dd1d89f1 | |
parent | 007185a69a86a979cbaaf984f6c6e8ccd8d536a0 (diff) | |
download | chrome-ec-e686f1dd1d7027d22a1b24119d2941a16de0e1b5.tar.gz |
Reland "bobba: fix triggering condition for PPC interrupt of SYV682A"
This is a reland of 6b31866931fe64cc05a71006cfd63632d03cc620
Original change's description:
> bobba: fix triggering condition for PPC interrupt of SYV682A
>
> The ALERT_L of SYV682A will be kept low when there are any pending bits
> waited for host to process and the driver itself will maintain the
> flags like OCP and 5V_OC by monitoring the the CONTROL_4 and STATUS
> registers. As a result
> 1. we need to enable both GPIO_INT_[FALLING|RISING] in order to set
> / clear self maintained flags.
> 2. CONFIG_USBC_PPC_DEDICATED_INT is defined to monitor ALERT_L
> status by reading the GPIO state directly.
>
> BUG=b:154772847, b:161762373
> TEST=Check the interrupt handler is triggered twice for OC_5V set
> and cleared by PPC.
>
> Change-Id: I8640e4db878921be753eb6bd8d928a2702e73eeb
> Reviewed-on:
> https: //chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2309522
> Tested-by: Marco Chen <marcochen@chromium.org>
> Commit-Queue: Marco Chen <marcochen@chromium.org>
> Reviewed-by: Eric Herrmann <eherrmann@chromium.org>
> Reviewed-by: Diana Z <dzigterman@chromium.org>
> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2315974
> Tested-by: David Huang <david.huang@quanta.corp-partner.google.com>
> Auto-Submit: David Huang <david.huang@quanta.corp-partner.google.com>
> Reviewed-by: Marco Chen <marcochen@chromium.org>
Bug: b:154772847
Bug: b:161762373
Change-Id: I9c7e2da6aaa00472a9bc8a7e1f893ef278672eff
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2321820
Reviewed-by: Marco Chen <marcochen@chromium.org>
Commit-Queue: Marco Chen <marcochen@chromium.org>
Tested-by: Marco Chen <marcochen@chromium.org>
-rw-r--r-- | board/bobba/board.c | 32 | ||||
-rw-r--r-- | board/bobba/board.h | 1 |
2 files changed, 23 insertions, 10 deletions
diff --git a/board/bobba/board.c b/board/bobba/board.c index c1f069f775..9caa1d617f 100644 --- a/board/bobba/board.c +++ b/board/bobba/board.c @@ -434,13 +434,13 @@ void board_overcurrent_event(int port, int is_overcurrented) gpio_set_level(GPIO_USB_C_OC, !is_overcurrented); } -const struct ppc_config_t ppc_syv682x_port0 = { +static const struct ppc_config_t ppc_syv682x_port0 = { .i2c_port = I2C_PORT_TCPC0, .i2c_addr = SYV682X_ADDR0, .drv = &syv682x_drv, }; -const struct ppc_config_t ppc_syv682x_port1 = { +static const struct ppc_config_t ppc_syv682x_port1 = { .i2c_port = I2C_PORT_TCPC1, .i2c_addr = SYV682X_ADDR0, .drv = &syv682x_drv, @@ -448,13 +448,25 @@ const struct ppc_config_t ppc_syv682x_port1 = { static void board_setup_ppc(void) { - if (support_syv_ppc()) { - memcpy(&ppc_chips[USB_PD_PORT_TCPC_0], - &ppc_syv682x_port0, - sizeof(struct ppc_config_t)); - memcpy(&ppc_chips[USB_PD_PORT_TCPC_1], - &ppc_syv682x_port1, - sizeof(struct ppc_config_t)); - } + if (!support_syv_ppc()) + return; + + memcpy(&ppc_chips[USB_PD_PORT_TCPC_0], + &ppc_syv682x_port0, + sizeof(struct ppc_config_t)); + memcpy(&ppc_chips[USB_PD_PORT_TCPC_1], + &ppc_syv682x_port1, + sizeof(struct ppc_config_t)); + + gpio_set_flags(GPIO_USB_PD_C0_INT_ODL, GPIO_INT_BOTH); + gpio_set_flags(GPIO_USB_PD_C1_INT_ODL, GPIO_INT_BOTH); } DECLARE_HOOK(HOOK_INIT, board_setup_ppc, HOOK_PRIO_INIT_I2C + 2); + +int ppc_get_alert_status(int port) +{ + if (port == 0) + return gpio_get_level(GPIO_USB_PD_C0_INT_ODL) == 0; + + return gpio_get_level(GPIO_USB_PD_C1_INT_ODL) == 0; +} diff --git a/board/bobba/board.h b/board/bobba/board.h index 472ed0af1d..13958fc9d1 100644 --- a/board/bobba/board.h +++ b/board/bobba/board.h @@ -70,6 +70,7 @@ /* Additional PPC second source */ #define CONFIG_USBC_PPC_SYV682X +#define CONFIG_USBC_PPC_DEDICATED_INT #ifndef __ASSEMBLER__ |