From 6441bcd511bae6acf97ed8b628479b27da904243 Mon Sep 17 00:00:00 2001 From: Ting Shen Date: Tue, 13 Jul 2021 20:00:26 +0800 Subject: cherry: implement USB-A port power control BUG=b:193499785 TEST=manually BRANCH=main Signed-off-by: Ting Shen Change-Id: I1bda9b40bb8795837d25022f6f71661f7699d1cf Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3023017 Commit-Queue: Ting Shen Tested-by: Ting Shen Reviewed-by: Eric Yilun Lin --- baseboard/cherry/baseboard.c | 10 ++++++++++ board/cherry/gpio.inc | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/baseboard/cherry/baseboard.c b/baseboard/cherry/baseboard.c index 95e2e6ab75..5301c0724c 100644 --- a/baseboard/cherry/baseboard.c +++ b/baseboard/cherry/baseboard.c @@ -54,6 +54,7 @@ static void bc12_interrupt(enum gpio_signal signal); static void ppc_interrupt(enum gpio_signal signal); +static void usb_a0_interrupt(enum gpio_signal signal); #include "gpio_list.h" @@ -231,6 +232,15 @@ const int usb_port_enable[] = { }; BUILD_ASSERT(ARRAY_SIZE(usb_port_enable) == USB_PORT_COUNT); +__maybe_unused void usb_a0_interrupt(enum gpio_signal signal) +{ + enum usb_charge_mode mode = gpio_get_level(signal) ? + USB_CHARGE_MODE_ENABLED : USB_CHARGE_MODE_DISABLED; + + for (int i = 0; i < USB_PORT_COUNT; i++) + usb_charge_set_mode(i, mode, USB_ALLOW_SUSPEND_CHARGE); +} + /* USB Mux */ void board_usb_mux_init(void) diff --git a/board/cherry/gpio.inc b/board/cherry/gpio.inc index d3d1bd9ddc..643a7ec209 100644 --- a/board/cherry/gpio.inc +++ b/board/cherry/gpio.inc @@ -54,6 +54,10 @@ GPIO_INT(WP, PIN(I, 4), GPIO_INT_BOTH | GPIO_SEL_1P8V, switch_interrupt) /* EC_FLASH_WP_OD */ GPIO_INT(SPI0_CS, PIN(M, 5), GPIO_INT_FALLING, spi_event) /* SPI slave Chip Select -- AP_SPI_EC_CS_L */ +#ifdef BOARD_TOMATO +GPIO_INT(AP_XHCI_INIT_DONE, PIN(J, 5), GPIO_INT_BOTH | GPIO_PULL_DOWN | GPIO_SEL_1P8V, + usb_a0_interrupt) +#endif /* Power Sequencing Signals */ GPIO(EC_PMIC_EN_ODL, PIN(D, 0), GPIO_ODR_HIGH | GPIO_SEL_1P8V) @@ -82,7 +86,6 @@ GPIO(EC_NVME_PLN_ODL, PIN(D, 7), GPIO_ODR_HIGH | GPIO_SEL_1P8V) GPIO(NVME_EC_PLA_S3_ODL, PIN(I, 7), GPIO_INPUT) GPIO(EN_PP2500_NVME_X, PIN(J, 2), GPIO_OUTPUT | GPIO_PULL_DOWN) GPIO(EN_PP1200_NVME_X, PIN(J, 3), GPIO_OUTPUT | GPIO_PULL_DOWN) -GPIO(EN_PP900_NVME_X, PIN(J, 5), GPIO_OUTPUT | GPIO_PULL_DOWN) GPIO(PG_NVME_OD, PIN(H, 3), GPIO_INPUT) /* Misc Signals */ -- cgit v1.2.1