summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2019-10-04 14:28:28 +0800
committerCommit Bot <commit-bot@chromium.org>2019-10-08 07:34:04 +0000
commitf483ce792c4b15f9f49264d44e449b3628b13df7 (patch)
treef04f1d21e804f84e28e54c55a6b563ef06a803e6
parenta205c09ca95686739e74394a4aa0e23168110395 (diff)
downloadchrome-ec-f483ce792c4b15f9f49264d44e449b3628b13df7.tar.gz
charger/mt6370: fix the disable sequence of bc12 detection
BC12_DET_EN should be disabled after mt6370 stops bc12 detection. Otherwise, race condition may happen because both ap and charger have access to D+ and D- pins. BUG=b:141005922 TEST=make sure b:141005922 is not reproducible after this fix. BRANCH=master Change-Id: I89750efe58ba65b72bc47ee42c4923e560d9d534 Signed-off-by: Ting Shen <phoenixshen@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1839711 Reviewed-by: Yilun Lin <yllin@chromium.org> Tested-by: Ting Shen <phoenixshen@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--driver/charger/rt946x.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c
index 95804c9935..eec6abff26 100644
--- a/driver/charger/rt946x.c
+++ b/driver/charger/rt946x.c
@@ -258,11 +258,20 @@ static int rt946x_reset_to_zero(void)
static int rt946x_enable_bc12_detection(int en)
{
#if defined(CONFIG_CHARGER_RT9467) || defined(CONFIG_CHARGER_MT6370)
+ int rv;
+
+ if (en) {
#ifdef CONFIG_CHARGER_MT6370_BC12_GPIO
- gpio_set_level(GPIO_BC12_DET_EN, en);
+ gpio_set_level(GPIO_BC12_DET_EN, 1);
#endif /* CONFIG_CHARGER_MT6370_BC12_GPIO */
- return (en ? rt946x_set_bit : rt946x_clr_bit)
- (RT946X_REG_DPDM1, RT946X_MASK_USBCHGEN);
+ return rt946x_set_bit(RT946X_REG_DPDM1, RT946X_MASK_USBCHGEN);
+ }
+
+ rv = rt946x_clr_bit(RT946X_REG_DPDM1, RT946X_MASK_USBCHGEN);
+#ifdef CONFIG_CHARGER_MT6370_BC12_GPIO
+ gpio_set_level(GPIO_BC12_DET_EN, 0);
+#endif /* CONFIG_CHARGER_MT6370_BC12_GPIO */
+ return rv;
#endif
return 0;
}