From 961eec44d8d92398cd8ff592f46c7bf59f5c0505 Mon Sep 17 00:00:00 2001 From: Wai-Hong Tam Date: Wed, 22 Jan 2020 10:46:01 -0800 Subject: PS8805: Add the delay between releasing reset and the first I2C read The PS8805 needs time for firmware init. Before the firmware initiated, I2C read may return wrong values. Parade suggests adding a 10ms delay. BRANCH=None BUG=b:147767696 TEST=Built Trogdor and Nocturne without error. Verified Trogdor TCPC reset correctly, with some other CLs too. Change-Id: I9f67612792f72d6075cbf93a516494c1af592259 Signed-off-by: Wai-Hong Tam Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2015640 Reviewed-by: Stephen Boyd --- board/nocturne/board.c | 1 + board/trogdor/board.c | 5 ++++- driver/tcpm/ps8xxx.h | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/board/nocturne/board.c b/board/nocturne/board.c index 5b785e209b..dd19e7a293 100644 --- a/board/nocturne/board.c +++ b/board/nocturne/board.c @@ -674,6 +674,7 @@ void board_reset_pd_mcu(void) gpio_set_level(GPIO_USB_PD_RST_L, 0); msleep(10); /* TODO(aaboagye): Verify min hold time. */ gpio_set_level(GPIO_USB_PD_RST_L, 1); + msleep(PS8805_FW_INIT_DELAY_MS); } void board_set_tcpc_power_mode(int port, int mode) diff --git a/board/trogdor/board.c b/board/trogdor/board.c index 3710358b85..c9367cca9c 100644 --- a/board/trogdor/board.c +++ b/board/trogdor/board.c @@ -370,12 +370,15 @@ DECLARE_HOOK(HOOK_CHIPSET_RESUME, board_chipset_resume, HOOK_PRIO_DEFAULT); void board_reset_pd_mcu(void) { - /* Assert reset */ + cprints(CC_USB, "Resetting TCPCs..."); + cflush(); + gpio_set_level(GPIO_USB_C0_PD_RST_L, 0); gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 0); msleep(PS8XXX_RESET_DELAY_MS); gpio_set_level(GPIO_USB_C0_PD_RST_L, 1); gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 1); + msleep(PS8805_FW_INIT_DELAY_MS); } int board_vbus_sink_enable(int port, int enable) diff --git a/driver/tcpm/ps8xxx.h b/driver/tcpm/ps8xxx.h index ed5a08115b..08399aba2d 100644 --- a/driver/tcpm/ps8xxx.h +++ b/driver/tcpm/ps8xxx.h @@ -18,6 +18,9 @@ /* Minimum Delay for reset assertion */ #define PS8XXX_RESET_DELAY_MS 1 +/* Delay between releasing reset and the first I2C read */ +#define PS8805_FW_INIT_DELAY_MS 10 + #define PS8751_BIST_TIMER_FREQ 15000000 #define PS8751_BIST_DELAY_MS 50 -- cgit v1.2.1