From 9de97e87547dd929e377b80b95ee279d0087feba Mon Sep 17 00:00:00 2001 From: Vic Yang Date: Tue, 10 Feb 2015 21:24:01 -0800 Subject: [PATCH] charge_state_v2: Do not draw max input current if battery is present Currently we set the input current limit to its maximum when the system is unlocked, so that we can boot the system with a powerful charger when the battery is absent. However, with a low power charger, we risk browning out the charger. If the battery is present, reduce the input current limit so that low power chargers work in this case. BRANCH=None BUG=None TEST=On Ryu, reboot EC when the a low power charger is used. Without this change, the charger browns out right after the reboot. With this fix, the problem doesn't happen anymore. Change-Id: I9d491cbe45e77f864198c97a47624918e6c272db Signed-off-by: Vic Yang Reviewed-on: https://chromium-review.googlesource.com/248442 Reviewed-by: Alec Berg Commit-Queue: Vic Yang Tested-by: Vic Yang --- common/charge_state_v2.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 445819fc4e..9ee92396c0 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -522,21 +522,9 @@ const struct batt_params *charger_current_battery_params(void) void charger_init(void) { - const struct charger_info * const info = charger_get_info(); - /* Initialize current state */ memset(&curr, 0, sizeof(curr)); curr.batt.is_present = BP_NOT_SURE; - - /* - * If system is not locked, then use max input current limit so - * that if there is no battery present, we can pull as much power - * as needed. If battery is present, then input current will be - * immediately lowered to the real desired value. - */ - curr.desired_input_current = system_is_locked() ? - CONFIG_CHARGER_INPUT_CURRENT : - info->input_current_max; } DECLARE_HOOK(HOOK_INIT, charger_init, HOOK_PRIO_DEFAULT); @@ -555,6 +543,17 @@ void charger_task(void) shutdown_warning_time.val = 0UL; battery_seems_to_be_dead = 0; + /* + * If system is not locked and we don't have a battery to live on, + * then use max input current limit so that we can pull as much power + * as needed. + */ + battery_get_params(&curr.batt); + if (curr.batt.is_present == BP_YES || system_is_locked()) + curr.desired_input_current = CONFIG_CHARGER_INPUT_CURRENT; + else + curr.desired_input_current = info->input_current_max; + while (1) { #ifdef CONFIG_SB_FIRMWARE_UPDATE