From 9f146c7b8ae350179c55b47f9311d392969c6515 Mon Sep 17 00:00:00 2001 From: Rong Chang Date: Wed, 5 Aug 2015 17:37:15 +0800 Subject: oak: enable oak TCPM power status Oak doesn't have enough interrupt pins to detect VBUS change. This CL enables oak TCPM power status alert. BRANCH=none BUG=chrome-os-partner:41226 BUG=chrome-os-partner:42610 TEST=manual load on oak rev2. plug in normal type-c charger or legacy type-c chargers and check charging status. Change-Id: I9659e749b515f999fe9e81373567f52ec3fe956a Signed-off-by: Rong Chang Reviewed-on: https://chromium-review.googlesource.com/291161 Reviewed-by: Shawn N Reviewed-by: Alec Berg --- board/oak/board.c | 19 ------------------- board/oak/board.h | 1 + board/oak/gpio.inc | 1 - board/oak/usb_pd_policy.c | 5 ----- board/oak_pd/board.c | 11 +---------- board/oak_pd/board.h | 1 + board/oak_pd/gpio.inc | 4 ++-- 7 files changed, 5 insertions(+), 37 deletions(-) diff --git a/board/oak/board.c b/board/oak/board.c index 3dd9d75615..1399c67c21 100644 --- a/board/oak/board.c +++ b/board/oak/board.c @@ -48,23 +48,6 @@ /* Dispaly port hardware can connect to port 0, 1 or neither. */ #define PD_PORT_NONE -1 -void vbus_wake_interrupt(enum gpio_signal signal) -{ - CPRINTF("VBUS %d\n", !gpio_get_level(signal)); - gpio_set_level(GPIO_USB_PD_VBUS_WAKE, - !gpio_get_level(GPIO_VBUS_WAKE_L)); - /* - * TODO(crosbug.com/p/41226): - * rev1/rev2 boards don't have vbus input on ec. vbus_wake is a - * logical OR of two vbus status. to workaround the power status - * issue, wake up both pd tasks on vbus_wake interrupt. a proper - * hardware fix will be in rev3. - * enable TCPC POWER_STATUS ALERT1 can solve this issue too. - */ - task_wake(TASK_ID_PD_C0); - task_wake(TASK_ID_PD_C1); -} - void pd_mcu_interrupt(enum gpio_signal signal) { #ifdef HAS_TASK_PDCMD @@ -191,8 +174,6 @@ static void board_init(void) gpio_set_level(GPIO_SYSTEM_POWER_H, 1); /* Enable PD MCU interrupt */ gpio_enable_interrupt(GPIO_PD_MCU_INT); - /* Enable VBUS interrupt */ - gpio_enable_interrupt(GPIO_VBUS_WAKE_L); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); diff --git a/board/oak/board.h b/board/oak/board.h index 1dbc42e18f..d384fe75e7 100644 --- a/board/oak/board.h +++ b/board/oak/board.h @@ -69,6 +69,7 @@ #define CONFIG_USB_PD_PORT_COUNT 2 #define CONFIG_USB_PD_TCPM_TCPCI #define CONFIG_USB_PD_TRY_SRC +#define CONFIG_USB_PD_TCPM_VBUS #define CONFIG_SPI #define CONFIG_STM_HWTIMER32 #define CONFIG_VBOOT_HASH diff --git a/board/oak/gpio.inc b/board/oak/gpio.inc index 0bcee1ee5d..234d386753 100644 --- a/board/oak/gpio.inc +++ b/board/oak/gpio.inc @@ -11,7 +11,6 @@ GPIO_INT(POWER_BUTTON_L, PIN(B, 5), GPIO_INT_BOTH | GPIO_PULL_UP, power_bu GPIO_INT(SOC_POWER_GOOD, PIN(A, 3), GPIO_INT_BOTH | GPIO_PULL_DOWN, power_signal_interrupt) GPIO_INT(LID_OPEN, PIN(C, 13), GPIO_INT_BOTH, lid_interrupt) /* LID switch detection */ GPIO_INT(SUSPEND_L, PIN(C, 7), GPIO_INT_BOTH | GPIO_PULL_DOWN, power_signal_interrupt) /* AP suspend/resume state */ -GPIO_INT(VBUS_WAKE_L, PIN(E, 1), GPIO_INT_BOTH, vbus_wake_interrupt) /* VBUS wake: PE 1 */ GPIO_INT(PD_MCU_INT, PIN(E, 0), GPIO_INT_FALLING, pd_mcu_interrupt) /* Signal from PD MCU, external pull-up */ GPIO_INT(SPI1_NSS, PIN(A, 4), GPIO_INT_BOTH | GPIO_PULL_UP, spi_event) /* SPI Chip Select */ diff --git a/board/oak/usb_pd_policy.c b/board/oak/usb_pd_policy.c index 7bc7a594f7..bdc3b9c040 100644 --- a/board/oak/usb_pd_policy.c +++ b/board/oak/usb_pd_policy.c @@ -126,11 +126,6 @@ void typec_set_input_current_limit(int port, uint32_t max_ma, /* notify host of power info change */ } -int pd_snk_is_vbus_provided(int port) -{ - return !gpio_get_level(GPIO_VBUS_WAKE_L); -} - int pd_board_checks(void) { return EC_SUCCESS; diff --git a/board/oak_pd/board.c b/board/oak_pd/board.c index 4b37a1efb2..a2b1d09d78 100644 --- a/board/oak_pd/board.c +++ b/board/oak_pd/board.c @@ -16,6 +16,7 @@ #include "system.h" #include "task.h" #include "usb_pd.h" +#include "usb_pd_tcpc.h" #include "util.h" #define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) @@ -30,16 +31,6 @@ void pd_send_ec_int(void) } -void vbus0_evt(enum gpio_signal signal) -{ - task_wake(TASK_ID_PD_C0); -} - -void vbus1_evt(enum gpio_signal signal) -{ - task_wake(TASK_ID_PD_C1); -} - void board_config_pre_init(void) { /* enable SYSCFG clock */ diff --git a/board/oak_pd/board.h b/board/oak_pd/board.h index aebdec9ac3..945dd2f57e 100644 --- a/board/oak_pd/board.h +++ b/board/oak_pd/board.h @@ -62,6 +62,7 @@ #define CONFIG_USB_PD_INTERNAL_COMP #define CONFIG_USB_PD_PORT_COUNT 2 #define CONFIG_USB_PD_TCPC +#define CONFIG_USB_PD_TCPM_VBUS #define CONFIG_USBC_VCONN #define CONFIG_VBOOT_HASH #undef CONFIG_WATCHDOG diff --git a/board/oak_pd/gpio.inc b/board/oak_pd/gpio.inc index 9547f57bba..e5d0c67924 100644 --- a/board/oak_pd/gpio.inc +++ b/board/oak_pd/gpio.inc @@ -6,8 +6,8 @@ */ /* Interrupts */ -GPIO_INT(USB_C0_VBUS_WAKE_L, PIN(C, 14), GPIO_INT_BOTH, vbus0_evt) -GPIO_INT(USB_C1_VBUS_WAKE_L, PIN(C, 15), GPIO_INT_BOTH, vbus1_evt) +GPIO_INT(USB_C0_VBUS_WAKE_L, PIN(C, 14), GPIO_INT_BOTH, pd_vbus_evt_p0) +GPIO_INT(USB_C1_VBUS_WAKE_L, PIN(C, 15), GPIO_INT_BOTH, pd_vbus_evt_p1) /* PD RX/TX */ GPIO(USB_C0_CC1_PD, PIN(A, 2), GPIO_ANALOG) -- cgit v1.2.1