summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-09-16 14:36:47 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-09-21 19:38:00 -0700
commit0821405e40fa2634038d11d580b73076d7416d7d (patch)
tree39eec64ce205e218d4b1a3fd8c8e98c96d622efd
parent27a5f046320b9274b247f19ee339bbf7f787abe6 (diff)
downloadchrome-ec-0821405e40fa2634038d11d580b73076d7416d7d.tar.gz
charger v2: Don't set charger current limit if capability is unknown
If charge_manager has not decided on a current limit, don't set a minimum current limit, since we may brown-out in the no / low-battery case. BUG=chrome-os-partner:56139 BRANCH=None TEST=Manual on kevin, attach cut-off battery, attach OEM charger, verify system doesn't brown-out due to OC. Change-Id: Id53eb32c4a8ac9c6d9a0d3f1d700f089a50fcb0f Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/386793 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--board/kevin/board.c6
-rw-r--r--board/kevin/board.h4
-rw-r--r--common/charge_manager.c3
-rw-r--r--common/charge_state_v2.c21
-rw-r--r--include/charge_manager.h2
5 files changed, 21 insertions, 15 deletions
diff --git a/board/kevin/board.c b/board/kevin/board.c
index fb134c31e4..ff070f1167 100644
--- a/board/kevin/board.c
+++ b/board/kevin/board.c
@@ -208,8 +208,8 @@ int board_set_active_charge_port(int charge_port)
*/
if (!initialized &&
charge_port == CHARGE_PORT_NONE &&
- charge_get_percent() < 2) {
- CPRINTS("Battery critical, don't disable charging");
+ charge_get_percent() < CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON) {
+ CPRINTS("Bat critical, don't stop charging");
return -1;
}
@@ -244,7 +244,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma)
*/
if (supplier == CHARGE_SUPPLIER_PD &&
charge_ma < 1500 &&
- charge_get_percent() < 2) {
+ charge_get_percent() < CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON) {
CPRINTS("Using max ilim %d", max_ma);
charge_ma = max_ma;
}
diff --git a/board/kevin/board.h b/board/kevin/board.h
index 1b190e0a07..85b2cfeda3 100644
--- a/board/kevin/board.h
+++ b/board/kevin/board.h
@@ -63,8 +63,8 @@
#define CONFIG_CHARGER_INPUT_CURRENT 512
#define CONFIG_CHARGER_NARROW_VDC
#define CONFIG_CHARGER_V2
-#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 1
-#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 1
+#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 2
+#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 2
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 15000
#define CONFIG_USB_CHARGER
#define CONFIG_USB_MUX_VIRTUAL
diff --git a/common/charge_manager.c b/common/charge_manager.c
index eeac1211fb..eeae350f10 100644
--- a/common/charge_manager.c
+++ b/common/charge_manager.c
@@ -889,8 +889,7 @@ int charge_manager_get_active_charge_port(void)
*/
int charge_manager_get_charger_current(void)
{
- return (charge_current != CHARGE_CURRENT_UNINITIALIZED) ?
- charge_current : 0;
+ return charge_current;
}
/**
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index 611f60b2a1..8ff268709c 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -571,13 +571,15 @@ void charger_init(void)
}
DECLARE_HOOK(HOOK_INIT, charger_init, HOOK_PRIO_DEFAULT);
-int get_desired_input_current(enum battery_present batt_present,
- const struct charger_info * const info)
+static int get_desired_input_current(enum battery_present batt_present,
+ const struct charger_info * const info)
{
if (batt_present == BP_YES || system_is_locked()) {
#ifdef CONFIG_CHARGE_MANAGER
- return MAX(CONFIG_CHARGER_INPUT_CURRENT,
- charge_manager_get_charger_current());
+ int ilim = charge_manager_get_charger_current();
+ return ilim == CHARGE_CURRENT_UNINITIALIZED ?
+ CHARGE_CURRENT_UNINITIALIZED :
+ MAX(CONFIG_CHARGER_INPUT_CURRENT, ilim);
#else
return CONFIG_CHARGER_INPUT_CURRENT;
#endif
@@ -640,8 +642,10 @@ void charger_task(void)
if (rv != EC_SUCCESS) {
problem(PR_POST_INIT, rv);
} else {
- rv = charger_set_input_current(
- curr.desired_input_current);
+ if (curr.desired_input_current !=
+ CHARGE_CURRENT_UNINITIALIZED)
+ rv = charger_set_input_current(
+ curr.desired_input_current);
if (rv != EC_SUCCESS)
problem(PR_SET_INPUT_CURR, rv);
else
@@ -666,7 +670,10 @@ void charger_task(void)
curr.desired_input_current =
get_desired_input_current(prev_bp, info);
- charger_set_input_current(curr.desired_input_current);
+ if (curr.desired_input_current !=
+ CHARGE_CURRENT_UNINITIALIZED)
+ charger_set_input_current(
+ curr.desired_input_current);
hook_notify(HOOK_BATTERY_SOC_CHANGE);
}
diff --git a/include/charge_manager.h b/include/charge_manager.h
index 3623bc1635..51007f3d7b 100644
--- a/include/charge_manager.h
+++ b/include/charge_manager.h
@@ -83,7 +83,7 @@ int charge_manager_get_active_charge_port(void);
/* Return the power limit (uW) set by charge manager. */
int charge_manager_get_power_limit_uw(void);
-/* Return the charger current (mA) value. */
+/* Return the charger current (mA) value or CHARGE_CURRENT_UNINITIALIZED. */
int charge_manager_get_charger_current(void);
#ifdef CONFIG_USB_PD_LOGGING