diff options
author | Li Feng <li1.feng@intel.com> | 2022-09-08 17:31:12 -0700 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-09-12 18:07:16 +0000 |
commit | 866baf5818e7bda257f8f21ffe02b1a5cead3331 (patch) | |
tree | d23e8cfa00b6f9a80e88dbfccd7c0749a58364ad | |
parent | b5c0f7c078c94caa75e0303d797b0ec3e589455f (diff) | |
download | chrome-ec-866baf5818e7bda257f8f21ffe02b1a5cead3331.tar.gz |
retimer: HB: retry initial read attempt if it fails
For HB, the i2c controller needs more delay to be ready.
CL:3873652 increases the delay after retimer reset, but the 50 msec
fixed delay causes issues with the retimer getting configured
properly.
This patch sets the delay back to 1ms, but adds
an additional read attempt to give sufficent time for the i2c
controller to respond.
BUG=none
BRANCH=none
TEST=build, and no retimer read failure.
Signed-off-by: Li Feng <li1.feng@intel.com>
Change-Id: I4f12c08ae1f16001791242972fe91704c8e8afae
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3885589
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
Reviewed-by: Scott Collyer <scollyer@chromium.org>
Reviewed-by: Diana Z <dzigterman@chromium.org>
-rw-r--r-- | driver/retimer/bb_retimer.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/driver/retimer/bb_retimer.c b/driver/retimer/bb_retimer.c index 4123e76c23..a41c056a53 100644 --- a/driver/retimer/bb_retimer.c +++ b/driver/retimer/bb_retimer.c @@ -597,8 +597,16 @@ static int retimer_init(const struct usb_mux *me) return rv; rv = bb_retimer_read(me, BB_RETIMER_REG_VENDOR_ID, &data); + /* + * After reset, i2c controller may not be ready, if this fails, + * retry one more time. + * TODO: revisit the delay time after retimer reset. + */ + if (rv != EC_SUCCESS) + rv = bb_retimer_read(me, BB_RETIMER_REG_VENDOR_ID, &data); if (rv != EC_SUCCESS) return rv; + CPRINTS("C%d: retimer power enable success", me->usb_port); #ifdef CONFIG_USBC_RETIMER_INTEL_HB if (data != BB_RETIMER_DEVICE_ID) return EC_ERROR_INVAL; |