summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Feng <li1.feng@intel.com>2022-09-08 17:31:12 -0700
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-09-12 18:07:16 +0000
commit866baf5818e7bda257f8f21ffe02b1a5cead3331 (patch)
treed23e8cfa00b6f9a80e88dbfccd7c0749a58364ad
parentb5c0f7c078c94caa75e0303d797b0ec3e589455f (diff)
downloadchrome-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.c8
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;