diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2022-06-28 12:13:02 -0700 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-06-29 22:04:01 +0000 |
commit | d32978f7d43da4fb7844e87749685fcc8a4cc91d (patch) | |
tree | b1a33565a7e7690ac2c1829a69bc311e8774494b | |
parent | e4c264209e509db0b4ed674dab7012f40ca00d32 (diff) | |
download | chrome-ec-d32978f7d43da4fb7844e87749685fcc8a4cc91d.tar.gz |
chgstv2: Support bypass mode
This patch adds bypass mode to charge_state_v2. Bypass mode allows a
charger to deliver the input power directly from an adapter to the
system, avoiding loss in buck-boost conversion.
BUG=b:214057333
BRANCH=None
TEST=buildall
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Change-Id: Ia3c244190416cd9b9d89dac67cccf9bc033ed691
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3733417
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
-rw-r--r-- | common/charge_state_v2.c | 17 | ||||
-rw-r--r-- | include/battery_smart.h | 1 | ||||
-rw-r--r-- | include/charge_state_v2.h | 7 |
3 files changed, 25 insertions, 0 deletions
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c index 396e841d07..6e2ee3642f 100644 --- a/common/charge_state_v2.c +++ b/common/charge_state_v2.c @@ -945,6 +945,11 @@ test_mockable int calc_is_full(void) return ret; } +__overridable int board_should_charger_bypass(void) +{ + return false; +} + /* * Ask the charger for some voltage and current. If either value is 0, * charging is disabled; otherwise it's enabled. Negative values are ignored. @@ -953,6 +958,7 @@ static int charge_request(int voltage, int current) { int r1 = EC_SUCCESS, r2 = EC_SUCCESS, r3 = EC_SUCCESS, r4 = EC_SUCCESS; static int prev_volt, prev_curr; + bool should_bypass; if (!voltage || !current) { #ifdef CONFIG_CHARGER_NARROW_VDC @@ -980,6 +986,17 @@ static int charge_request(int voltage, int current) } /* + * Enable bypass mode if applicable. Transition from Bypass to Bypass + + * CHRG or backward is done after this call (by set_current & set_mode) + * thus not done here. Similarly, when bypass is disabled, transitioning + * from nvdc + chrg will be done separately. + */ + should_bypass = board_should_charger_bypass(); + if ((should_bypass && !(curr.chg.status & CHARGER_BYPASS_MODE)) + || (!should_bypass && (curr.chg.status & CHARGER_BYPASS_MODE))) + charger_enable_bypass_mode(0, should_bypass); + + /* * Set current before voltage so that if we are just starting * to charge, we allow some time (i2c delay) for charging circuit to * start at a voltage just above battery voltage before jumping diff --git a/include/battery_smart.h b/include/battery_smart.h index c37b7c692c..cdc69e4ffd 100644 --- a/include/battery_smart.h +++ b/include/battery_smart.h @@ -150,6 +150,7 @@ #define CHARGER_POWER_FAIL BIT(13) #define CHARGER_BATTERY_PRESENT BIT(14) #define CHARGER_AC_PRESENT BIT(15) +#define CHARGER_BYPASS_MODE BIT(16) /* Charger specification info */ #define INFO_CHARGER_SPEC(INFO) ((INFO) & 0xf) #define INFO_SELECTOR_SUPPORT(INFO) (((INFO) >> 4) & 1) diff --git a/include/charge_state_v2.h b/include/charge_state_v2.h index cdf6872aab..e94a31c242 100644 --- a/include/charge_state_v2.h +++ b/include/charge_state_v2.h @@ -223,4 +223,11 @@ __test_only void reset_prev_disp_charge(void); */ __test_only bool charging_progress_displayed(void); +/** + * Callback for boards to request charger to enable bypass mode on/off. + * + * @return True for requesting bypass on. False for requesting bypass off. + */ +int board_should_charger_bypass(void); + #endif /* __CROS_EC_CHARGE_STATE_V2_H */ |