diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2022-01-27 10:53:57 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-05-12 14:14:16 +0000 |
commit | b8e0530e517cb94bdec9805dce72cbfc9cc2b7c8 (patch) | |
tree | 5e807f71e68ce6ed319337b0d345484783d74c52 | |
parent | d1b1f0e60dd901a27d34b4a6dfd9df7c22d47bba (diff) | |
download | chrome-ec-stabilize-14816.131.B-main.tar.gz |
isl923x: disable AMON/BMON after use.stabilize-14816.84.B-mainstabilize-14816.82.B-mainstabilize-14816.131.B-mainrelease-R103-14816.B-main
Disable the AMON/BMON when it's not using to reduce
power consumption.
BUG=b:215659327
TEST=check ISL9238C control1 bit5 is set.
BRANCH=none
Change-Id: I53b2177ec9683661daac7b99be88ad7113b7377b
Signed-off-by: Eric Yilun Lin <yllin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3419358
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Tested-by: Eric Yilun Lin <yllin@google.com>
Commit-Queue: Eric Yilun Lin <yllin@google.com>
-rw-r--r-- | driver/charger/isl923x.c | 36 | ||||
-rw-r--r-- | zephyr/test/drivers/src/isl923x.c | 5 |
2 files changed, 27 insertions, 14 deletions
diff --git a/driver/charger/isl923x.c b/driver/charger/isl923x.c index 5911e3276c..c90fe5224e 100644 --- a/driver/charger/isl923x.c +++ b/driver/charger/isl923x.c @@ -198,13 +198,24 @@ static int get_amon_bmon(int chgnum, enum isl923x_amon_bmon amon, ret = raw_write16(chgnum, ISL923X_REG_CONTROL1, reg); } - mutex_unlock(&control1_mutex_isl923x); - if (ret) - return ret; + goto err; *adc = adc_read_channel(ADC_AMON_BMON); + ret = raw_read16(chgnum, ISL923X_REG_CONTROL1, ®); + if (ret) + goto err; + + /* Disable monitor */ + reg |= ISL923X_C1_DISABLE_MON; + + ret = raw_write16(chgnum, ISL923X_REG_CONTROL1, reg); + if (ret) + goto err; + +err: + mutex_unlock(&control1_mutex_isl923x); return ret; } #endif @@ -608,6 +619,16 @@ static void isl923x_init(int chgnum) goto init_fail; } + if (raw_read16(chgnum, ISL923X_REG_CONTROL1, ®)) + goto init_fail; + /* + * Disable amon/bmon by default. + */ + reg |= ISL923X_C1_DISABLE_MON; + + if (raw_write16(chgnum, ISL923X_REG_CONTROL1, reg)) + goto init_fail; + if (IS_ENABLED(CONFIG_TRICKLE_CHARGING)) if (raw_write16(chgnum, ISL923X_REG_SYS_VOLTAGE_MIN, precharge_voltage)) @@ -888,7 +909,7 @@ void raa489000_hibernate(int chgnum, bool disable_adc) */ regval |= RAA489000_C1_BGATE_FORCE_OFF; - /* Disable AMON/BMON */ + /* Disable AMON/BMON. MON is enabled at get_amon_bmon() */ regval |= ISL923X_C1_DISABLE_MON; /* Disable PSYS */ @@ -952,10 +973,6 @@ void raa489000_hibernate(int chgnum, bool disable_adc) enum ec_error_list isl9238c_hibernate(int chgnum) { - /* Disable IMON */ - RETURN_ERROR(raw_update16(chgnum, ISL923X_REG_CONTROL1, - ISL923X_C1_DISABLE_MON, MASK_SET)); - /* Disable PSYS */ RETURN_ERROR(raw_update16(chgnum, ISL923X_REG_CONTROL1, ISL923X_C1_ENABLE_PSYS, MASK_CLR)); @@ -976,9 +993,6 @@ enum ec_error_list isl9238c_resume(int chgnum) { /* Revert everything in isl9238c_hibernate() */ RETURN_ERROR(raw_update16(chgnum, ISL923X_REG_CONTROL1, - ISL923X_C1_DISABLE_MON, MASK_CLR)); - - RETURN_ERROR(raw_update16(chgnum, ISL923X_REG_CONTROL1, ISL923X_C1_ENABLE_PSYS, MASK_SET)); RETURN_ERROR(raw_update16(chgnum, ISL923X_REG_CONTROL2, diff --git a/zephyr/test/drivers/src/isl923x.c b/zephyr/test/drivers/src/isl923x.c index 12be885bfb..203a2ed979 100644 --- a/zephyr/test/drivers/src/isl923x.c +++ b/zephyr/test/drivers/src/isl923x.c @@ -1057,9 +1057,8 @@ ZTEST(isl923x_hibernate, test_isl9238c_resume) /* Part 1: Happy path */ control1_expected = - (isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1) & - ~ISL923X_C1_DISABLE_MON) | ISL923X_C1_ENABLE_PSYS - ; + isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL1) | + ISL923X_C1_ENABLE_PSYS; control2_expected = isl923x_emul_peek_reg(i2c_emul, ISL923X_REG_CONTROL2) & ~ISL923X_C2_COMPARATOR; |