Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux...
[pandora-kernel.git] / drivers / acpi / ac.c
index 95223d8..24ccf81 100644 (file)
@@ -50,6 +50,9 @@ ACPI_MODULE_NAME("acpi_ac")
 MODULE_DESCRIPTION(ACPI_AC_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
+extern struct proc_dir_entry *acpi_lock_ac_dir(void);
+extern void *acpi_unlock_ac_dir(struct proc_dir_entry *acpi_ac_dir);
+
 static int acpi_ac_add(struct acpi_device *device);
 static int acpi_ac_remove(struct acpi_device *device, int type);
 static int acpi_ac_open_fs(struct inode *inode, struct file *file);
@@ -65,7 +68,7 @@ static struct acpi_driver acpi_ac_driver = {
 };
 
 struct acpi_ac {
-       acpi_handle handle;
+       struct acpi_device * device;
        unsigned long state;
 };
 
@@ -84,19 +87,18 @@ static int acpi_ac_get_state(struct acpi_ac *ac)
 {
        acpi_status status = AE_OK;
 
-       ACPI_FUNCTION_TRACE("acpi_ac_get_state");
 
        if (!ac)
-               return_VALUE(-EINVAL);
+               return -EINVAL;
 
-       status = acpi_evaluate_integer(ac->handle, "_PSR", NULL, &ac->state);
+       status = acpi_evaluate_integer(ac->device->handle, "_PSR", NULL, &ac->state);
        if (ACPI_FAILURE(status)) {
                ACPI_EXCEPTION((AE_INFO, status, "Error reading AC Adapter state"));
                ac->state = ACPI_AC_STATUS_UNKNOWN;
-               return_VALUE(-ENODEV);
+               return -ENODEV;
        }
 
-       return_VALUE(0);
+       return 0;
 }
 
 /* --------------------------------------------------------------------------
@@ -109,14 +111,13 @@ static int acpi_ac_seq_show(struct seq_file *seq, void *offset)
 {
        struct acpi_ac *ac = (struct acpi_ac *)seq->private;
 
-       ACPI_FUNCTION_TRACE("acpi_ac_seq_show");
 
        if (!ac)
-               return_VALUE(0);
+               return 0;
 
        if (acpi_ac_get_state(ac)) {
                seq_puts(seq, "ERROR: Unable to read AC Adapter state\n");
-               return_VALUE(0);
+               return 0;
        }
 
        seq_puts(seq, "state:                   ");
@@ -132,7 +133,7 @@ static int acpi_ac_seq_show(struct seq_file *seq, void *offset)
                break;
        }
 
-       return_VALUE(0);
+       return 0;
 }
 
 static int acpi_ac_open_fs(struct inode *inode, struct file *file)
@@ -144,13 +145,12 @@ static int acpi_ac_add_fs(struct acpi_device *device)
 {
        struct proc_dir_entry *entry = NULL;
 
-       ACPI_FUNCTION_TRACE("acpi_ac_add_fs");
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
                                                     acpi_ac_dir);
                if (!acpi_device_dir(device))
-                       return_VALUE(-ENODEV);
+                       return -ENODEV;
                acpi_device_dir(device)->owner = THIS_MODULE;
        }
 
@@ -158,19 +158,18 @@ static int acpi_ac_add_fs(struct acpi_device *device)
        entry = create_proc_entry(ACPI_AC_FILE_STATE,
                                  S_IRUGO, acpi_device_dir(device));
        if (!entry)
-               return_VALUE(-ENODEV);
+               return -ENODEV;
        else {
                entry->proc_fops = &acpi_ac_fops;
                entry->data = acpi_driver_data(device);
                entry->owner = THIS_MODULE;
        }
 
-       return_VALUE(0);
+       return 0;
 }
 
 static int acpi_ac_remove_fs(struct acpi_device *device)
 {
-       ACPI_FUNCTION_TRACE("acpi_ac_remove_fs");
 
        if (acpi_device_dir(device)) {
                remove_proc_entry(ACPI_AC_FILE_STATE, acpi_device_dir(device));
@@ -179,7 +178,7 @@ static int acpi_ac_remove_fs(struct acpi_device *device)
                acpi_device_dir(device) = NULL;
        }
 
-       return_VALUE(0);
+       return 0;
 }
 
 /* --------------------------------------------------------------------------
@@ -191,16 +190,15 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
        struct acpi_ac *ac = (struct acpi_ac *)data;
        struct acpi_device *device = NULL;
 
-       ACPI_FUNCTION_TRACE("acpi_ac_notify");
 
        if (!ac)
-               return_VOID;
-
-       if (acpi_bus_get_device(ac->handle, &device))
-               return_VOID;
+               return;
 
+       device = ac->device;
        switch (event) {
        case ACPI_AC_NOTIFY_STATUS:
+       case ACPI_NOTIFY_BUS_CHECK:
+       case ACPI_NOTIFY_DEVICE_CHECK:
                acpi_ac_get_state(ac);
                acpi_bus_generate_event(device, event, (u32) ac->state);
                break;
@@ -210,7 +208,7 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
                break;
        }
 
-       return_VOID;
+       return;
 }
 
 static int acpi_ac_add(struct acpi_device *device)
@@ -219,17 +217,16 @@ static int acpi_ac_add(struct acpi_device *device)
        acpi_status status = AE_OK;
        struct acpi_ac *ac = NULL;
 
-       ACPI_FUNCTION_TRACE("acpi_ac_add");
 
        if (!device)
-               return_VALUE(-EINVAL);
+               return -EINVAL;
 
        ac = kmalloc(sizeof(struct acpi_ac), GFP_KERNEL);
        if (!ac)
-               return_VALUE(-ENOMEM);
+               return -ENOMEM;
        memset(ac, 0, sizeof(struct acpi_ac));
 
-       ac->handle = device->handle;
+       ac->device = device;
        strcpy(acpi_device_name(device), ACPI_AC_DEVICE_NAME);
        strcpy(acpi_device_class(device), ACPI_AC_CLASS);
        acpi_driver_data(device) = ac;
@@ -242,8 +239,8 @@ static int acpi_ac_add(struct acpi_device *device)
        if (result)
                goto end;
 
-       status = acpi_install_notify_handler(ac->handle,
-                                            ACPI_DEVICE_NOTIFY, acpi_ac_notify,
+       status = acpi_install_notify_handler(device->handle,
+                                            ACPI_ALL_NOTIFY, acpi_ac_notify,
                                             ac);
        if (ACPI_FAILURE(status)) {
                result = -ENODEV;
@@ -260,7 +257,7 @@ static int acpi_ac_add(struct acpi_device *device)
                kfree(ac);
        }
 
-       return_VALUE(result);
+       return result;
 }
 
 static int acpi_ac_remove(struct acpi_device *device, int type)
@@ -268,52 +265,48 @@ static int acpi_ac_remove(struct acpi_device *device, int type)
        acpi_status status = AE_OK;
        struct acpi_ac *ac = NULL;
 
-       ACPI_FUNCTION_TRACE("acpi_ac_remove");
 
        if (!device || !acpi_driver_data(device))
-               return_VALUE(-EINVAL);
+               return -EINVAL;
 
        ac = (struct acpi_ac *)acpi_driver_data(device);
 
-       status = acpi_remove_notify_handler(ac->handle,
-                                           ACPI_DEVICE_NOTIFY, acpi_ac_notify);
+       status = acpi_remove_notify_handler(device->handle,
+                                           ACPI_ALL_NOTIFY, acpi_ac_notify);
 
        acpi_ac_remove_fs(device);
 
        kfree(ac);
 
-       return_VALUE(0);
+       return 0;
 }
 
 static int __init acpi_ac_init(void)
 {
-       int result = 0;
+       int result;
 
-       ACPI_FUNCTION_TRACE("acpi_ac_init");
 
-       acpi_ac_dir = proc_mkdir(ACPI_AC_CLASS, acpi_root_dir);
+       acpi_ac_dir = acpi_lock_ac_dir();
        if (!acpi_ac_dir)
-               return_VALUE(-ENODEV);
-       acpi_ac_dir->owner = THIS_MODULE;
+               return -ENODEV;
 
        result = acpi_bus_register_driver(&acpi_ac_driver);
        if (result < 0) {
-               remove_proc_entry(ACPI_AC_CLASS, acpi_root_dir);
-               return_VALUE(-ENODEV);
+               acpi_unlock_ac_dir(acpi_ac_dir);
+               return -ENODEV;
        }
 
-       return_VALUE(0);
+       return 0;
 }
 
 static void __exit acpi_ac_exit(void)
 {
-       ACPI_FUNCTION_TRACE("acpi_ac_exit");
 
        acpi_bus_unregister_driver(&acpi_ac_driver);
 
-       remove_proc_entry(ACPI_AC_CLASS, acpi_root_dir);
+       acpi_unlock_ac_dir(acpi_ac_dir);
 
-       return_VOID;
+       return;
 }
 
 module_init(acpi_ac_init);