summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-10-10 15:28:15 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-11-30 19:11:30 -0800
commitb1014fc6bf6a5e103c494d648ee615e7d0cc3136 (patch)
tree0f22e4623d265fa11a590335f470c04d133655ca
parenta285debf1f1d91ea767d6a79b7109c8c42f6f3f8 (diff)
downloadchrome-ec-b1014fc6bf6a5e103c494d648ee615e7d0cc3136.tar.gz
charger: Add CONFIG option to maintain VBAT voltage
On the bd9995*, back boosting may occur when actual battery voltage drops below VBAT register setting. Maintain the VBAT register at the battery-requested charge voltage even when not charging to ensure the bd9995* doesn't become a back boosted animal. BUG=chrome-os-partner:56139,chrome-os-partner:54248 BRANCH=gru TEST=Manual on kevin, unplug AC, run 'charger', verify that 'V_batt' is maintained at 8688 mV. Attach charger, verify 'V_batt' stays at 8688 mV and device charges. Change-Id: Ia0cc7f9279cb460e20a8faf332ad432067dc5482 Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/400087 Commit-Ready: Daisuke Nojiri <dnojiri@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r--board/kevin/board.h1
-rw-r--r--board/reef/board.h1
-rw-r--r--common/charge_state_v2.c24
-rw-r--r--include/config.h7
4 files changed, 23 insertions, 10 deletions
diff --git a/board/kevin/board.h b/board/kevin/board.h
index fc550fd7c1..3c57ec8982 100644
--- a/board/kevin/board.h
+++ b/board/kevin/board.h
@@ -61,6 +61,7 @@
#define CONFIG_CHARGER_BD99956
#define CONFIG_BD9995X_POWER_SAVE_MODE BD9995X_PWR_SAVE_HIGH
#define CONFIG_CHARGER_INPUT_CURRENT 512
+#define CONFIG_CHARGER_MAINTAIN_VBAT
#define CONFIG_CHARGER_V2
#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 2
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 2
diff --git a/board/reef/board.h b/board/reef/board.h
index 2829d27e62..80157e91df 100644
--- a/board/reef/board.h
+++ b/board/reef/board.h
@@ -62,6 +62,7 @@
#define CONFIG_CHARGER_INPUT_CURRENT 512
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 1
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 15000
+#define CONFIG_CHARGER_MAINTAIN_VBAT
#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 1
#define CONFIG_USB_CHARGER
#define CONFIG_CHARGER_PROFILE_OVERRIDE
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index dceec8d562..98461bb2c3 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -859,11 +859,13 @@ wait_for_it:
}
prev_full = is_full;
+#ifndef CONFIG_CHARGER_MAINTAIN_VBAT
/* Turn charger off if it's not needed */
if (curr.state == ST_IDLE || curr.state == ST_DISCHARGE) {
curr.requested_voltage = 0;
curr.requested_current = 0;
}
+#endif
/* Apply external limits */
if (curr.requested_current > user_current_limit)
@@ -882,8 +884,10 @@ wait_for_it:
* charging it. Thus, we only charge when AC is on and
* battery is not cut off yet.
*/
- if (battery_is_cut_off())
- charge_request(0, 0);
+ if (battery_is_cut_off()) {
+ curr.requested_voltage = 0;
+ curr.requested_current = 0;
+ }
/*
* As a safety feature, some chargers will stop
* charging if we don't communicate with it frequently
@@ -891,17 +895,17 @@ wait_for_it:
* knows.
*/
else if (manual_mode) {
- charge_request(curr.chg.voltage,
- curr.chg.current);
- } else {
- charge_request(curr.requested_voltage,
- curr.requested_current);
+ curr.requested_voltage = curr.chg.voltage;
+ curr.requested_current = curr.chg.current;
}
} else {
- charge_request(
- charger_closest_voltage(
- curr.batt.voltage + info->voltage_step), -1);
+#ifndef CONFIG_CHARGER_MAINTAIN_VBAT
+ curr.requested_voltage = charger_closest_voltage(
+ curr.batt.voltage + info->voltage_step);
+ curr.requested_current = -1;
+#endif
}
+ charge_request(curr.requested_voltage, curr.requested_current);
/* How long to sleep? */
if (problems_exist)
diff --git a/include/config.h b/include/config.h
index b1655d1017..76a5e9805d 100644
--- a/include/config.h
+++ b/include/config.h
@@ -479,6 +479,13 @@
*/
#undef CONFIG_CHARGER_MAX_INPUT_CURRENT
+/*
+ * Leave charger VBAT configured to battery-requested voltage under all
+ * conditions, even when AC is not present. This may be necessary to work
+ * around quirks of certain charger chips, such as the BD9995X.
+ */
+#undef CONFIG_CHARGER_MAINTAIN_VBAT
+
/* Minimum battery percentage for power on */
#undef CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON