summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2022-01-27 10:53:57 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-05-12 14:14:16 +0000
commitb8e0530e517cb94bdec9805dce72cbfc9cc2b7c8 (patch)
tree5e807f71e68ce6ed319337b0d345484783d74c52
parentd1b1f0e60dd901a27d34b4a6dfd9df7c22d47bba (diff)
downloadchrome-ec-stabilize-14816.84.B-main.tar.gz
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.c36
-rw-r--r--zephyr/test/drivers/src/isl923x.c5
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, &reg);
+ 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, &reg))
+ 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;