diff options
author | Wai-Hong Tam <waihong@google.com> | 2020-01-22 10:46:01 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-01-23 01:02:39 +0000 |
commit | 961eec44d8d92398cd8ff592f46c7bf59f5c0505 (patch) | |
tree | e0a2ae14611fed695750c33e19bd494901826c82 | |
parent | 29f5016d7b9cf9ed050af33d40772306e7207bf3 (diff) | |
download | chrome-ec-961eec44d8d92398cd8ff592f46c7bf59f5c0505.tar.gz |
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 <waihong@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2015640
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
-rw-r--r-- | board/nocturne/board.c | 1 | ||||
-rw-r--r-- | board/trogdor/board.c | 5 | ||||
-rw-r--r-- | driver/tcpm/ps8xxx.h | 3 |
3 files changed, 8 insertions, 1 deletions
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 |