diff options
author | Wonjoon Lee <woojoo.lee@samsung.com> | 2017-01-27 17:00:03 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-01-28 01:52:15 -0800 |
commit | ef976e6387c19b49232618493653ebfdd132d676 (patch) | |
tree | 41b1d3ed2ca3df6e3104b41db5c853fbf8a44b15 /driver/charger/bd9995x.c | |
parent | 79a1e2072d512d943cbac4a96497ff07fc42e834 (diff) | |
download | chrome-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.c | 34 |
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(); |