]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ACPI: battery: Fix system wakeup on critical battery status
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 15 May 2026 17:03:59 +0000 (19:03 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 19 May 2026 21:06:09 +0000 (23:06 +0200)
Commit 0a869409a981 ("ACPI: battery: Convert the driver to a platform
one") changed the parent of the battery wakeup source to the platform
device used for driver binding, but it forgot to update the
acpi_pm_wakeup_event() call in acpi_battery_update() accordingly.

Do it now to unbreak waking up the system on critical battery status
during suspend-to-idle and during transitions to ACPI S3/S4.

Fixes: 0a869409a981 ("ACPI: battery: Convert the driver to a platform one")
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: 7.0+ <stable@vger.kernel.org> # 7.0+
Link: https://patch.msgid.link/12898712.O9o76ZdvQC@rafael.j.wysocki
drivers/acpi/battery.c

index d4ae21a7100796304d8e865f154382845c6bb9ed..b82dd67d98c9a71bef13a6e2cbb2b135242f8932 100644 (file)
@@ -94,6 +94,7 @@ struct acpi_battery {
        struct power_supply *bat;
        struct power_supply_desc bat_desc;
        struct acpi_device *device;
+       struct device *phys_dev;
        struct notifier_block pm_nb;
        struct list_head list;
        unsigned long update_time;
@@ -1033,7 +1034,7 @@ static int acpi_battery_update(struct acpi_battery *battery, bool resume)
        if ((battery->state & ACPI_BATTERY_STATE_CRITICAL) ||
            (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) &&
             (battery->capacity_now <= battery->alarm)))
-               acpi_pm_wakeup_event(&battery->device->dev);
+               acpi_pm_wakeup_event(battery->phys_dev);
 
        return result;
 }
@@ -1231,6 +1232,7 @@ static int acpi_battery_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, battery);
 
+       battery->phys_dev = &pdev->dev;
        battery->device = device;
 
        result = devm_mutex_init(&pdev->dev, &battery->update_lock);