diff options
author | Diana Z <dzigterman@chromium.org> | 2020-03-23 09:56:15 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-03-26 00:28:16 +0000 |
commit | 7107a70c8c583f128838fc48fef7a6ebbea91188 (patch) | |
tree | fd2a51e41602dfb64577dae444a3ff76c7df7770 | |
parent | 002db692bc570732d5a2c347085d71bec77c1402 (diff) | |
download | chrome-ec-7107a70c8c583f128838fc48fef7a6ebbea91188.tar.gz |
SM5803: Configure lower TINT threshold
In order to detect when temperatures have returned to a good range and
cease AP throttling, add the lower TINT threshold.
BUG=b:148289370
BRANCH=None
TEST=make -j buildall
Signed-off-by: Diana Z <dzigterman@chromium.org>
Change-Id: Id8a22c4220539e3959cd2f831552f57ab12853fd
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2115569
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r-- | driver/charger/sm5803.c | 30 | ||||
-rw-r--r-- | driver/charger/sm5803.h | 10 |
2 files changed, 30 insertions, 10 deletions
diff --git a/driver/charger/sm5803.c b/driver/charger/sm5803.c index 6f5f409406..75bc48fff5 100644 --- a/driver/charger/sm5803.c +++ b/driver/charger/sm5803.c @@ -186,8 +186,11 @@ static void sm5803_init(int chgnum) rv |= meas_write8(chgnum, SM5803_REG_VBUS_HIGH_TH, SM5803_VBUS_HIGH_LEVEL); - /* Set TINT for 360K (steps are in 0.43K) */ - rv |= meas_write8(chgnum, SM5803_REG_TINT_HIGH_TH, 0xD1); + /* Set TINT interrupts for 360 K and 330 K */ + rv |= meas_write8(chgnum, SM5803_REG_TINT_HIGH_TH, + SM5803_TINT_HIGH_LEVEL); + rv |= meas_write8(chgnum, SM5803_REG_TINT_LOW_TH, + SM5803_TINT_LOW_LEVEL); if (rv) CPRINTS("%s %d: Failed initialization", CHARGER_NAME, chgnum); @@ -206,7 +209,7 @@ static enum ec_error_list sm5803_post_init(int chgnum) void sm5803_handle_interrupt(int chgnum) { enum ec_error_list rv; - int int_reg, vbus_reg; + int int_reg, meas_reg; /* Note: Interrupt register is clear on read */ rv = main_read8(chgnum, SM5803_REG_INT2_REQ, &int_reg); @@ -217,21 +220,28 @@ void sm5803_handle_interrupt(int chgnum) } if (int_reg & SM5803_INT2_TINT) { - CPRINTS("%s %d: High temp, throttling AP", CHARGER_NAME, - chgnum); - throttle_ap(THROTTLE_ON, THROTTLE_HARD, THROTTLE_SRC_THERMAL); + rv = meas_read8(chgnum, SM5803_REG_TINT_MEAS_MSB, &meas_reg); + if (meas_reg <= SM5803_TINT_LOW_LEVEL) + throttle_ap(THROTTLE_OFF, THROTTLE_HARD, + THROTTLE_SRC_THERMAL); + else if (meas_reg >= SM5803_TINT_HIGH_LEVEL) + throttle_ap(THROTTLE_ON, THROTTLE_HARD, + THROTTLE_SRC_THERMAL); + else + CPRINTS("%s %d: Unexpected TINT interrupt: 0x%02x", + CHARGER_NAME, chgnum, meas_reg); } if ((int_reg & SM5803_INT2_VBUS) && !sm5803_is_sourcing_otg_power(chgnum, chgnum)) { - rv = meas_read8(chgnum, SM5803_REG_VBUS_MEAS_MSB, &vbus_reg); - if (vbus_reg <= SM5803_VBUS_LOW_LEVEL) + rv = meas_read8(chgnum, SM5803_REG_VBUS_MEAS_MSB, &meas_reg); + if (meas_reg <= SM5803_VBUS_LOW_LEVEL) usb_charger_vbus_change(chgnum, 0); - else if (vbus_reg >= SM5803_VBUS_HIGH_LEVEL) + else if (meas_reg >= SM5803_VBUS_HIGH_LEVEL) usb_charger_vbus_change(chgnum, 1); else CPRINTS("%s %d: Unexpected Vbus interrupt: 0x%02x", - CHARGER_NAME, chgnum, vbus_reg); + CHARGER_NAME, chgnum, meas_reg); } } diff --git a/driver/charger/sm5803.h b/driver/charger/sm5803.h index 8b96ac8f94..09a47b423e 100644 --- a/driver/charger/sm5803.h +++ b/driver/charger/sm5803.h @@ -111,6 +111,7 @@ enum sm5803_gpio0_modes { /* Note: Threshold registers all assume lower 2 bits are 0 */ #define SM5803_REG_VBUS_LOW_TH 0x1B #define SM5803_REG_VBUS_HIGH_TH 0x2B +#define SM5803_REG_TINT_LOW_TH 0x1D #define SM5803_REG_TINT_HIGH_TH 0x2D /* @@ -120,6 +121,13 @@ enum sm5803_gpio0_modes { #define SM5803_VBUS_LOW_LEVEL 0x25 #define SM5803_VBUS_HIGH_LEVEL 0x2C +/* + * TINT thresholds. TINT steps are in 0.43 K with the upper threshold set to + * 360 K and lower threshold to de-assert PROCHOT at 330 K. + */ +#define SM5803_TINT_LOW_LEVEL 0xBF +#define SM5803_TINT_HIGH_LEVEL 0xD1 + #define SM5803_REG_VBUS_MEAS_MSB 0x48 #define SM5803_REG_VBUS_MEAS_LSB 0x49 #define SM5803_VBUS_MEAS_LSB GENMASK(1, 0) @@ -128,6 +136,8 @@ enum sm5803_gpio0_modes { #define SM5803_VBUS_MEAS_OV_TEMP BIT(5) #define SM5803_VBUS_MEAS_CHG_DET BIT(6) +#define SM5803_REG_TINT_MEAS_MSB 0x4E + /* Charger registers (address 0x32) */ #define SM5803_REG_FLOW1 0x1C |