Hi, Update the AC status when the battery notification is happened. Because the AC status notification doesn't happen on some machines. My vaio actually has this problem.
Also Linux is doing the same thing https://github.com/torvalds/linux/blob/v6.4/drivers/acpi/ac.c#L165-L183 ok? comments? Index: sys/dev/acpi/acpiac.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpiac.c,v retrieving revision 1.36 diff -u -p -r1.36 acpiac.c --- sys/dev/acpi/acpiac.c 6 Apr 2022 18:59:27 -0000 1.36 +++ sys/dev/acpi/acpiac.c 17 Aug 2023 06:57:44 -0000 @@ -140,6 +140,8 @@ acpiac_getpsr(struct acpiac_softc *sc) return (0); } +static int acpiac_notify_triggered = 0; + int acpiac_notify(struct aml_node *node, int notify_type, void *arg) { @@ -148,6 +150,8 @@ acpiac_notify(struct aml_node *node, int dnprintf(10, "acpiac_notify: %.2x %s\n", notify_type, DEVNAME(sc)); + acpiac_notify_triggered = 1; + switch (notify_type) { case 0x00: case 0x01: @@ -164,4 +168,22 @@ acpiac_notify(struct aml_node *node, int break; } return (0); +} + +void +acpiac_battery_notify(void) +{ + struct acpi_softc *sc = acpi_softc; + struct acpi_ac *ac; + + if (acpiac_notify_triggered) + return; + /* + * On some machines (vaio VJPK23 at least) AC status notifications + * are not triggered. Update the AC status when battery notifications. + */ + SLIST_FOREACH(ac, &sc->sc_ac, aac_link) { + acpiac_refresh(ac->aac_softc); + acpi_record_event(sc, APM_POWER_CHANGE); + } } Index: sys/dev/acpi/acpibat.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpibat.c,v retrieving revision 1.70 diff -u -p -r1.70 acpibat.c --- sys/dev/acpi/acpibat.c 6 Apr 2022 18:59:27 -0000 1.70 +++ sys/dev/acpi/acpibat.c 17 Aug 2023 06:57:45 -0000 @@ -536,5 +536,7 @@ acpibat_notify(struct aml_node *node, in acpibat_refresh(sc); acpi_record_event(sc->sc_acpi, APM_POWER_CHANGE); + acpiac_battery_notify(); + return (0); } Index: sys/dev/acpi/acpidev.h =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpidev.h,v retrieving revision 1.44 diff -u -p -r1.44 acpidev.h --- sys/dev/acpi/acpidev.h 29 Jun 2018 17:39:18 -0000 1.44 +++ sys/dev/acpi/acpidev.h 17 Aug 2023 06:57:45 -0000 @@ -306,6 +306,8 @@ struct acpiac_softc { struct ksensordev sc_sensdev; }; +void acpiac_battery_notify(void); + struct acpibat_softc { struct device sc_dev;