diff options
author | njl <njl@FreeBSD.org> | 2004-07-12 20:53:04 +0000 |
---|---|---|
committer | njl <njl@FreeBSD.org> | 2004-07-12 20:53:04 +0000 |
commit | 462b2a5e44517ed399d7591368dd987350314cd7 (patch) | |
tree | 0146d2202dcd106cdcdb032645f2035168a57862 /sys/dev/acpica/acpi_cmbat.c | |
parent | 7b5fb1c0fe7951487bba2244d8e9f2bee0f7c77c (diff) | |
download | FreeBSD-src-462b2a5e44517ed399d7591368dd987350314cd7.zip FreeBSD-src-462b2a5e44517ed399d7591368dd987350314cd7.tar.gz |
Add the ability to detach a battery. Now batteries that are detached are
also removed from the battery list.
Diffstat (limited to 'sys/dev/acpica/acpi_cmbat.c')
-rw-r--r-- | sys/dev/acpica/acpi_cmbat.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/dev/acpica/acpi_cmbat.c b/sys/dev/acpica/acpi_cmbat.c index d0f6f03..ec6730e 100644 --- a/sys/dev/acpica/acpi_cmbat.c +++ b/sys/dev/acpica/acpi_cmbat.c @@ -73,6 +73,7 @@ struct acpi_cmbat_softc { int min; int full_charge_time; int initializing; + int phys_unit; }; static struct timespec acpi_cmbat_info_lastupdated; @@ -87,6 +88,7 @@ static void acpi_cmbat_get_bif(void *); static void acpi_cmbat_notify_handler(ACPI_HANDLE, UINT32, void *); static int acpi_cmbat_probe(device_t); static int acpi_cmbat_attach(device_t); +static int acpi_cmbat_detach(device_t); static int acpi_cmbat_resume(device_t); static int acpi_cmbat_ioctl(u_long, caddr_t, void *); static int acpi_cmbat_is_bst_valid(struct acpi_bst*); @@ -98,6 +100,7 @@ static device_method_t acpi_cmbat_methods[] = { /* Device interface */ DEVMETHOD(device_probe, acpi_cmbat_probe), DEVMETHOD(device_attach, acpi_cmbat_attach), + DEVMETHOD(device_detach, acpi_cmbat_detach), DEVMETHOD(device_resume, acpi_cmbat_resume), {0, 0} @@ -339,7 +342,8 @@ acpi_cmbat_attach(device_t dev) return (error); } - error = acpi_battery_register(ACPI_BATT_TYPE_CMBAT, acpi_cmbat_units); + sc->phys_unit = acpi_cmbat_units; + error = acpi_battery_register(ACPI_BATT_TYPE_CMBAT, sc->phys_unit); if (error != 0) return (error); @@ -352,6 +356,17 @@ acpi_cmbat_attach(device_t dev) } static int +acpi_cmbat_detach(device_t dev) +{ + struct acpi_cmbat_softc *sc; + + sc = device_get_softc(dev); + acpi_battery_remove(ACPI_BATT_TYPE_CMBAT, sc->phys_unit); + acpi_cmbat_units--; + return (0); +} + +static int acpi_cmbat_resume(device_t dev) { AcpiOsQueueForExecution(OSD_PRIORITY_LO, acpi_cmbat_init_battery, dev); |