diff --git a/drivers/power/supply/gpio-charger.c b/drivers/power/supply/gpio-charger.c index 2504190eba82..1dad49acc424 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 battery discharges, whatever the status pin says */ + if (gpio_charger->gpiod && !gpiod_get_value_cansleep(gpio_charger->gpiod)) + val->intval = POWER_SUPPLY_STATUS_DISCHARGING; + else if (gpiod_get_value_cansleep(gpio_charger->charge_status)) val->intval = POWER_SUPPLY_STATUS_CHARGING; else val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;