acpi_dock(4): Notify devd(8) on dock status change.

PR:		238138
Submitted by:	Muhammad Kaisar Arkhan <hi@yukiisbo.red>
MFC after:	2 weeks
This commit is contained in:
markj 2019-05-31 15:44:33 +00:00
parent 893e38d644
commit a8ad406373
2 changed files with 16 additions and 4 deletions

View File

@ -41,7 +41,7 @@
.\" ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS .\" ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
.\" SOFTWARE. .\" SOFTWARE.
.\" .\"
.Dd March 29, 2019 .Dd May 31, 2019
.Dt DEVD.CONF 5 .Dt DEVD.CONF 5
.Os .Os
.Sh NAME .Sh NAME
@ -341,6 +341,8 @@ AC line state ($notify=0x00 is offline, 0x01 is online).
Button state ($notify=0x00 is power, 0x01 is sleep). Button state ($notify=0x00 is power, 0x01 is sleep).
.It Li CMBAT .It Li CMBAT
Battery events. Battery events.
.It Li Dock
Dock state ($notify=0x00 is undocked, 0x01 is docked).
.It Li Lid .It Li Lid
Lid state ($notify=0x00 is closed, 0x01 is open). Lid state ($notify=0x00 is closed, 0x01 is open).
.It Li PROCESSOR .It Li PROCESSOR

View File

@ -256,11 +256,13 @@ acpi_dock_insert_children(device_t dev)
static void static void
acpi_dock_insert(device_t dev) acpi_dock_insert(device_t dev)
{ {
struct acpi_dock_softc *sc; struct acpi_dock_softc *sc;
ACPI_HANDLE h;
ACPI_SERIAL_ASSERT(dock); ACPI_SERIAL_ASSERT(dock);
sc = device_get_softc(dev); sc = device_get_softc(dev);
h = acpi_get_handle(dev);
if (sc->status == ACPI_DOCK_STATUS_UNDOCKED || if (sc->status == ACPI_DOCK_STATUS_UNDOCKED ||
sc->status == ACPI_DOCK_STATUS_UNKNOWN) { sc->status == ACPI_DOCK_STATUS_UNKNOWN) {
@ -270,8 +272,12 @@ acpi_dock_insert(device_t dev)
return; return;
} }
if (!cold) if (!cold) {
acpi_dock_insert_children(dev); acpi_dock_insert_children(dev);
acpi_UserNotify("Dock", h, 1);
}
sc->status = ACPI_DOCK_STATUS_DOCKED; sc->status = ACPI_DOCK_STATUS_DOCKED;
} }
} }
@ -325,10 +331,13 @@ static void
acpi_dock_removal(device_t dev) acpi_dock_removal(device_t dev)
{ {
struct acpi_dock_softc *sc; struct acpi_dock_softc *sc;
ACPI_HANDLE h;
ACPI_SERIAL_ASSERT(dock); ACPI_SERIAL_ASSERT(dock);
sc = device_get_softc(dev); sc = device_get_softc(dev);
h = acpi_get_handle(dev);
if (sc->status == ACPI_DOCK_STATUS_DOCKED || if (sc->status == ACPI_DOCK_STATUS_DOCKED ||
sc->status == ACPI_DOCK_STATUS_UNKNOWN) { sc->status == ACPI_DOCK_STATUS_UNKNOWN) {
acpi_dock_eject_children(dev); acpi_dock_eject_children(dev);
@ -342,6 +351,8 @@ acpi_dock_removal(device_t dev)
return; return;
} }
acpi_UserNotify("Dock", h, 0);
sc->status = ACPI_DOCK_STATUS_UNDOCKED; sc->status = ACPI_DOCK_STATUS_UNDOCKED;
} }
@ -534,4 +545,3 @@ static devclass_t acpi_dock_devclass;
DRIVER_MODULE(acpi_dock, acpi, acpi_dock_driver, acpi_dock_devclass, 0, 0); DRIVER_MODULE(acpi_dock, acpi, acpi_dock_driver, acpi_dock_devclass, 0, 0);
MODULE_DEPEND(acpi_dock, acpi, 1, 1, 1); MODULE_DEPEND(acpi_dock, acpi, 1, 1, 1);