* [PATCH 1/5] power: supply: qcom_smbx: include base when petting watchdog
2026-08-11 23:29 [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties Robin Snyders via B4 Relay
@ 2026-08-11 23:29 ` Robin Snyders via B4 Relay
2026-08-17 14:28 ` Konrad Dybcio
2026-08-11 23:29 ` [PATCH 2/5] power: supply: qcom_smbx: test battery health status bits Robin Snyders via B4 Relay
` (4 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: Robin Snyders via B4 Relay @ 2026-08-11 23:29 UTC (permalink / raw)
To: Casey Connolly, Sebastian Reichel
Cc: Robin Snyders, linux-arm-msm, linux-pm, linux-kernel,
Sebastian Reichel, stable
From: Robin Snyders <robin@snyders.xyz>
BARK_BITE_WDOG_PET is an offset from the charger peripheral base, but
the watchdog bark handler writes it as an absolute SPMI address. This can
write another PMIC peripheral and leave the charger watchdog unserviced.
Add the charger base, as all other qcom_smbx register accesses do.
Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
Cc: stable@vger.kernel.org
Signed-off-by: Robin Snyders <robin@snyders.xyz>
---
drivers/power/supply/qcom_smbx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_smbx.c
index 67fdb43353388..e6f2328f295c7 100644
--- a/drivers/power/supply/qcom_smbx.c
+++ b/drivers/power/supply/qcom_smbx.c
@@ -764,7 +764,7 @@ static irqreturn_t smb_handle_wdog_bark(int irq, void *data)
power_supply_changed(chip->chg_psy);
- rc = regmap_write(chip->regmap, BARK_BITE_WDOG_PET,
+ rc = regmap_write(chip->regmap, chip->base + BARK_BITE_WDOG_PET,
BARK_BITE_WDOG_PET_BIT);
if (rc < 0)
dev_err(chip->dev, "Couldn't pet the dog rc=%d\n", rc);
--
2.54.0
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 1/5] power: supply: qcom_smbx: include base when petting watchdog
2026-08-11 23:29 ` [PATCH 1/5] power: supply: qcom_smbx: include base when petting watchdog Robin Snyders via B4 Relay
@ 2026-08-17 14:28 ` Konrad Dybcio
0 siblings, 0 replies; 10+ messages in thread
From: Konrad Dybcio @ 2026-08-17 14:28 UTC (permalink / raw)
To: robin, Casey Connolly, Sebastian Reichel
Cc: linux-arm-msm, linux-pm, linux-kernel, Sebastian Reichel, stable
On 8/12/26 1:29 AM, Robin Snyders via B4 Relay wrote:
> From: Robin Snyders <robin@snyders.xyz>
>
> BARK_BITE_WDOG_PET is an offset from the charger peripheral base, but
> the watchdog bark handler writes it as an absolute SPMI address. This can
> write another PMIC peripheral and leave the charger watchdog unserviced.
>
> Add the charger base, as all other qcom_smbx register accesses do.
>
> Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Robin Snyders <robin@snyders.xyz>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/5] power: supply: qcom_smbx: test battery health status bits
2026-08-11 23:29 [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties Robin Snyders via B4 Relay
2026-08-11 23:29 ` [PATCH 1/5] power: supply: qcom_smbx: include base when petting watchdog Robin Snyders via B4 Relay
@ 2026-08-11 23:29 ` Robin Snyders via B4 Relay
2026-08-17 14:29 ` Konrad Dybcio
2026-08-11 23:30 ` [PATCH 3/5] power: supply: qcom_smbx: fix float voltage selector Robin Snyders via B4 Relay
` (3 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: Robin Snyders via B4 Relay @ 2026-08-11 23:29 UTC (permalink / raw)
To: Casey Connolly, Sebastian Reichel
Cc: Robin Snyders, linux-arm-msm, linux-pm, linux-kernel,
Sebastian Reichel, stable
From: Robin Snyders <robin@snyders.xyz>
BATTERY_CHARGER_STATUS_2 contains independent status and fault bits.
Switching on the complete register only recognizes a fault when it is the
sole asserted bit, and can report a healthy battery when another status
bit is set at the same time.
Test the relevant fault bits in priority order, matching the Qualcomm
downstream driver handling.
Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
Cc: stable@vger.kernel.org
Signed-off-by: Robin Snyders <robin@snyders.xyz>
---
drivers/power/supply/qcom_smbx.c | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_smbx.c
index e6f2328f295c7..0e50d81aefc2a 100644
--- a/drivers/power/supply/qcom_smbx.c
+++ b/drivers/power/supply/qcom_smbx.c
@@ -632,26 +632,20 @@ static int smb_get_prop_health(struct smb_chip *chip, int *val)
return rc;
}
- switch (stat) {
- case CHARGER_ERROR_STATUS_BAT_OV_BIT:
+ if (stat & CHARGER_ERROR_STATUS_BAT_OV_BIT)
*val = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
- return 0;
- case BAT_TEMP_STATUS_TOO_COLD_BIT:
+ else if (stat & BAT_TEMP_STATUS_TOO_COLD_BIT)
*val = POWER_SUPPLY_HEALTH_COLD;
- return 0;
- case BAT_TEMP_STATUS_TOO_HOT_BIT:
+ else if (stat & BAT_TEMP_STATUS_TOO_HOT_BIT)
*val = POWER_SUPPLY_HEALTH_OVERHEAT;
- return 0;
- case BAT_TEMP_STATUS_COLD_SOFT_LIMIT_BIT:
+ else if (stat & BAT_TEMP_STATUS_COLD_SOFT_LIMIT_BIT)
*val = POWER_SUPPLY_HEALTH_COOL;
- return 0;
- case BAT_TEMP_STATUS_HOT_SOFT_LIMIT_BIT:
+ else if (stat & BAT_TEMP_STATUS_HOT_SOFT_LIMIT_BIT)
*val = POWER_SUPPLY_HEALTH_WARM;
- return 0;
- default:
+ else
*val = POWER_SUPPLY_HEALTH_GOOD;
- return 0;
- }
+
+ return 0;
}
static int smb_get_property(struct power_supply *psy,
--
2.54.0
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 2/5] power: supply: qcom_smbx: test battery health status bits
2026-08-11 23:29 ` [PATCH 2/5] power: supply: qcom_smbx: test battery health status bits Robin Snyders via B4 Relay
@ 2026-08-17 14:29 ` Konrad Dybcio
0 siblings, 0 replies; 10+ messages in thread
From: Konrad Dybcio @ 2026-08-17 14:29 UTC (permalink / raw)
To: robin, Casey Connolly, Sebastian Reichel
Cc: linux-arm-msm, linux-pm, linux-kernel, Sebastian Reichel, stable
On 8/12/26 1:29 AM, Robin Snyders via B4 Relay wrote:
> From: Robin Snyders <robin@snyders.xyz>
>
> BATTERY_CHARGER_STATUS_2 contains independent status and fault bits.
> Switching on the complete register only recognizes a fault when it is the
> sole asserted bit, and can report a healthy battery when another status
> bit is set at the same time.
>
> Test the relevant fault bits in priority order, matching the Qualcomm
> downstream driver handling.
>
> Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Robin Snyders <robin@snyders.xyz>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/5] power: supply: qcom_smbx: fix float voltage selector
2026-08-11 23:29 [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties Robin Snyders via B4 Relay
2026-08-11 23:29 ` [PATCH 1/5] power: supply: qcom_smbx: include base when petting watchdog Robin Snyders via B4 Relay
2026-08-11 23:29 ` [PATCH 2/5] power: supply: qcom_smbx: test battery health status bits Robin Snyders via B4 Relay
@ 2026-08-11 23:30 ` Robin Snyders via B4 Relay
2026-08-17 14:32 ` Konrad Dybcio
2026-08-11 23:30 ` [PATCH 4/5] power: supply: qcom_smbx: validate battery float voltage Robin Snyders via B4 Relay
` (2 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: Robin Snyders via B4 Relay @ 2026-08-11 23:30 UTC (permalink / raw)
To: Casey Connolly, Sebastian Reichel
Cc: Robin Snyders, linux-arm-msm, linux-pm, linux-kernel,
Sebastian Reichel, stable
From: Robin Snyders <robin@snyders.xyz>
FLOAT_VOLTAGE_CFG encodes 3,487,500 uV as selector zero and advances in
7,500 uV steps. The current calculation adds one to that selector, so it
programs the requested float voltage one step too high.
Remove the extra offset and name the hardware encoding constants.
Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
Cc: stable@vger.kernel.org
Signed-off-by: Robin Snyders <robin@snyders.xyz>
---
drivers/power/supply/qcom_smbx.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_smbx.c
index 0e50d81aefc2a..e236b95c0ebf3 100644
--- a/drivers/power/supply/qcom_smbx.c
+++ b/drivers/power/supply/qcom_smbx.c
@@ -352,6 +352,8 @@
/* pmi8998 registers represent current in increments of 1/40th of an amp */
#define CURRENT_SCALE_FACTOR 25000
+#define SMB2_FLOAT_VOLTAGE_MIN_UV 3487500
+#define SMB2_FLOAT_VOLTAGE_STEP_UV 7500
/* clang-format on */
enum charger_status {
@@ -993,7 +995,8 @@ static int smb_probe(struct platform_device *pdev)
return dev_err_probe(chip->dev, rc,
"Failed to init status change work\n");
- rc = (chip->batt_info->voltage_max_design_uv - 3487500) / 7500 + 1;
+ rc = (chip->batt_info->voltage_max_design_uv -
+ SMB2_FLOAT_VOLTAGE_MIN_UV) / SMB2_FLOAT_VOLTAGE_STEP_UV;
rc = regmap_update_bits(chip->regmap, chip->base + FLOAT_VOLTAGE_CFG,
FLOAT_VOLTAGE_SETTING_MASK, rc);
if (rc < 0)
--
2.54.0
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 3/5] power: supply: qcom_smbx: fix float voltage selector
2026-08-11 23:30 ` [PATCH 3/5] power: supply: qcom_smbx: fix float voltage selector Robin Snyders via B4 Relay
@ 2026-08-17 14:32 ` Konrad Dybcio
0 siblings, 0 replies; 10+ messages in thread
From: Konrad Dybcio @ 2026-08-17 14:32 UTC (permalink / raw)
To: robin, Casey Connolly, Sebastian Reichel
Cc: linux-arm-msm, linux-pm, linux-kernel, Sebastian Reichel, stable
On 8/12/26 1:30 AM, Robin Snyders via B4 Relay wrote:
> From: Robin Snyders <robin@snyders.xyz>
>
> FLOAT_VOLTAGE_CFG encodes 3,487,500 uV as selector zero and advances in
> 7,500 uV steps. The current calculation adds one to that selector, so it
> programs the requested float voltage one step too high.
>
> Remove the extra offset and name the hardware encoding constants.
>
> Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Robin Snyders <robin@snyders.xyz>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 4/5] power: supply: qcom_smbx: validate battery float voltage
2026-08-11 23:29 [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties Robin Snyders via B4 Relay
` (2 preceding siblings ...)
2026-08-11 23:30 ` [PATCH 3/5] power: supply: qcom_smbx: fix float voltage selector Robin Snyders via B4 Relay
@ 2026-08-11 23:30 ` Robin Snyders via B4 Relay
2026-08-11 23:30 ` [PATCH 5/5] power: supply: qcom_smbx: notify battery overvoltage recovery Robin Snyders via B4 Relay
2026-09-09 20:49 ` [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties Sebastian Reichel
5 siblings, 0 replies; 10+ messages in thread
From: Robin Snyders via B4 Relay @ 2026-08-11 23:30 UTC (permalink / raw)
To: Casey Connolly, Sebastian Reichel
Cc: Robin Snyders, linux-arm-msm, linux-pm, linux-kernel,
Sebastian Reichel, stable
From: Robin Snyders <robin@snyders.xyz>
power_supply_get_battery_info() leaves absent optional properties at
-EINVAL. The driver uses voltage_max_design_uv without checking it, so a
missing or out-of-range value can become an invalid float-voltage
selector.
Prefer the constant-charge voltage because it describes the charger's CV
target, then fall back to the battery design voltage. Both properties are
optional in the simple-battery binding, so preserve the hardware setting
when neither is present. Reject a supplied target outside the SMB2 range.
smb_init_hw() enables charging before battery data is parsed and before
the remaining fallible probe steps. Save the initial charging-enable bit
and install a managed rollback before initialization. Keep the rollback
active across battery-info, voltage, IRQ and wake-IRQ setup, then remove it
only after probe can no longer fail.
Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
Cc: stable@vger.kernel.org
Signed-off-by: Robin Snyders <robin@snyders.xyz>
---
drivers/power/supply/qcom_smbx.c | 61 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 58 insertions(+), 3 deletions(-)
diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_smbx.c
index e236b95c0ebf3..55ffe9857e494 100644
--- a/drivers/power/supply/qcom_smbx.c
+++ b/drivers/power/supply/qcom_smbx.c
@@ -353,6 +353,7 @@
/* pmi8998 registers represent current in increments of 1/40th of an amp */
#define CURRENT_SCALE_FACTOR 25000
#define SMB2_FLOAT_VOLTAGE_MIN_UV 3487500
+#define SMB2_FLOAT_VOLTAGE_MAX_UV 4920000
#define SMB2_FLOAT_VOLTAGE_STEP_UV 7500
/* clang-format on */
@@ -380,6 +381,7 @@ struct smb_init_register {
* @base: Base address for smb registers
* @regmap: Register map
* @batt_info: Battery data from DT
+ * @initial_charge_enable: Charging enable state before hardware setup
* @status_change_work: Worker to handle plug/unplug events
* @cable_irq: USB plugin IRQ
* @wakeup_enabled: If the cable IRQ will cause a wakeup
@@ -393,6 +395,7 @@ struct smb_chip {
unsigned int base;
struct regmap *regmap;
struct power_supply_battery_info *batt_info;
+ u8 initial_charge_enable;
struct delayed_work status_change_work;
int cable_irq;
@@ -905,6 +908,19 @@ static int smb_init_hw(struct smb_chip *chip)
return 0;
}
+static void smb_restore_charge_enable(void *data)
+{
+ struct smb_chip *chip = data;
+ int rc;
+
+ rc = regmap_update_bits(chip->regmap,
+ chip->base + CHARGING_ENABLE_CMD,
+ CHARGING_ENABLE_CMD_BIT,
+ chip->initial_charge_enable);
+ if (rc < 0)
+ dev_err(chip->dev, "Couldn't restore charging state: %d\n", rc);
+}
+
static int smb_init_irq(struct smb_chip *chip, int *irq, const char *name,
irqreturn_t (*handler)(int irq, void *data))
{
@@ -931,6 +947,9 @@ static int smb_probe(struct platform_device *pdev)
struct power_supply_config supply_config = {};
struct power_supply_desc *desc;
struct smb_chip *chip;
+ unsigned int charge_enable;
+ unsigned int float_voltage_sel;
+ int float_voltage_uv;
int rc, irq;
chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL);
@@ -961,6 +980,18 @@ static int smb_probe(struct platform_device *pdev)
"Couldn't get usbin_i IIO channel\n");
}
+ rc = regmap_read(chip->regmap, chip->base + CHARGING_ENABLE_CMD,
+ &charge_enable);
+ if (rc < 0)
+ return dev_err_probe(chip->dev, rc,
+ "Couldn't read charging state\n");
+
+ chip->initial_charge_enable = charge_enable & CHARGING_ENABLE_CMD_BIT;
+ rc = devm_add_action_or_reset(chip->dev, smb_restore_charge_enable, chip);
+ if (rc)
+ return dev_err_probe(chip->dev, rc,
+ "Couldn't register charging state rollback\n");
+
rc = smb_init_hw(chip);
if (rc < 0)
return rc;
@@ -995,13 +1026,35 @@ static int smb_probe(struct platform_device *pdev)
return dev_err_probe(chip->dev, rc,
"Failed to init status change work\n");
- rc = (chip->batt_info->voltage_max_design_uv -
- SMB2_FLOAT_VOLTAGE_MIN_UV) / SMB2_FLOAT_VOLTAGE_STEP_UV;
+ if (power_supply_battery_info_has_prop(chip->batt_info,
+ POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX)) {
+ float_voltage_uv =
+ chip->batt_info->constant_charge_voltage_max_uv;
+ } else if (power_supply_battery_info_has_prop(chip->batt_info,
+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN)) {
+ float_voltage_uv = chip->batt_info->voltage_max_design_uv;
+ } else {
+ dev_warn(chip->dev, "No battery float voltage; preserving hardware setting\n");
+ goto skip_float_voltage;
+ }
+
+ if (float_voltage_uv < SMB2_FLOAT_VOLTAGE_MIN_UV ||
+ float_voltage_uv > SMB2_FLOAT_VOLTAGE_MAX_UV)
+ return dev_err_probe(chip->dev, -EINVAL,
+ "float voltage %d uV outside %d-%d uV\n",
+ float_voltage_uv,
+ SMB2_FLOAT_VOLTAGE_MIN_UV,
+ SMB2_FLOAT_VOLTAGE_MAX_UV);
+
+ float_voltage_sel =
+ (float_voltage_uv - SMB2_FLOAT_VOLTAGE_MIN_UV) /
+ SMB2_FLOAT_VOLTAGE_STEP_UV;
rc = regmap_update_bits(chip->regmap, chip->base + FLOAT_VOLTAGE_CFG,
- FLOAT_VOLTAGE_SETTING_MASK, rc);
+ FLOAT_VOLTAGE_SETTING_MASK, float_voltage_sel);
if (rc < 0)
return dev_err_probe(chip->dev, rc, "Couldn't set vbat max\n");
+skip_float_voltage:
rc = smb_init_irq(chip, &irq, "bat-ov", smb_handle_batt_overvoltage);
if (rc < 0)
return rc;
@@ -1025,6 +1078,8 @@ static int smb_probe(struct platform_device *pdev)
if (rc < 0)
return dev_err_probe(chip->dev, rc, "Couldn't set wake irq\n");
+ devm_remove_action(chip->dev, smb_restore_charge_enable, chip);
+
platform_set_drvdata(pdev, chip);
/* Initialise charger state */
--
2.54.0
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 5/5] power: supply: qcom_smbx: notify battery overvoltage recovery
2026-08-11 23:29 [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties Robin Snyders via B4 Relay
` (3 preceding siblings ...)
2026-08-11 23:30 ` [PATCH 4/5] power: supply: qcom_smbx: validate battery float voltage Robin Snyders via B4 Relay
@ 2026-08-11 23:30 ` Robin Snyders via B4 Relay
2026-09-09 20:49 ` [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties Sebastian Reichel
5 siblings, 0 replies; 10+ messages in thread
From: Robin Snyders via B4 Relay @ 2026-08-11 23:30 UTC (permalink / raw)
To: Casey Connolly, Sebastian Reichel
Cc: Robin Snyders, linux-arm-msm, linux-pm, linux-kernel,
Sebastian Reichel, stable
From: Robin Snyders <robin@snyders.xyz>
The battery-overvoltage IRQ is configured for both edges, but its handler
only notifies the power-supply core while the fault bit is asserted. The
falling edge therefore does not publish the recovered health and status.
The handler also ignores register-read failures before testing status.
Handle read errors, log only an asserted fault, and notify the
power-supply core after every successful edge read.
Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
Cc: stable@vger.kernel.org
Signed-off-by: Robin Snyders <robin@snyders.xyz>
---
drivers/power/supply/qcom_smbx.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_smbx.c
index 55ffe9857e494..f5557b8cc92ae 100644
--- a/drivers/power/supply/qcom_smbx.c
+++ b/drivers/power/supply/qcom_smbx.c
@@ -722,16 +722,22 @@ static irqreturn_t smb_handle_batt_overvoltage(int irq, void *data)
{
struct smb_chip *chip = data;
unsigned int status;
+ int rc;
- regmap_read(chip->regmap, chip->base + BATTERY_CHARGER_STATUS_2,
- &status);
+ rc = regmap_read(chip->regmap,
+ chip->base + BATTERY_CHARGER_STATUS_2, &status);
+ if (rc < 0) {
+ dev_err(chip->dev, "Couldn't read charger status: %d\n", rc);
+ return IRQ_HANDLED;
+ }
if (status & CHARGER_ERROR_STATUS_BAT_OV_BIT) {
/* The hardware stops charging automatically */
dev_err(chip->dev, "battery overvoltage detected\n");
- power_supply_changed(chip->chg_psy);
}
+ power_supply_changed(chip->chg_psy);
+
return IRQ_HANDLED;
}
--
2.54.0
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties
2026-08-11 23:29 [PATCH 0/5] power: supply: qcom_smbx: fix watchdog and battery properties Robin Snyders via B4 Relay
` (4 preceding siblings ...)
2026-08-11 23:30 ` [PATCH 5/5] power: supply: qcom_smbx: notify battery overvoltage recovery Robin Snyders via B4 Relay
@ 2026-09-09 20:49 ` Sebastian Reichel
5 siblings, 0 replies; 10+ messages in thread
From: Sebastian Reichel @ 2026-09-09 20:49 UTC (permalink / raw)
To: Casey Connolly, Sebastian Reichel, Robin Snyders
Cc: linux-arm-msm, linux-pm, linux-kernel, stable
On Wed, 12 Aug 2026 01:29:57 +0200, Robin Snyders wrote:
> Fix five bugs in the existing Qualcomm SMB2 charger driver.
>
> The watchdog bark handler omits the charger peripheral base and can write
> an unrelated SPMI register. Battery health handling compares the complete
> status register instead of testing its independent fault bits. The
> float-voltage calculation is one selector step too high, and its battery
> target is neither selected nor validated safely. Finally, the
> battery-overvoltage IRQ ignores read errors and only publishes assertion,
> leaving health and status stale after the falling-edge recovery interrupt.
>
> [...]
Applied, thanks!
[1/5] power: supply: qcom_smbx: include base when petting watchdog
commit: 2cbea120515bc23416cbf0d811a49dff50692a0c
[2/5] power: supply: qcom_smbx: test battery health status bits
commit: a7749f679da9bd644e0450a58b7f38778a5e3c66
[3/5] power: supply: qcom_smbx: fix float voltage selector
commit: f42b11ed65e8f2f54a403824193986ff28531a26
[4/5] power: supply: qcom_smbx: validate battery float voltage
commit: 04370b7eab3fdfcb7e7d3bf32bc3e62e44769768
[5/5] power: supply: qcom_smbx: notify battery overvoltage recovery
commit: 85ca07e187e1c93e2e5527140815f20bc5f8ac85
Best regards,
--
Sebastian Reichel <sebastian.reichel@collabora.com>
^ permalink raw reply [flat|nested] 10+ messages in thread