summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWai-Hong Tam <waihong@google.com>2020-01-22 10:46:01 -0800
committerCommit Bot <commit-bot@chromium.org>2020-01-23 01:02:39 +0000
commit961eec44d8d92398cd8ff592f46c7bf59f5c0505 (patch)
treee0a2ae14611fed695750c33e19bd494901826c82
parent29f5016d7b9cf9ed050af33d40772306e7207bf3 (diff)
downloadchrome-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.c1
-rw-r--r--board/trogdor/board.c5
-rw-r--r--driver/tcpm/ps8xxx.h3
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