summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Chao <scott_chao@wistron.corp-partner.google.com>2021-02-03 20:39:11 +0800
committerCommit Bot <commit-bot@chromium.org>2021-02-09 17:17:56 +0000
commit6ae2929b858eaea2d7a565c5dbb11ae25208aee7 (patch)
tree5b58d6f7b65279968ba993ed642e2bb476c3ea66
parent57fb28a3cdd4039da4f13060093992991c17db1e (diff)
downloadchrome-ec-6ae2929b858eaea2d7a565c5dbb11ae25208aee7.tar.gz
rt1715: Reset properly coming out of LPM
After the initial power-on-reset, reset registers by writing to SOFT_RESET. On subsequent register resets after exiting low-power mode, do not write this register. BUG=b:179234089 BRANCH=firmware-volteer-13672.B-master TEST=test firmware_PDTrySrc pass TEST=make buildall Signed-off-by: Scott Chao <scott_chao@wistron.corp-partner.google.com> Change-Id: I9e8f2c7fc46bbd84debcb565a4d93a6e87bdebf6 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2671265 Reviewed-by: Abe Levkoy <alevkoy@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2684760 Commit-Queue: Abe Levkoy <alevkoy@chromium.org> Tested-by: Abe Levkoy <alevkoy@chromium.org>
-rw-r--r--driver/tcpm/rt1715.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/driver/tcpm/rt1715.c b/driver/tcpm/rt1715.c
index db5e7a929d..98084d4c83 100644
--- a/driver/tcpm/rt1715.c
+++ b/driver/tcpm/rt1715.c
@@ -28,14 +28,25 @@ static int rt1715_enable_ext_messages(int port, int enable)
static int rt1715_tcpci_tcpm_init(int port)
{
- int rv;
- /* RT1715 has a vendor-defined register reset */
- rv = tcpc_update8(port, RT1715_REG_VENDOR_7,
- RT1715_REG_VENDOR_7_SOFT_RESET, MASK_SET);
+ int rv, val;
+ /*
+ * Do not fully reinitialize the registers when leaving low-power mode.
+ * TODO(b/179234089): Generalize this concept in the tcpm_drv API.
+ */
+ rv = tcpc_read(port, RT1715_REG_VENDOR_5, &val);
if (rv)
return rv;
- msleep(10);
+ /* Only do soft-reset in shutdown mode. */
+ if (!(val & RT1715_REG_VENDOR_5_SHUTDOWN_OFF)) {
+ /* RT1715 has a vendor-defined register reset */
+ rv = tcpc_update8(port, RT1715_REG_VENDOR_7,
+ RT1715_REG_VENDOR_7_SOFT_RESET, MASK_SET);
+ if (rv)
+ return rv;
+
+ msleep(10);
+ }
rv = tcpc_update8(port, RT1715_REG_VENDOR_5,
RT1715_REG_VENDOR_5_SHUTDOWN_OFF, MASK_SET);