diff options
author | Scott Chao <scott_chao@wistron.corp-partner.google.com> | 2021-02-03 20:39:11 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-09 17:17:56 +0000 |
commit | 6ae2929b858eaea2d7a565c5dbb11ae25208aee7 (patch) | |
tree | 5b58d6f7b65279968ba993ed642e2bb476c3ea66 | |
parent | 57fb28a3cdd4039da4f13060093992991c17db1e (diff) | |
download | chrome-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.c | 21 |
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); |