summaryrefslogtreecommitdiff
path: root/driver/charger/bd9995x.c
diff options
context:
space:
mode:
authorWonjoon Lee <woojoo.lee@samsung.com>2017-01-27 17:00:03 -0800
committerchrome-bot <chrome-bot@chromium.org>2017-01-28 01:52:15 -0800
commitef976e6387c19b49232618493653ebfdd132d676 (patch)
tree41b1d3ed2ca3df6e3104b41db5c853fbf8a44b15 /driver/charger/bd9995x.c
parent79a1e2072d512d943cbac4a96497ff07fc42e834 (diff)
downloadchrome-ec-ef976e6387c19b49232618493653ebfdd132d676.tar.gz
bd9995x: more delay time between chg_en and vsys_set
The nvdc voltage has a kind of deep, so that rarely observed NVDC down at this point because of back-boosting. Our sequence to enable charger bit and setting vsysreg is correct but rohm introduce charger may need some more time to be stable when between chg_en and vsys_set to start charge BUG=chrome-os-partner:60380 BRANCH=gru TEST=Manual on kevin, trigger battery disconnect, re-attach AC, verify system boots cleanly. and see voltage probing on c54@60380 Change-Id: Ic05091379322ffaac16fe827a47345c76c85f3e5 Signed-off-by: Wonjoon Lee <woojoo.lee@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/434252 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'driver/charger/bd9995x.c')
-rw-r--r--driver/charger/bd9995x.c34
1 files changed, 23 insertions, 11 deletions
diff --git a/driver/charger/bd9995x.c b/driver/charger/bd9995x.c
index c668aa5260..e28eeb0db2 100644
--- a/driver/charger/bd9995x.c
+++ b/driver/charger/bd9995x.c
@@ -541,19 +541,31 @@ int charger_get_status(int *status)
int charger_set_mode(int mode)
{
- int rv;
+ int rv, inhibit_chg;
+ static int inhibit_chg_prev = -1;
- if (mode & CHARGE_FLAG_INHIBIT_CHARGE) {
- rv = bd9995x_set_vsysreg(BD9995X_DISCHARGE_VSYSREG);
- msleep(50);
- rv |= bd9995x_charger_enable(0);
- } else {
- rv = bd9995x_charger_enable(1);
- msleep(1);
- rv |= bd9995x_set_vsysreg(BD9995X_CHARGE_VSYSREG);
+ inhibit_chg = mode & CHARGE_FLAG_INHIBIT_CHARGE;
+
+ if (inhibit_chg != inhibit_chg_prev) {
+ if (inhibit_chg) {
+ rv = bd9995x_set_vsysreg(BD9995X_DISCHARGE_VSYSREG);
+ msleep(50);
+ rv |= bd9995x_charger_enable(0);
+ } else {
+ rv = bd9995x_charger_enable(1);
+ /*
+ * BGATE capacitor max : 0.1uF + 20%
+ * Charge MOSFET threshold max : 2.8V
+ * BGATE charge pump current min : 3uA
+ * T = C * V / I so, Tmax = 112ms
+ */
+ msleep(115);
+ rv |= bd9995x_set_vsysreg(BD9995X_CHARGE_VSYSREG);
+ }
+ inhibit_chg_prev = inhibit_chg;
+ if (rv)
+ return rv;
}
- if (rv)
- return rv;
if (mode & CHARGE_FLAG_POR_RESET) {
rv = bd9995x_por_reset();