diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2021-05-28 10:48:14 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-08-12 06:26:08 +0000 |
commit | b55081fd7232797ac734f347bdfbf87a3c9c107f (patch) | |
tree | bfa88550a366663d148a79156de7fb758d684e4a | |
parent | 41b421ece4a0d2410dab38febe85996577d1fd7c (diff) | |
download | chrome-ec-b55081fd7232797ac734f347bdfbf87a3c9c107f.tar.gz |
chgstv2: Refactor charger_discharge_on_ac
This patch makes charger_discharge_on_ac call board_discharge_on_ac.
It also makes set_chg_ctrl_mode call charger_discharge_on_ac. This
makes sense since when the charge control mode changes,
discharge-on-ac also needs to be enabled or disabled.
BUG=b:188457962
BRANCH=none
TEST=make runhosttests
Change-Id: I65ec09f580afc987cc86f4c60c15c1f90ead6c3c
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2986848
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3088963
Tested-by: Eric Yilun Lin <yllin@google.com>
Auto-Submit: Eric Yilun Lin <yllin@google.com>
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Commit-Queue: Eric Yilun Lin <yllin@google.com>
-rw-r--r-- | common/charge_state_v2.c | 61 | ||||
-rw-r--r-- | common/charger.c | 3 | ||||
-rw-r--r-- | include/ec_commands.h | 2 |
3 files changed, 37 insertions, 29 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 7222af1f37..8ebc54052d 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -1409,23 +1409,45 @@ void chgstate_set_manual_voltage(int volt_mv) /* Force charging off before the battery is full. */ static int set_chg_ctrl_mode(enum ec_charge_control_mode mode) { + bool discharge_on_ac = false; + int current, voltage; + int rv; + + current = manual_current; + voltage = manual_voltage; + + if (mode >= CHARGE_CONTROL_COUNT) + return EC_ERROR_INVAL; + if (mode == CHARGE_CONTROL_NORMAL) { - chg_ctl_mode = mode; - manual_current = -1; - manual_voltage = -1; + current = -1; + voltage = -1; } else { - /* - * Changing mode is only meaningful if external power is - * present. If it's not present we can't charge anyway. - */ + /* Changing mode is only meaningful if AC is present. */ if (!curr.ac) return EC_ERROR_NOT_POWERED; - chg_ctl_mode = mode; - manual_current = 0; - manual_voltage = 0; + if (mode == CHARGE_CONTROL_DISCHARGE) { + if (!IS_ENABLED(CONFIG_CHARGER_DISCHARGE_ON_AC)) + return EC_ERROR_UNIMPLEMENTED; + discharge_on_ac = true; + } else if (mode == CHARGE_CONTROL_IDLE) { + current = 0; + voltage = 0; + } + } + + if (IS_ENABLED(CONFIG_CHARGER_DISCHARGE_ON_AC)) { + rv = charger_discharge_on_ac(discharge_on_ac); + if (rv != EC_SUCCESS) + return rv; } + /* Commit all atomically */ + chg_ctl_mode = mode; + manual_current = current; + manual_voltage = voltage; + return EC_SUCCESS; } @@ -2696,16 +2718,6 @@ charge_command_charge_control(struct host_cmd_handler_args *args) if (rv != EC_SUCCESS) return EC_RES_ERROR; -#ifdef CONFIG_CHARGER_DISCHARGE_ON_AC -#ifdef CONFIG_CHARGER_DISCHARGE_ON_AC_CUSTOM - rv = board_discharge_on_ac(p->mode == CHARGE_CONTROL_DISCHARGE); -#else - rv = charger_discharge_on_ac(p->mode == CHARGE_CONTROL_DISCHARGE); -#endif - if (rv != EC_SUCCESS) - return EC_RES_ERROR; -#endif - return EC_RES_SUCCESS; } DECLARE_HOST_COMMAND(EC_CMD_CHARGE_CONTROL, charge_command_charge_control, @@ -2911,7 +2923,6 @@ static int command_chgstate(int argc, char **argv) CHARGE_CONTROL_NORMAL); if (rv) return rv; -#ifdef CONFIG_CHARGER_DISCHARGE_ON_AC } else if (!strcasecmp(argv[1], "discharge")) { if (argc <= 2) return EC_ERROR_PARAM_COUNT; @@ -2921,14 +2932,6 @@ static int command_chgstate(int argc, char **argv) CHARGE_CONTROL_NORMAL); if (rv) return rv; -#ifdef CONFIG_CHARGER_DISCHARGE_ON_AC_CUSTOM - rv = board_discharge_on_ac(val); -#else - rv = charger_discharge_on_ac(val); -#endif /* CONFIG_CHARGER_DISCHARGE_ON_AC_CUSTOM */ - if (rv) - return rv; -#endif /* CONFIG_CHARGER_DISCHARGE_ON_AC */ } else if (!strcasecmp(argv[1], "debug")) { if (argc <= 2) return EC_ERROR_PARAM_COUNT; diff --git a/common/charger.c b/common/charger.c index e3d77976ae..764f8b7ba7 100644 --- a/common/charger.c +++ b/common/charger.c @@ -456,6 +456,9 @@ enum ec_error_list charger_discharge_on_ac(int enable) int chgnum; int rv = EC_ERROR_UNIMPLEMENTED; + if (IS_ENABLED(CONFIG_CHARGER_DISCHARGE_ON_AC_CUSTOM)) + return board_discharge_on_ac(enable); + /* * When discharge on AC is selected, cycle through all chargers to * enable or disable this feature. diff --git a/include/ec_commands.h b/include/ec_commands.h index 11fedccc99..d69a56377c 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -4254,6 +4254,8 @@ enum ec_charge_control_mode { CHARGE_CONTROL_NORMAL = 0, CHARGE_CONTROL_IDLE, CHARGE_CONTROL_DISCHARGE, + /* Add no more entry below. */ + CHARGE_CONTROL_COUNT, }; #define EC_CHARGE_MODE_TEXT { \ |