[PATCH] power: supply: gpio-charger: Report not charging without input power

From: Igor Velkov via B4 Relay

Date: Wed Oct 07 2026 - 21:27:38 EST


From: Igor Velkov <iav@xxxxxx>

The status property follows only the charge-status GPIO. Without input
power a charger such as the BQ24133 releases its open-drain STAT pin,
and depending on the board the GPIO then reads as charging.

On Kobol Helios64 the board runs from its battery after a mains loss,
and the charger reports online 0 with status "Charging".

Report "Not charging" whenever the online GPIO is present and inactive.

Tested on Helios64: on battery the status now reads "Not charging".

Assisted-by: LLM
Signed-off-by: Igor Velkov <iav@xxxxxx>
---
drivers/power/supply/gpio-charger.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/power/supply/gpio-charger.c b/drivers/power/supply/gpio-charger.c
index 2504190eba82..2fdff5f8b5ad 100644
--- a/drivers/power/supply/gpio-charger.c
+++ b/drivers/power/supply/gpio-charger.c
@@ -101,7 +101,10 @@ static int gpio_charger_get_property(struct power_supply *psy,
val->intval = gpiod_get_value_cansleep(gpio_charger->gpiod);
break;
case POWER_SUPPLY_PROP_STATUS:
- if (gpiod_get_value_cansleep(gpio_charger->charge_status))
+ /* Without input power the charger cannot charge, whatever its status pin says */
+ if (gpio_charger->gpiod && !gpiod_get_value_cansleep(gpio_charger->gpiod))
+ val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
+ else if (gpiod_get_value_cansleep(gpio_charger->charge_status))
val->intval = POWER_SUPPLY_STATUS_CHARGING;
else
val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;

---
base-commit: a90ee4305c4a5df72c11b31dacfdc76e00fcf78a
change-id: 20261008-gpio-charger-offline-cf51542a10ef

Best regards,
--
Igor Velkov <iav@xxxxxx>