2024-05-26 21:40:39

by Thomas Weißschuh

[permalink] [raw]
Subject: [PATCH] ACPI: AC: Properly notify powermanagement core about changes

The powermanagement core does various actions when a powersupply changes.
It calls into notifiers, LED triggers, other power supplies and emits an uevent.

To make sure that all these actions happen properly call power_supply_changed().

Reported-by: Rajas Paranjpe <[email protected]>
Closes: https://github.com/MrChromebox/firmware/issues/420#issuecomment-2132251318
Signed-off-by: Thomas Weißschuh <[email protected]>
---
drivers/acpi/ac.c | 4 ++--
drivers/acpi/sbs.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c
index 2d4a35e6dd18..09a87fa222c7 100644
--- a/drivers/acpi/ac.c
+++ b/drivers/acpi/ac.c
@@ -145,7 +145,7 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
dev_name(&adev->dev), event,
(u32) ac->state);
acpi_notifier_call_chain(adev, event, (u32) ac->state);
- kobject_uevent(&ac->charger->dev.kobj, KOBJ_CHANGE);
+ power_supply_changed(ac->charger);
}
}

@@ -268,7 +268,7 @@ static int acpi_ac_resume(struct device *dev)
if (acpi_ac_get_state(ac))
return 0;
if (old_state != ac->state)
- kobject_uevent(&ac->charger->dev.kobj, KOBJ_CHANGE);
+ power_supply_changed(ac->charger);

return 0;
}
diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c
index 94e3c000df2e..dc8164b182dc 100644
--- a/drivers/acpi/sbs.c
+++ b/drivers/acpi/sbs.c
@@ -610,7 +610,7 @@ static void acpi_sbs_callback(void *context)
if (sbs->charger_exists) {
acpi_ac_get_present(sbs);
if (sbs->charger_present != saved_charger_state)
- kobject_uevent(&sbs->charger->dev.kobj, KOBJ_CHANGE);
+ power_supply_changed(sbs->charger);
}

if (sbs->manager_present) {
@@ -622,7 +622,7 @@ static void acpi_sbs_callback(void *context)
acpi_battery_read(bat);
if (saved_battery_state == bat->present)
continue;
- kobject_uevent(&bat->bat->dev.kobj, KOBJ_CHANGE);
+ power_supply_changed(bat->bat);
}
}
}

---
base-commit: 6fbf71854e2ddea7c99397772fbbb3783bfe15b5
change-id: 20240526-acpi-ac-changed-a08c6941ae51

Best regards,
--
Thomas Weißschuh <[email protected]>



2024-05-27 21:43:53

by Sebastian Reichel

[permalink] [raw]
Subject: Re: [PATCH] ACPI: AC: Properly notify powermanagement core about changes

Hi,

On Sun, May 26, 2024 at 11:40:01PM +0200, Thomas Wei?schuh wrote:
> The powermanagement core does various actions when a power-supply changes.
> It calls into notifiers, LED triggers, other power supplies and emits an uevent.
>
> To make sure that all these actions happen properly call power_supply_changed().
>
> Reported-by: Rajas Paranjpe <[email protected]>
> Closes: https://github.com/MrChromebox/firmware/issues/420#issuecomment-2132251318
> Signed-off-by: Thomas Wei?schuh <[email protected]>
> ---

Reviewed-by: Sebastian Reichel <[email protected]>

-- Sebastian

> drivers/acpi/ac.c | 4 ++--
> drivers/acpi/sbs.c | 4 ++--
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c
> index 2d4a35e6dd18..09a87fa222c7 100644
> --- a/drivers/acpi/ac.c
> +++ b/drivers/acpi/ac.c
> @@ -145,7 +145,7 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
> dev_name(&adev->dev), event,
> (u32) ac->state);
> acpi_notifier_call_chain(adev, event, (u32) ac->state);
> - kobject_uevent(&ac->charger->dev.kobj, KOBJ_CHANGE);
> + power_supply_changed(ac->charger);
> }
> }
>
> @@ -268,7 +268,7 @@ static int acpi_ac_resume(struct device *dev)
> if (acpi_ac_get_state(ac))
> return 0;
> if (old_state != ac->state)
> - kobject_uevent(&ac->charger->dev.kobj, KOBJ_CHANGE);
> + power_supply_changed(ac->charger);
>
> return 0;
> }
> diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c
> index 94e3c000df2e..dc8164b182dc 100644
> --- a/drivers/acpi/sbs.c
> +++ b/drivers/acpi/sbs.c
> @@ -610,7 +610,7 @@ static void acpi_sbs_callback(void *context)
> if (sbs->charger_exists) {
> acpi_ac_get_present(sbs);
> if (sbs->charger_present != saved_charger_state)
> - kobject_uevent(&sbs->charger->dev.kobj, KOBJ_CHANGE);
> + power_supply_changed(sbs->charger);
> }
>
> if (sbs->manager_present) {
> @@ -622,7 +622,7 @@ static void acpi_sbs_callback(void *context)
> acpi_battery_read(bat);
> if (saved_battery_state == bat->present)
> continue;
> - kobject_uevent(&bat->bat->dev.kobj, KOBJ_CHANGE);
> + power_supply_changed(bat->bat);
> }
> }
> }
>
> ---
> base-commit: 6fbf71854e2ddea7c99397772fbbb3783bfe15b5
> change-id: 20240526-acpi-ac-changed-a08c6941ae51
>
> Best regards,
> --
> Thomas Wei?schuh <[email protected]>
>


Attachments:
(No filename) (2.42 kB)
signature.asc (849.00 B)
Download all attachments

2024-05-28 19:58:53

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [PATCH] ACPI: AC: Properly notify powermanagement core about changes

On Mon, May 27, 2024 at 11:43 PM Sebastian Reichel
<[email protected]> wrote:
>
> Hi,
>
> On Sun, May 26, 2024 at 11:40:01PM +0200, Thomas Weißschuh wrote:
> > The powermanagement core does various actions when a power-supply changes.
> > It calls into notifiers, LED triggers, other power supplies and emits an uevent.
> >
> > To make sure that all these actions happen properly call power_supply_changed().
> >
> > Reported-by: Rajas Paranjpe <[email protected]>
> > Closes: https://github.com/MrChromebox/firmware/issues/420#issuecomment-2132251318
> > Signed-off-by: Thomas Weißschuh <[email protected]>
> > ---
>
> Reviewed-by: Sebastian Reichel <[email protected]>
>
> -- Sebastian
>
> > drivers/acpi/ac.c | 4 ++--
> > drivers/acpi/sbs.c | 4 ++--
> > 2 files changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c
> > index 2d4a35e6dd18..09a87fa222c7 100644
> > --- a/drivers/acpi/ac.c
> > +++ b/drivers/acpi/ac.c
> > @@ -145,7 +145,7 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
> > dev_name(&adev->dev), event,
> > (u32) ac->state);
> > acpi_notifier_call_chain(adev, event, (u32) ac->state);
> > - kobject_uevent(&ac->charger->dev.kobj, KOBJ_CHANGE);
> > + power_supply_changed(ac->charger);
> > }
> > }
> >
> > @@ -268,7 +268,7 @@ static int acpi_ac_resume(struct device *dev)
> > if (acpi_ac_get_state(ac))
> > return 0;
> > if (old_state != ac->state)
> > - kobject_uevent(&ac->charger->dev.kobj, KOBJ_CHANGE);
> > + power_supply_changed(ac->charger);
> >
> > return 0;
> > }
> > diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c
> > index 94e3c000df2e..dc8164b182dc 100644
> > --- a/drivers/acpi/sbs.c
> > +++ b/drivers/acpi/sbs.c
> > @@ -610,7 +610,7 @@ static void acpi_sbs_callback(void *context)
> > if (sbs->charger_exists) {
> > acpi_ac_get_present(sbs);
> > if (sbs->charger_present != saved_charger_state)
> > - kobject_uevent(&sbs->charger->dev.kobj, KOBJ_CHANGE);
> > + power_supply_changed(sbs->charger);
> > }
> >
> > if (sbs->manager_present) {
> > @@ -622,7 +622,7 @@ static void acpi_sbs_callback(void *context)
> > acpi_battery_read(bat);
> > if (saved_battery_state == bat->present)
> > continue;
> > - kobject_uevent(&bat->bat->dev.kobj, KOBJ_CHANGE);
> > + power_supply_changed(bat->bat);
> > }
> > }
> > }
> >
> > ---

Applied as 6.10-rc material, thanks!