aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorBjorn Helgaas <bjorn.helgaas@hp.com>2009-04-30 11:35:47 -0400
committerLen Brown <len.brown@intel.com>2009-06-18 00:13:14 -0400
commitd94066910943837558d2a461c6766da981260bf0 (patch)
tree1c423553bd1456edcb209c1ec762bd8f647946ea /drivers/acpi
parent48fe112744d1ff2e899a6491633ac58a3229aabf (diff)
ACPI: battery: use .notify method instead of installing handler directly
This patch adds a .notify() method. The presence of .notify() causes Linux/ACPI to manage event handlers and notify handlers on our behalf, so we don't have to install and remove them ourselves. This driver apparently relies on seeing ALL notify events, not just device-specific ones (because it used ACPI_ALL_NOTIFY). We use the ACPI_DRIVER_ALL_NOTIFY_EVENTS driver flag to request all events. Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> CC: Alexey Starikovskiy <alexey.y.starikovskiy@linux.intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/battery.c22
1 files changed, 5 insertions, 17 deletions
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index b0de6312919a..eb00c4e3747a 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -796,13 +796,12 @@ static void acpi_battery_remove_fs(struct acpi_device *device)
796 Driver Interface 796 Driver Interface
797 -------------------------------------------------------------------------- */ 797 -------------------------------------------------------------------------- */
798 798
799static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) 799static void acpi_battery_notify(struct acpi_device *device, u32 event)
800{ 800{
801 struct acpi_battery *battery = data; 801 struct acpi_battery *battery = acpi_driver_data(device);
802 struct acpi_device *device; 802
803 if (!battery) 803 if (!battery)
804 return; 804 return;
805 device = battery->device;
806 acpi_battery_update(battery); 805 acpi_battery_update(battery);
807 acpi_bus_generate_proc_event(device, event, 806 acpi_bus_generate_proc_event(device, event,
808 acpi_battery_present(battery)); 807 acpi_battery_present(battery));
@@ -819,7 +818,6 @@ static void acpi_battery_notify(acpi_handle handle, u32 event, void *data)
819static int acpi_battery_add(struct acpi_device *device) 818static int acpi_battery_add(struct acpi_device *device)
820{ 819{
821 int result = 0; 820 int result = 0;
822 acpi_status status = 0;
823 struct acpi_battery *battery = NULL; 821 struct acpi_battery *battery = NULL;
824 if (!device) 822 if (!device)
825 return -EINVAL; 823 return -EINVAL;
@@ -837,14 +835,6 @@ static int acpi_battery_add(struct acpi_device *device)
837 if (result) 835 if (result)
838 goto end; 836 goto end;
839#endif 837#endif
840 status = acpi_install_notify_handler(device->handle,
841 ACPI_ALL_NOTIFY,
842 acpi_battery_notify, battery);
843 if (ACPI_FAILURE(status)) {
844 ACPI_EXCEPTION((AE_INFO, status, "Installing notify handler"));
845 result = -ENODEV;
846 goto end;
847 }
848 printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n", 838 printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n",
849 ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), 839 ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device),
850 device->status.battery_present ? "present" : "absent"); 840 device->status.battery_present ? "present" : "absent");
@@ -860,15 +850,11 @@ static int acpi_battery_add(struct acpi_device *device)
860 850
861static int acpi_battery_remove(struct acpi_device *device, int type) 851static int acpi_battery_remove(struct acpi_device *device, int type)
862{ 852{
863 acpi_status status = 0;
864 struct acpi_battery *battery = NULL; 853 struct acpi_battery *battery = NULL;
865 854
866 if (!device || !acpi_driver_data(device)) 855 if (!device || !acpi_driver_data(device))
867 return -EINVAL; 856 return -EINVAL;
868 battery = acpi_driver_data(device); 857 battery = acpi_driver_data(device);
869 status = acpi_remove_notify_handler(device->handle,
870 ACPI_ALL_NOTIFY,
871 acpi_battery_notify);
872#ifdef CONFIG_ACPI_PROCFS_POWER 858#ifdef CONFIG_ACPI_PROCFS_POWER
873 acpi_battery_remove_fs(device); 859 acpi_battery_remove_fs(device);
874#endif 860#endif
@@ -896,10 +882,12 @@ static struct acpi_driver acpi_battery_driver = {
896 .name = "battery", 882 .name = "battery",
897 .class = ACPI_BATTERY_CLASS, 883 .class = ACPI_BATTERY_CLASS,
898 .ids = battery_device_ids, 884 .ids = battery_device_ids,
885 .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS,
899 .ops = { 886 .ops = {
900 .add = acpi_battery_add, 887 .add = acpi_battery_add,
901 .resume = acpi_battery_resume, 888 .resume = acpi_battery_resume,
902 .remove = acpi_battery_remove, 889 .remove = acpi_battery_remove,
890 .notify = acpi_battery_notify,
903 }, 891 },
904}; 892};
905 893