summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2020-03-23 09:56:15 -0600
committerCommit Bot <commit-bot@chromium.org>2020-03-26 00:28:16 +0000
commit7107a70c8c583f128838fc48fef7a6ebbea91188 (patch)
treefd2a51e41602dfb64577dae444a3ff76c7df7770
parent002db692bc570732d5a2c347085d71bec77c1402 (diff)
downloadchrome-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.c30
-rw-r--r--driver/charger/sm5803.h10
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