From 726d6b72d5fc9f2a61093ab676463cba06f3431d Mon Sep 17 00:00:00 2001 From: Tommy Chung Date: Fri, 29 Oct 2021 14:46:14 +0800 Subject: charger: Enable hw ramp for active_chg_chip There're some boards with more than one chg chips included (OCPC). We should set the "active chg chips" when we call charger_set_hw_ramp. BUG=b:196928096 BRANCH=none TEST=make sure that hw ramp enabled on the active chg chip. Signed-off-by: Tommy Chung Change-Id: I98c8ca3a189ed1794c06a789a5e685b5d8a8aa12 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3252564 Reviewed-by: Diana Z Reviewed-by: Devin Lu --- common/charger.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/common/charger.c b/common/charger.c index 717759fe1c..d2707473c8 100644 --- a/common/charger.c +++ b/common/charger.c @@ -624,17 +624,25 @@ enum ec_error_list charger_set_option(int option) enum ec_error_list charger_set_hw_ramp(int enable) { - int chgnum = 0; + int chgnum; + int rv = EC_ERROR_UNIMPLEMENTED; - if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) { - CPRINTS("%s(%d) Invalid charger!", __func__, chgnum); - return EC_ERROR_INVAL; + for (chgnum = 0; chgnum < board_get_charger_chip_count(); chgnum++) { + /* Check if the chg chip supports set_hw_ramp. */ + if (chg_chips[chgnum].drv->set_hw_ramp) { + if (enable) { + /* Check if this is the active chg chip. */ + if (chgnum == charge_get_active_chg_chip()) + rv = chg_chips[chgnum].drv->set_hw_ramp(chgnum, 1); + /* This is not the active chg chip, disable hw_ramp. */ + else + rv = chg_chips[chgnum].drv->set_hw_ramp(chgnum, 0); + } else + rv = chg_chips[chgnum].drv->set_hw_ramp(chgnum, 0); + } } - if (!chg_chips[chgnum].drv->set_hw_ramp) - return EC_ERROR_UNIMPLEMENTED; - - return chg_chips[chgnum].drv->set_hw_ramp(chgnum, enable); + return rv; } #ifdef CONFIG_CHARGE_RAMP_HW -- cgit v1.2.1