Loading drivers/acpi/Kconfig +6 −7 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ config ACPI_PROC_EVENT config ACPI_AC tristate "AC Adapter" depends on X86 depends on X86 && POWER_SUPPLY default y help This driver adds support for the AC Adapter object, which indicates Loading @@ -97,7 +97,7 @@ config ACPI_AC config ACPI_BATTERY tristate "Battery" depends on X86 depends on X86 && POWER_SUPPLY default y help This driver adds support for battery information through Loading Loading @@ -350,12 +350,11 @@ config ACPI_HOTPLUG_MEMORY $>modprobe acpi_memhotplug config ACPI_SBS tristate "Smart Battery System (EXPERIMENTAL)" tristate "Smart Battery System" depends on X86 depends on EXPERIMENTAL depends on POWER_SUPPLY help This driver adds support for the Smart Battery System. A "Smart Battery" is quite old and quite rare compared to today's ACPI "Control Method" battery. This driver adds support for the Smart Battery System, another type of access to battery information, found on some laptops. endif # ACPI drivers/acpi/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -60,3 +60,4 @@ obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o obj-y += cm_sbs.o obj-$(CONFIG_ACPI_SBS) += sbs.o obj-$(CONFIG_ACPI_SBS) += sbshc.o drivers/acpi/ac.c +31 −2 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <linux/types.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <linux/power_supply.h> #include <acpi/acpi_bus.h> #include <acpi/acpi_drivers.h> Loading Loading @@ -72,16 +73,37 @@ static struct acpi_driver acpi_ac_driver = { }; struct acpi_ac { struct power_supply charger; struct acpi_device * device; unsigned long state; }; #define to_acpi_ac(x) container_of(x, struct acpi_ac, charger); static const struct file_operations acpi_ac_fops = { .open = acpi_ac_open_fs, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; static int get_ac_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct acpi_ac *ac = to_acpi_ac(psy); switch (psp) { case POWER_SUPPLY_PROP_ONLINE: val->intval = ac->state; break; default: return -EINVAL; } return 0; } static enum power_supply_property ac_props[] = { POWER_SUPPLY_PROP_ONLINE, }; /* -------------------------------------------------------------------------- AC Adapter Management Loading Loading @@ -208,6 +230,7 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data) acpi_bus_generate_netlink_event(device->pnp.device_class, device->dev.bus_id, event, (u32) ac->state); kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); break; default: ACPI_DEBUG_PRINT((ACPI_DB_INFO, Loading Loading @@ -244,7 +267,12 @@ static int acpi_ac_add(struct acpi_device *device) result = acpi_ac_add_fs(device); if (result) goto end; ac->charger.name = acpi_device_bid(device); ac->charger.type = POWER_SUPPLY_TYPE_MAINS; ac->charger.properties = ac_props; ac->charger.num_properties = ARRAY_SIZE(ac_props); ac->charger.get_property = get_ac_property; power_supply_register(&ac->device->dev, &ac->charger); status = acpi_install_notify_handler(device->handle, ACPI_ALL_NOTIFY, acpi_ac_notify, ac); Loading Loading @@ -279,7 +307,8 @@ static int acpi_ac_remove(struct acpi_device *device, int type) status = acpi_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY, acpi_ac_notify); if (ac->charger.dev) power_supply_unregister(&ac->charger); acpi_ac_remove_fs(device); kfree(ac); Loading Loading
drivers/acpi/Kconfig +6 −7 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ config ACPI_PROC_EVENT config ACPI_AC tristate "AC Adapter" depends on X86 depends on X86 && POWER_SUPPLY default y help This driver adds support for the AC Adapter object, which indicates Loading @@ -97,7 +97,7 @@ config ACPI_AC config ACPI_BATTERY tristate "Battery" depends on X86 depends on X86 && POWER_SUPPLY default y help This driver adds support for battery information through Loading Loading @@ -350,12 +350,11 @@ config ACPI_HOTPLUG_MEMORY $>modprobe acpi_memhotplug config ACPI_SBS tristate "Smart Battery System (EXPERIMENTAL)" tristate "Smart Battery System" depends on X86 depends on EXPERIMENTAL depends on POWER_SUPPLY help This driver adds support for the Smart Battery System. A "Smart Battery" is quite old and quite rare compared to today's ACPI "Control Method" battery. This driver adds support for the Smart Battery System, another type of access to battery information, found on some laptops. endif # ACPI
drivers/acpi/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -60,3 +60,4 @@ obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o obj-$(CONFIG_ACPI_HOTPLUG_MEMORY) += acpi_memhotplug.o obj-y += cm_sbs.o obj-$(CONFIG_ACPI_SBS) += sbs.o obj-$(CONFIG_ACPI_SBS) += sbshc.o
drivers/acpi/ac.c +31 −2 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <linux/types.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <linux/power_supply.h> #include <acpi/acpi_bus.h> #include <acpi/acpi_drivers.h> Loading Loading @@ -72,16 +73,37 @@ static struct acpi_driver acpi_ac_driver = { }; struct acpi_ac { struct power_supply charger; struct acpi_device * device; unsigned long state; }; #define to_acpi_ac(x) container_of(x, struct acpi_ac, charger); static const struct file_operations acpi_ac_fops = { .open = acpi_ac_open_fs, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; static int get_ac_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct acpi_ac *ac = to_acpi_ac(psy); switch (psp) { case POWER_SUPPLY_PROP_ONLINE: val->intval = ac->state; break; default: return -EINVAL; } return 0; } static enum power_supply_property ac_props[] = { POWER_SUPPLY_PROP_ONLINE, }; /* -------------------------------------------------------------------------- AC Adapter Management Loading Loading @@ -208,6 +230,7 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data) acpi_bus_generate_netlink_event(device->pnp.device_class, device->dev.bus_id, event, (u32) ac->state); kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); break; default: ACPI_DEBUG_PRINT((ACPI_DB_INFO, Loading Loading @@ -244,7 +267,12 @@ static int acpi_ac_add(struct acpi_device *device) result = acpi_ac_add_fs(device); if (result) goto end; ac->charger.name = acpi_device_bid(device); ac->charger.type = POWER_SUPPLY_TYPE_MAINS; ac->charger.properties = ac_props; ac->charger.num_properties = ARRAY_SIZE(ac_props); ac->charger.get_property = get_ac_property; power_supply_register(&ac->device->dev, &ac->charger); status = acpi_install_notify_handler(device->handle, ACPI_ALL_NOTIFY, acpi_ac_notify, ac); Loading Loading @@ -279,7 +307,8 @@ static int acpi_ac_remove(struct acpi_device *device, int type) status = acpi_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY, acpi_ac_notify); if (ac->charger.dev) power_supply_unregister(&ac->charger); acpi_ac_remove_fs(device); kfree(ac); Loading