diff options
Diffstat (limited to 'drivers/acpi/battery.c')
-rw-r--r-- | drivers/acpi/battery.c | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 00b0728efe82..24bf4dca88cc 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
@@ -59,6 +59,9 @@ ACPI_MODULE_NAME("acpi_battery") | |||
59 | MODULE_DESCRIPTION(ACPI_BATTERY_DRIVER_NAME); | 59 | MODULE_DESCRIPTION(ACPI_BATTERY_DRIVER_NAME); |
60 | MODULE_LICENSE("GPL"); | 60 | MODULE_LICENSE("GPL"); |
61 | 61 | ||
62 | extern struct proc_dir_entry *acpi_lock_battery_dir(void); | ||
63 | extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir); | ||
64 | |||
62 | static int acpi_battery_add(struct acpi_device *device); | 65 | static int acpi_battery_add(struct acpi_device *device); |
63 | static int acpi_battery_remove(struct acpi_device *device, int type); | 66 | static int acpi_battery_remove(struct acpi_device *device, int type); |
64 | 67 | ||
@@ -108,7 +111,7 @@ struct acpi_battery_trips { | |||
108 | }; | 111 | }; |
109 | 112 | ||
110 | struct acpi_battery { | 113 | struct acpi_battery { |
111 | acpi_handle handle; | 114 | struct acpi_device * device; |
112 | struct acpi_battery_flags flags; | 115 | struct acpi_battery_flags flags; |
113 | struct acpi_battery_trips trips; | 116 | struct acpi_battery_trips trips; |
114 | unsigned long alarm; | 117 | unsigned long alarm; |
@@ -138,7 +141,7 @@ acpi_battery_get_info(struct acpi_battery *battery, | |||
138 | 141 | ||
139 | /* Evalute _BIF */ | 142 | /* Evalute _BIF */ |
140 | 143 | ||
141 | status = acpi_evaluate_object(battery->handle, "_BIF", NULL, &buffer); | 144 | status = acpi_evaluate_object(battery->device->handle, "_BIF", NULL, &buffer); |
142 | if (ACPI_FAILURE(status)) { | 145 | if (ACPI_FAILURE(status)) { |
143 | ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF")); | 146 | ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF")); |
144 | return -ENODEV; | 147 | return -ENODEV; |
@@ -171,7 +174,7 @@ acpi_battery_get_info(struct acpi_battery *battery, | |||
171 | } | 174 | } |
172 | 175 | ||
173 | end: | 176 | end: |
174 | acpi_os_free(buffer.pointer); | 177 | kfree(buffer.pointer); |
175 | 178 | ||
176 | if (!result) | 179 | if (!result) |
177 | (*bif) = (struct acpi_battery_info *)data.pointer; | 180 | (*bif) = (struct acpi_battery_info *)data.pointer; |
@@ -198,7 +201,7 @@ acpi_battery_get_status(struct acpi_battery *battery, | |||
198 | 201 | ||
199 | /* Evalute _BST */ | 202 | /* Evalute _BST */ |
200 | 203 | ||
201 | status = acpi_evaluate_object(battery->handle, "_BST", NULL, &buffer); | 204 | status = acpi_evaluate_object(battery->device->handle, "_BST", NULL, &buffer); |
202 | if (ACPI_FAILURE(status)) { | 205 | if (ACPI_FAILURE(status)) { |
203 | ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST")); | 206 | ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST")); |
204 | return -ENODEV; | 207 | return -ENODEV; |
@@ -231,7 +234,7 @@ acpi_battery_get_status(struct acpi_battery *battery, | |||
231 | } | 234 | } |
232 | 235 | ||
233 | end: | 236 | end: |
234 | acpi_os_free(buffer.pointer); | 237 | kfree(buffer.pointer); |
235 | 238 | ||
236 | if (!result) | 239 | if (!result) |
237 | (*bst) = (struct acpi_battery_status *)data.pointer; | 240 | (*bst) = (struct acpi_battery_status *)data.pointer; |
@@ -255,7 +258,7 @@ acpi_battery_set_alarm(struct acpi_battery *battery, unsigned long alarm) | |||
255 | 258 | ||
256 | arg0.integer.value = alarm; | 259 | arg0.integer.value = alarm; |
257 | 260 | ||
258 | status = acpi_evaluate_object(battery->handle, "_BTP", &arg_list, NULL); | 261 | status = acpi_evaluate_object(battery->device->handle, "_BTP", &arg_list, NULL); |
259 | if (ACPI_FAILURE(status)) | 262 | if (ACPI_FAILURE(status)) |
260 | return -ENODEV; | 263 | return -ENODEV; |
261 | 264 | ||
@@ -278,9 +281,7 @@ static int acpi_battery_check(struct acpi_battery *battery) | |||
278 | if (!battery) | 281 | if (!battery) |
279 | return -EINVAL; | 282 | return -EINVAL; |
280 | 283 | ||
281 | result = acpi_bus_get_device(battery->handle, &device); | 284 | device = battery->device; |
282 | if (result) | ||
283 | return result; | ||
284 | 285 | ||
285 | result = acpi_bus_get_status(device); | 286 | result = acpi_bus_get_status(device); |
286 | if (result) | 287 | if (result) |
@@ -305,7 +306,7 @@ static int acpi_battery_check(struct acpi_battery *battery) | |||
305 | 306 | ||
306 | /* See if alarms are supported, and if so, set default */ | 307 | /* See if alarms are supported, and if so, set default */ |
307 | 308 | ||
308 | status = acpi_get_handle(battery->handle, "_BTP", &handle); | 309 | status = acpi_get_handle(battery->device->handle, "_BTP", &handle); |
309 | if (ACPI_SUCCESS(status)) { | 310 | if (ACPI_SUCCESS(status)) { |
310 | battery->flags.alarm = 1; | 311 | battery->flags.alarm = 1; |
311 | acpi_battery_set_alarm(battery, battery->trips.warning); | 312 | acpi_battery_set_alarm(battery, battery->trips.warning); |
@@ -662,12 +663,13 @@ static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) | |||
662 | if (!battery) | 663 | if (!battery) |
663 | return; | 664 | return; |
664 | 665 | ||
665 | if (acpi_bus_get_device(handle, &device)) | 666 | device = battery->device; |
666 | return; | ||
667 | 667 | ||
668 | switch (event) { | 668 | switch (event) { |
669 | case ACPI_BATTERY_NOTIFY_STATUS: | 669 | case ACPI_BATTERY_NOTIFY_STATUS: |
670 | case ACPI_BATTERY_NOTIFY_INFO: | 670 | case ACPI_BATTERY_NOTIFY_INFO: |
671 | case ACPI_NOTIFY_BUS_CHECK: | ||
672 | case ACPI_NOTIFY_DEVICE_CHECK: | ||
671 | acpi_battery_check(battery); | 673 | acpi_battery_check(battery); |
672 | acpi_bus_generate_event(device, event, battery->flags.present); | 674 | acpi_bus_generate_event(device, event, battery->flags.present); |
673 | break; | 675 | break; |
@@ -695,7 +697,7 @@ static int acpi_battery_add(struct acpi_device *device) | |||
695 | return -ENOMEM; | 697 | return -ENOMEM; |
696 | memset(battery, 0, sizeof(struct acpi_battery)); | 698 | memset(battery, 0, sizeof(struct acpi_battery)); |
697 | 699 | ||
698 | battery->handle = device->handle; | 700 | battery->device = device; |
699 | strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME); | 701 | strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME); |
700 | strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS); | 702 | strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS); |
701 | acpi_driver_data(device) = battery; | 703 | acpi_driver_data(device) = battery; |
@@ -708,8 +710,8 @@ static int acpi_battery_add(struct acpi_device *device) | |||
708 | if (result) | 710 | if (result) |
709 | goto end; | 711 | goto end; |
710 | 712 | ||
711 | status = acpi_install_notify_handler(battery->handle, | 713 | status = acpi_install_notify_handler(device->handle, |
712 | ACPI_DEVICE_NOTIFY, | 714 | ACPI_ALL_NOTIFY, |
713 | acpi_battery_notify, battery); | 715 | acpi_battery_notify, battery); |
714 | if (ACPI_FAILURE(status)) { | 716 | if (ACPI_FAILURE(status)) { |
715 | result = -ENODEV; | 717 | result = -ENODEV; |
@@ -740,8 +742,8 @@ static int acpi_battery_remove(struct acpi_device *device, int type) | |||
740 | 742 | ||
741 | battery = (struct acpi_battery *)acpi_driver_data(device); | 743 | battery = (struct acpi_battery *)acpi_driver_data(device); |
742 | 744 | ||
743 | status = acpi_remove_notify_handler(battery->handle, | 745 | status = acpi_remove_notify_handler(device->handle, |
744 | ACPI_DEVICE_NOTIFY, | 746 | ACPI_ALL_NOTIFY, |
745 | acpi_battery_notify); | 747 | acpi_battery_notify); |
746 | 748 | ||
747 | acpi_battery_remove_fs(device); | 749 | acpi_battery_remove_fs(device); |
@@ -753,17 +755,15 @@ static int acpi_battery_remove(struct acpi_device *device, int type) | |||
753 | 755 | ||
754 | static int __init acpi_battery_init(void) | 756 | static int __init acpi_battery_init(void) |
755 | { | 757 | { |
756 | int result = 0; | 758 | int result; |
757 | |||
758 | 759 | ||
759 | acpi_battery_dir = proc_mkdir(ACPI_BATTERY_CLASS, acpi_root_dir); | 760 | acpi_battery_dir = acpi_lock_battery_dir(); |
760 | if (!acpi_battery_dir) | 761 | if (!acpi_battery_dir) |
761 | return -ENODEV; | 762 | return -ENODEV; |
762 | acpi_battery_dir->owner = THIS_MODULE; | ||
763 | 763 | ||
764 | result = acpi_bus_register_driver(&acpi_battery_driver); | 764 | result = acpi_bus_register_driver(&acpi_battery_driver); |
765 | if (result < 0) { | 765 | if (result < 0) { |
766 | remove_proc_entry(ACPI_BATTERY_CLASS, acpi_root_dir); | 766 | acpi_unlock_battery_dir(acpi_battery_dir); |
767 | return -ENODEV; | 767 | return -ENODEV; |
768 | } | 768 | } |
769 | 769 | ||
@@ -775,7 +775,7 @@ static void __exit acpi_battery_exit(void) | |||
775 | 775 | ||
776 | acpi_bus_unregister_driver(&acpi_battery_driver); | 776 | acpi_bus_unregister_driver(&acpi_battery_driver); |
777 | 777 | ||
778 | remove_proc_entry(ACPI_BATTERY_CLASS, acpi_root_dir); | 778 | acpi_unlock_battery_dir(acpi_battery_dir); |
779 | 779 | ||
780 | return; | 780 | return; |
781 | } | 781 | } |