[PATCH] power: supply: bq24190: Fix NTC status decoding for BQ24193
From: Patrick Fischer via B4 Relay
Date: Mon Oct 26 2026 - 02:30:11 EST
From: Patrick Fischer <admin@xxxxxxxxxxxxxxxxxx>
The BQ24193 has a single thermistor input and applies the JEITA
temperature profile. Its NTC_FAULT field in REG09 is encoded
differently from the BQ24190, which has two TS inputs:
NTC_FAULT BQ24190 BQ24193
000 Normal Normal
010 TS1 Hot Warm
011 TS2 Cold Cool
101 Both Cold Cold
110 Both Hot Hot
(BQ24190/2/2I datasheet SLUSAW5B, table 17; BQ24193 datasheet
SLUSBG7A, table 16.)
Warm (45-60 C at the TS pin) and Cool (0-10 C) are not faults. The
charger keeps charging at a reduced charge voltage or charge current.
The BQ24193 uses bq24190_charger_get_ntc_status() though, so a warm
battery is reported as POWER_SUPPLY_HEALTH_OVERHEAT and a cool one as
POWER_SUPPLY_HEALTH_COLD.
Add a BQ24193 decoder that reports POWER_SUPPLY_HEALTH_WARM and
POWER_SUPPLY_HEALTH_COOL for these states. Cold and Hot are unchanged.
On an NVIDIA Tegra Note 7 (P1640) REG09 reads 0x02 after a few minutes
on USB power. The battery keeps charging, but the charger reports
health "Overheat". With this patch it reports "Warm" in that state and
"Good" while REG09 reads 0x00.
Fixes: afe5301bfbaa ("power: bq24190: Add BQ24193 support")
Signed-off-by: Patrick Fischer <admin@xxxxxxxxxxxxxxxxxx>
---
I kept this a pure decoding fix. Two things stay as they are and could
be follow-ups if you want them:
- The interrupt handler still logs a change to Warm or Cool as
"Fault: ... ntc 1", as it does for every change of REG09.
- bq24190_charger_get_health() checks the NTC bits first, so while the
battery is warm or cool the charger health hides a charge fault or
battery over-voltage.
Tool use (see Documentation/process/generated-content.rst): this patch,
its changelog and this note were prepared with an LLM coding assistant
(Claude Code). It compared the driver with both datasheets and wrote the
code change and the texts from my register dumps and instructions. I
reviewed the change and ran the test on the device.
---
drivers/power/supply/bq24190_charger.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
index 4bea6fd83c36..350cf79a0744 100644
--- a/drivers/power/supply/bq24190_charger.c
+++ b/drivers/power/supply/bq24190_charger.c
@@ -999,6 +999,30 @@ static int bq24190_charger_get_ntc_status(u8 value)
return health;
}
+static int bq24193_charger_get_ntc_status(u8 value)
+{
+ int health;
+
+ switch (value >> BQ24190_REG_F_NTC_FAULT_SHIFT & 0x7) {
+ case 0x2: /* Warm */
+ health = POWER_SUPPLY_HEALTH_WARM;
+ break;
+ case 0x3: /* Cool */
+ health = POWER_SUPPLY_HEALTH_COOL;
+ break;
+ case 0x5: /* Cold */
+ health = POWER_SUPPLY_HEALTH_COLD;
+ break;
+ case 0x6: /* Hot */
+ health = POWER_SUPPLY_HEALTH_OVERHEAT;
+ break;
+ default:
+ health = POWER_SUPPLY_HEALTH_UNKNOWN;
+ }
+
+ return health;
+}
+
static int bq24296_charger_get_ntc_status(u8 value)
{
int health;
@@ -2013,7 +2037,7 @@ static const struct bq24190_chip_info bq24190_chip_info_tbl[] = {
.check_chip = bq24190_check_chip,
.set_chg_config = bq24190_battery_set_chg_config,
.ntc_fault_mask = BQ24190_REG_F_NTC_FAULT_MASK,
- .get_ntc_status = bq24190_charger_get_ntc_status,
+ .get_ntc_status = bq24193_charger_get_ntc_status,
.set_otg_vbus = bq24190_set_otg_vbus,
},
[BQ24196] = {
---
base-commit: 734bef548a96e8774d6eef5dfa2026c6edc4e80b
change-id: 20261023-upstream-bq24190-ntc-f35ec3323449
Best regards,
--
Patrick Fischer <admin@xxxxxxxxxxxxxxxxxx>