summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2020-04-28 14:35:51 -0600
committerCommit Bot <commit-bot@chromium.org>2020-04-30 01:10:12 +0000
commita66be5cd01bf2a9a235a08b7461dee03949decba (patch)
treefe44d3269e78a3392c5c189e5872a768c0ddba8e
parent7074e6795b8465de65902875b187c0a73cebb717 (diff)
downloadchrome-ec-a66be5cd01bf2a9a235a08b7461dee03949decba.tar.gz
SM5803: Only enable auto charging when battery is present
Enabling auto charging bits when the battery is not present can cause Vsys to brown out when the charger believes charging is complete. This uses the battery presence in the driver as an indicator for whether these bits should be set when enabling the charger. BRANCH=None BUG=None TEST=on waddledee with no battery and charger connected to C0, Vsys does not brown out Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: I3714261f9394b101ddeb76889ebcecba6b61d456 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2173159 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--driver/charger/sm5803.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/driver/charger/sm5803.c b/driver/charger/sm5803.c
index 2b2ca572bf..077551a3ef 100644
--- a/driver/charger/sm5803.c
+++ b/driver/charger/sm5803.c
@@ -5,6 +5,7 @@
* Silicon Mitus SM5803 Buck-Boost Charger
*/
#include "atomic.h"
+#include "battery.h"
#include "battery_smart.h"
#include "charger.h"
#include "gpio.h"
@@ -387,15 +388,17 @@ static enum ec_error_list sm5803_set_mode(int chgnum, int mode)
}
/*
- * Note: Charge may be enabled while OTG is enabled, but should be
- * disabled whenever inhibit is called.
+ * Note: Charge may be enabled while OTG is enabled, but charge inhibit
+ * should also turn off OTG. Battery charging flags should only be set
+ * when battery is present.
*/
if (mode & CHARGE_FLAG_INHIBIT_CHARGE) {
flow1_reg = 0;
flow2_reg &= ~SM5803_FLOW2_AUTO_ENABLED;
} else {
flow1_reg |= SM5803_FLOW1_CHG_EN;
- flow2_reg |= SM5803_FLOW2_AUTO_ENABLED;
+ if (battery_is_present() == BP_YES)
+ flow2_reg |= SM5803_FLOW2_AUTO_ENABLED;
}
rv = chg_write8(chgnum, SM5803_REG_FLOW1, flow1_reg);