[PATCH 2/4] power: supply: qcom_smbx: report charger state changes

From: Fabricio Akio via B4 Relay

Date: Sat Oct 03 2026 - 15:45:37 EST


From: Fabricio Akio <fabricioakio@xxxxxxxxx>

Nothing notifies consumers when the charging state changes on its own,
as when a charge completes, so they can keep a stale status.

Request the chg-state-change interrupt when the device tree provides
it, and notify consumers when it fires.

Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driver")
Signed-off-by: Fabricio Akio <fabricioakio@xxxxxxxxx>
---
drivers/power/supply/qcom_smbx.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_smbx.c
index f5557b8cc92a..3738eb8638bc 100644
--- a/drivers/power/supply/qcom_smbx.c
+++ b/drivers/power/supply/qcom_smbx.c
@@ -762,6 +762,15 @@ static irqreturn_t smb_handle_usb_icl_change(int irq, void *data)
return IRQ_HANDLED;
}

+static irqreturn_t smb_handle_chg_state_change(int irq, void *data)
+{
+ struct smb_chip *chip = data;
+
+ power_supply_changed(chip->chg_psy);
+
+ return IRQ_HANDLED;
+}
+
static irqreturn_t smb_handle_wdog_bark(int irq, void *data)
{
struct smb_chip *chip = data;
@@ -1078,6 +1087,21 @@ static int smb_probe(struct platform_device *pdev)
if (rc < 0)
return rc;

+ /* Optional: not every device tree lists it */
+ irq = platform_get_irq_byname_optional(pdev, "chg-state-change");
+ if (irq > 0) {
+ rc = devm_request_threaded_irq(chip->dev, irq, NULL,
+ smb_handle_chg_state_change,
+ IRQF_ONESHOT, "chg-state-change",
+ chip);
+ if (rc < 0)
+ return dev_err_probe(chip->dev, rc,
+ "Couldn't request irq chg-state-change\n");
+ } else if (irq != -ENXIO) {
+ return dev_err_probe(chip->dev, irq,
+ "Couldn't get irq chg-state-change\n");
+ }
+
devm_device_init_wakeup(chip->dev);

rc = devm_pm_set_wake_irq(chip->dev, chip->cable_irq);

--
2.55.0