linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / acpi / thermal.c
index 5753d06..19f3ea4 100644 (file)
@@ -82,7 +82,6 @@ MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n");
 
 static int acpi_thermal_add(struct acpi_device *device);
 static int acpi_thermal_remove(struct acpi_device *device, int type);
-static int acpi_thermal_resume(struct acpi_device *device, int state);
 static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
 static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
 static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
@@ -104,7 +103,6 @@ static struct acpi_driver acpi_thermal_driver = {
        .ops = {
                .add = acpi_thermal_add,
                .remove = acpi_thermal_remove,
-               .resume = acpi_thermal_resume,
                },
 };
 
@@ -162,7 +160,7 @@ struct acpi_thermal_flags {
 };
 
 struct acpi_thermal {
-       struct acpi_device * device;
+       acpi_handle handle;
        acpi_bus_id name;
        unsigned long temperature;
        unsigned long last_temperature;
@@ -176,21 +174,21 @@ struct acpi_thermal {
        struct timer_list timer;
 };
 
-static const struct file_operations acpi_thermal_state_fops = {
+static struct file_operations acpi_thermal_state_fops = {
        .open = acpi_thermal_state_open_fs,
        .read = seq_read,
        .llseek = seq_lseek,
        .release = single_release,
 };
 
-static const struct file_operations acpi_thermal_temp_fops = {
+static struct file_operations acpi_thermal_temp_fops = {
        .open = acpi_thermal_temp_open_fs,
        .read = seq_read,
        .llseek = seq_lseek,
        .release = single_release,
 };
 
-static const struct file_operations acpi_thermal_trip_fops = {
+static struct file_operations acpi_thermal_trip_fops = {
        .open = acpi_thermal_trip_open_fs,
        .read = seq_read,
        .write = acpi_thermal_write_trip_points,
@@ -198,7 +196,7 @@ static const struct file_operations acpi_thermal_trip_fops = {
        .release = single_release,
 };
 
-static const struct file_operations acpi_thermal_cooling_fops = {
+static struct file_operations acpi_thermal_cooling_fops = {
        .open = acpi_thermal_cooling_open_fs,
        .read = seq_read,
        .write = acpi_thermal_write_cooling_mode,
@@ -206,7 +204,7 @@ static const struct file_operations acpi_thermal_cooling_fops = {
        .release = single_release,
 };
 
-static const struct file_operations acpi_thermal_polling_fops = {
+static struct file_operations acpi_thermal_polling_fops = {
        .open = acpi_thermal_polling_open_fs,
        .read = seq_read,
        .write = acpi_thermal_write_polling,
@@ -222,48 +220,51 @@ static int acpi_thermal_get_temperature(struct acpi_thermal *tz)
 {
        acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_get_temperature");
 
        if (!tz)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        tz->last_temperature = tz->temperature;
 
        status =
-           acpi_evaluate_integer(tz->device->handle, "_TMP", NULL, &tz->temperature);
+           acpi_evaluate_integer(tz->handle, "_TMP", NULL, &tz->temperature);
        if (ACPI_FAILURE(status))
-               return -ENODEV;
+               return_VALUE(-ENODEV);
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Temperature is %lu dK\n",
                          tz->temperature));
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_get_polling_frequency(struct acpi_thermal *tz)
 {
        acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_get_polling_frequency");
 
        if (!tz)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        status =
-           acpi_evaluate_integer(tz->device->handle, "_TZP", NULL,
+           acpi_evaluate_integer(tz->handle, "_TZP", NULL,
                                  &tz->polling_frequency);
        if (ACPI_FAILURE(status))
-               return -ENODEV;
+               return_VALUE(-ENODEV);
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Polling frequency is %lu dS\n",
                          tz->polling_frequency));
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_set_polling(struct acpi_thermal *tz, int seconds)
 {
+       ACPI_FUNCTION_TRACE("acpi_thermal_set_polling");
 
        if (!tz)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        tz->polling_frequency = seconds * 10;   /* Convert value to deci-seconds */
 
@@ -271,7 +272,7 @@ static int acpi_thermal_set_polling(struct acpi_thermal *tz, int seconds)
                          "Polling frequency set to %lu seconds\n",
                          tz->polling_frequency));
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_set_cooling_mode(struct acpi_thermal *tz, int mode)
@@ -281,28 +282,29 @@ static int acpi_thermal_set_cooling_mode(struct acpi_thermal *tz, int mode)
        struct acpi_object_list arg_list = { 1, &arg0 };
        acpi_handle handle = NULL;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_set_cooling_mode");
 
        if (!tz)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
-       status = acpi_get_handle(tz->device->handle, "_SCP", &handle);
+       status = acpi_get_handle(tz->handle, "_SCP", &handle);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "_SCP not present\n"));
-               return -ENODEV;
+               return_VALUE(-ENODEV);
        }
 
        arg0.integer.value = mode;
 
        status = acpi_evaluate_object(handle, NULL, &arg_list, NULL);
        if (ACPI_FAILURE(status))
-               return -ENODEV;
+               return_VALUE(-ENODEV);
 
        tz->cooling_mode = mode;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Cooling mode [%s]\n",
                          mode ? "passive" : "active"));
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
@@ -310,18 +312,19 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
        acpi_status status = AE_OK;
        int i = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_get_trip_points");
 
        if (!tz)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        /* Critical Shutdown (required) */
 
-       status = acpi_evaluate_integer(tz->device->handle, "_CRT", NULL,
+       status = acpi_evaluate_integer(tz->handle, "_CRT", NULL,
                                       &tz->trips.critical.temperature);
        if (ACPI_FAILURE(status)) {
                tz->trips.critical.flags.valid = 0;
-               ACPI_EXCEPTION((AE_INFO, status, "No critical threshold"));
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "No critical threshold\n"));
+               return_VALUE(-ENODEV);
        } else {
                tz->trips.critical.flags.valid = 1;
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
@@ -332,7 +335,7 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
        /* Critical Sleep (optional) */
 
        status =
-           acpi_evaluate_integer(tz->device->handle, "_HOT", NULL,
+           acpi_evaluate_integer(tz->handle, "_HOT", NULL,
                                  &tz->trips.hot.temperature);
        if (ACPI_FAILURE(status)) {
                tz->trips.hot.flags.valid = 0;
@@ -346,7 +349,7 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
        /* Passive: Processors (optional) */
 
        status =
-           acpi_evaluate_integer(tz->device->handle, "_PSV", NULL,
+           acpi_evaluate_integer(tz->handle, "_PSV", NULL,
                                  &tz->trips.passive.temperature);
        if (ACPI_FAILURE(status)) {
                tz->trips.passive.flags.valid = 0;
@@ -355,31 +358,32 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
                tz->trips.passive.flags.valid = 1;
 
                status =
-                   acpi_evaluate_integer(tz->device->handle, "_TC1", NULL,
+                   acpi_evaluate_integer(tz->handle, "_TC1", NULL,
                                          &tz->trips.passive.tc1);
                if (ACPI_FAILURE(status))
                        tz->trips.passive.flags.valid = 0;
 
                status =
-                   acpi_evaluate_integer(tz->device->handle, "_TC2", NULL,
+                   acpi_evaluate_integer(tz->handle, "_TC2", NULL,
                                          &tz->trips.passive.tc2);
                if (ACPI_FAILURE(status))
                        tz->trips.passive.flags.valid = 0;
 
                status =
-                   acpi_evaluate_integer(tz->device->handle, "_TSP", NULL,
+                   acpi_evaluate_integer(tz->handle, "_TSP", NULL,
                                          &tz->trips.passive.tsp);
                if (ACPI_FAILURE(status))
                        tz->trips.passive.flags.valid = 0;
 
                status =
-                   acpi_evaluate_reference(tz->device->handle, "_PSL", NULL,
+                   acpi_evaluate_reference(tz->handle, "_PSL", NULL,
                                            &tz->trips.passive.devices);
                if (ACPI_FAILURE(status))
                        tz->trips.passive.flags.valid = 0;
 
                if (!tz->trips.passive.flags.valid)
-                       printk(KERN_WARNING PREFIX "Invalid passive threshold\n");
+                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                         "Invalid passive threshold\n"));
                else
                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
                                          "Found passive threshold [%lu]\n",
@@ -393,14 +397,14 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
                char name[5] = { '_', 'A', 'C', ('0' + i), '\0' };
 
                status =
-                   acpi_evaluate_integer(tz->device->handle, name, NULL,
+                   acpi_evaluate_integer(tz->handle, name, NULL,
                                          &tz->trips.active[i].temperature);
                if (ACPI_FAILURE(status))
                        break;
 
                name[2] = 'L';
                status =
-                   acpi_evaluate_reference(tz->device->handle, name, NULL,
+                   acpi_evaluate_reference(tz->handle, name, NULL,
                                            &tz->trips.active[i].devices);
                if (ACPI_SUCCESS(status)) {
                        tz->trips.active[i].flags.valid = 1;
@@ -408,27 +412,29 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
                                          "Found active threshold [%d]:[%lu]\n",
                                          i, tz->trips.active[i].temperature));
                } else
-                       ACPI_EXCEPTION((AE_INFO, status,
-                                       "Invalid active threshold [%d]", i));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid active threshold [%d]\n",
+                                         i));
        }
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_get_devices(struct acpi_thermal *tz)
 {
        acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_get_devices");
 
        if (!tz)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        status =
-           acpi_evaluate_reference(tz->device->handle, "_TZD", NULL, &tz->devices);
+           acpi_evaluate_reference(tz->handle, "_TZD", NULL, &tz->devices);
        if (ACPI_FAILURE(status))
-               return -ENODEV;
+               return_VALUE(-ENODEV);
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_call_usermode(char *path)
@@ -436,9 +442,10 @@ static int acpi_thermal_call_usermode(char *path)
        char *argv[2] = { NULL, NULL };
        char *envp[3] = { NULL, NULL, NULL };
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_call_usermode");
 
        if (!path)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        argv[0] = path;
 
@@ -448,48 +455,66 @@ static int acpi_thermal_call_usermode(char *path)
 
        call_usermodehelper(argv[0], argv, envp, 0);
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_critical(struct acpi_thermal *tz)
 {
+       int result = 0;
+       struct acpi_device *device = NULL;
+
+       ACPI_FUNCTION_TRACE("acpi_thermal_critical");
+
        if (!tz || !tz->trips.critical.flags.valid)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        if (tz->temperature >= tz->trips.critical.temperature) {
-               printk(KERN_WARNING PREFIX "Critical trip point\n");
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Critical trip point\n"));
                tz->trips.critical.flags.enabled = 1;
        } else if (tz->trips.critical.flags.enabled)
                tz->trips.critical.flags.enabled = 0;
 
+       result = acpi_bus_get_device(tz->handle, &device);
+       if (result)
+               return_VALUE(result);
+
        printk(KERN_EMERG
               "Critical temperature reached (%ld C), shutting down.\n",
               KELVIN_TO_CELSIUS(tz->temperature));
-       acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_CRITICAL,
+       acpi_bus_generate_event(device, ACPI_THERMAL_NOTIFY_CRITICAL,
                                tz->trips.critical.flags.enabled);
 
        acpi_thermal_call_usermode(ACPI_THERMAL_PATH_POWEROFF);
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_hot(struct acpi_thermal *tz)
 {
+       int result = 0;
+       struct acpi_device *device = NULL;
+
+       ACPI_FUNCTION_TRACE("acpi_thermal_hot");
+
        if (!tz || !tz->trips.hot.flags.valid)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        if (tz->temperature >= tz->trips.hot.temperature) {
-               printk(KERN_WARNING PREFIX "Hot trip point\n");
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Hot trip point\n"));
                tz->trips.hot.flags.enabled = 1;
        } else if (tz->trips.hot.flags.enabled)
                tz->trips.hot.flags.enabled = 0;
 
-       acpi_bus_generate_event(tz->device, ACPI_THERMAL_NOTIFY_HOT,
+       result = acpi_bus_get_device(tz->handle, &device);
+       if (result)
+               return_VALUE(result);
+
+       acpi_bus_generate_event(device, ACPI_THERMAL_NOTIFY_HOT,
                                tz->trips.hot.flags.enabled);
 
        /* TBD: Call user-mode "sleep(S4)" function */
 
-       return 0;
+       return_VALUE(0);
 }
 
 static void acpi_thermal_passive(struct acpi_thermal *tz)
@@ -499,6 +524,7 @@ static void acpi_thermal_passive(struct acpi_thermal *tz)
        int trend = 0;
        int i = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_passive");
 
        if (!tz || !tz->trips.passive.flags.valid)
                return;
@@ -587,6 +613,7 @@ static void acpi_thermal_active(struct acpi_thermal *tz)
        int j = 0;
        unsigned long maxtemp = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_active");
 
        if (!tz)
                return;
@@ -613,10 +640,10 @@ static void acpi_thermal_active(struct acpi_thermal *tz)
                                                       handles[j],
                                                       ACPI_STATE_D0);
                                if (result) {
-                                       printk(KERN_WARNING PREFIX
-                                                     "Unable to turn cooling device [%p] 'on'\n",
-                                                     active->devices.
-                                                     handles[j]);
+                                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                         "Unable to turn cooling device [%p] 'on'\n",
+                                                         active->devices.
+                                                         handles[j]));
                                        continue;
                                }
                                active->flags.enabled = 1;
@@ -638,9 +665,9 @@ static void acpi_thermal_active(struct acpi_thermal *tz)
                        result = acpi_bus_set_power(active->devices.handles[j],
                                                    ACPI_STATE_D3);
                        if (result) {
-                               printk(KERN_WARNING PREFIX
-                                             "Unable to turn cooling device [%p] 'off'\n",
-                                             active->devices.handles[j]);
+                               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                 "Unable to turn cooling device [%p] 'off'\n",
+                                                 active->devices.handles[j]));
                                continue;
                        }
                        active->flags.enabled = 0;
@@ -657,7 +684,8 @@ static void acpi_thermal_run(unsigned long data)
 {
        struct acpi_thermal *tz = (struct acpi_thermal *)data;
        if (!tz->zombie)
-               acpi_os_execute(OSL_GPE_HANDLER, acpi_thermal_check, (void *)data);
+               acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
+                                           acpi_thermal_check, (void *)data);
 }
 
 static void acpi_thermal_check(void *data)
@@ -668,17 +696,18 @@ static void acpi_thermal_check(void *data)
        int i = 0;
        struct acpi_thermal_state state;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_check");
 
        if (!tz) {
-               printk(KERN_ERR PREFIX "Invalid (NULL) context\n");
-               return;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid (NULL) context.\n"));
+               return_VOID;
        }
 
        state = tz->state;
 
        result = acpi_thermal_get_temperature(tz);
        if (result)
-               return;
+               return_VOID;
 
        memset(&tz->state, 0, sizeof(tz->state));
 
@@ -767,7 +796,7 @@ static void acpi_thermal_check(void *data)
                }
        }
 
-       return;
+       return_VOID;
 }
 
 /* --------------------------------------------------------------------------
@@ -780,6 +809,7 @@ static int acpi_thermal_state_seq_show(struct seq_file *seq, void *offset)
 {
        struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_state_seq_show");
 
        if (!tz)
                goto end;
@@ -802,7 +832,7 @@ static int acpi_thermal_state_seq_show(struct seq_file *seq, void *offset)
        }
 
       end:
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file)
@@ -815,6 +845,7 @@ static int acpi_thermal_temp_seq_show(struct seq_file *seq, void *offset)
        int result = 0;
        struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_temp_seq_show");
 
        if (!tz)
                goto end;
@@ -827,7 +858,7 @@ static int acpi_thermal_temp_seq_show(struct seq_file *seq, void *offset)
                   KELVIN_TO_CELSIUS(tz->temperature));
 
       end:
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file)
@@ -841,6 +872,7 @@ static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset)
        int i = 0;
        int j = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_trip_seq_show");
 
        if (!tz)
                goto end;
@@ -880,7 +912,7 @@ static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset)
        }
 
       end:
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file)
@@ -901,25 +933,26 @@ acpi_thermal_write_trip_points(struct file *file,
        int *active;
        int i = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_write_trip_points");
 
        limit_string = kmalloc(ACPI_THERMAL_MAX_LIMIT_STR_LEN, GFP_KERNEL);
        if (!limit_string)
-               return -ENOMEM;
+               return_VALUE(-ENOMEM);
 
        memset(limit_string, 0, ACPI_THERMAL_MAX_LIMIT_STR_LEN);
 
        active = kmalloc(ACPI_THERMAL_MAX_ACTIVE * sizeof(int), GFP_KERNEL);
-       if (!active) {
-               kfree(limit_string);
-               return -ENOMEM;
-       }
+       if (!active)
+               return_VALUE(-ENOMEM);
 
        if (!tz || (count > ACPI_THERMAL_MAX_LIMIT_STR_LEN - 1)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid argument\n"));
                count = -EINVAL;
                goto end;
        }
 
        if (copy_from_user(limit_string, buffer, count)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid data\n"));
                count = -EFAULT;
                goto end;
        }
@@ -932,6 +965,7 @@ acpi_thermal_write_trip_points(struct file *file,
                     &active[5], &active[6], &active[7], &active[8],
                     &active[9]);
        if (!(num >= 5 && num < (ACPI_THERMAL_MAX_ACTIVE + 3))) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid data format\n"));
                count = -EINVAL;
                goto end;
        }
@@ -948,13 +982,14 @@ acpi_thermal_write_trip_points(struct file *file,
       end:
        kfree(active);
        kfree(limit_string);
-       return count;
+       return_VALUE(count);
 }
 
 static int acpi_thermal_cooling_seq_show(struct seq_file *seq, void *offset)
 {
        struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_cooling_seq_show");
 
        if (!tz)
                goto end;
@@ -970,7 +1005,7 @@ static int acpi_thermal_cooling_seq_show(struct seq_file *seq, void *offset)
                           tz->cooling_mode ? "passive" : "active");
 
       end:
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_cooling_open_fs(struct inode *inode, struct file *file)
@@ -989,15 +1024,16 @@ acpi_thermal_write_cooling_mode(struct file *file,
        int result = 0;
        char mode_string[12] = { '\0' };
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_write_cooling_mode");
 
        if (!tz || (count > sizeof(mode_string) - 1))
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        if (!tz->flags.cooling_mode)
-               return -ENODEV;
+               return_VALUE(-ENODEV);
 
        if (copy_from_user(mode_string, buffer, count))
-               return -EFAULT;
+               return_VALUE(-EFAULT);
 
        mode_string[count] = '\0';
 
@@ -1005,17 +1041,18 @@ acpi_thermal_write_cooling_mode(struct file *file,
                                               simple_strtoul(mode_string, NULL,
                                                              0));
        if (result)
-               return result;
+               return_VALUE(result);
 
        acpi_thermal_check(tz);
 
-       return count;
+       return_VALUE(count);
 }
 
 static int acpi_thermal_polling_seq_show(struct seq_file *seq, void *offset)
 {
        struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_polling_seq_show");
 
        if (!tz)
                goto end;
@@ -1029,7 +1066,7 @@ static int acpi_thermal_polling_seq_show(struct seq_file *seq, void *offset)
                   (tz->polling_frequency / 10));
 
       end:
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_polling_open_fs(struct inode *inode, struct file *file)
@@ -1049,12 +1086,13 @@ acpi_thermal_write_polling(struct file *file,
        char polling_string[12] = { '\0' };
        int seconds = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_write_polling");
 
        if (!tz || (count > sizeof(polling_string) - 1))
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        if (copy_from_user(polling_string, buffer, count))
-               return -EFAULT;
+               return_VALUE(-EFAULT);
 
        polling_string[count] = '\0';
 
@@ -1062,23 +1100,24 @@ acpi_thermal_write_polling(struct file *file,
 
        result = acpi_thermal_set_polling(tz, seconds);
        if (result)
-               return result;
+               return_VALUE(result);
 
        acpi_thermal_check(tz);
 
-       return count;
+       return_VALUE(count);
 }
 
 static int acpi_thermal_add_fs(struct acpi_device *device)
 {
        struct proc_dir_entry *entry = NULL;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_add_fs");
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
                                                     acpi_thermal_dir);
                if (!acpi_device_dir(device))
-                       return -ENODEV;
+                       return_VALUE(-ENODEV);
                acpi_device_dir(device)->owner = THIS_MODULE;
        }
 
@@ -1086,7 +1125,9 @@ static int acpi_thermal_add_fs(struct acpi_device *device)
        entry = create_proc_entry(ACPI_THERMAL_FILE_STATE,
                                  S_IRUGO, acpi_device_dir(device));
        if (!entry)
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_STATE));
        else {
                entry->proc_fops = &acpi_thermal_state_fops;
                entry->data = acpi_driver_data(device);
@@ -1097,7 +1138,9 @@ static int acpi_thermal_add_fs(struct acpi_device *device)
        entry = create_proc_entry(ACPI_THERMAL_FILE_TEMPERATURE,
                                  S_IRUGO, acpi_device_dir(device));
        if (!entry)
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_TEMPERATURE));
        else {
                entry->proc_fops = &acpi_thermal_temp_fops;
                entry->data = acpi_driver_data(device);
@@ -1109,7 +1152,9 @@ static int acpi_thermal_add_fs(struct acpi_device *device)
                                  S_IFREG | S_IRUGO | S_IWUSR,
                                  acpi_device_dir(device));
        if (!entry)
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_TRIP_POINTS));
        else {
                entry->proc_fops = &acpi_thermal_trip_fops;
                entry->data = acpi_driver_data(device);
@@ -1121,7 +1166,9 @@ static int acpi_thermal_add_fs(struct acpi_device *device)
                                  S_IFREG | S_IRUGO | S_IWUSR,
                                  acpi_device_dir(device));
        if (!entry)
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_COOLING_MODE));
        else {
                entry->proc_fops = &acpi_thermal_cooling_fops;
                entry->data = acpi_driver_data(device);
@@ -1133,18 +1180,21 @@ static int acpi_thermal_add_fs(struct acpi_device *device)
                                  S_IFREG | S_IRUGO | S_IWUSR,
                                  acpi_device_dir(device));
        if (!entry)
-               return -ENODEV;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_POLLING_FREQ));
        else {
                entry->proc_fops = &acpi_thermal_polling_fops;
                entry->data = acpi_driver_data(device);
                entry->owner = THIS_MODULE;
        }
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_remove_fs(struct acpi_device *device)
 {
+       ACPI_FUNCTION_TRACE("acpi_thermal_remove_fs");
 
        if (acpi_device_dir(device)) {
                remove_proc_entry(ACPI_THERMAL_FILE_POLLING_FREQ,
@@ -1161,7 +1211,7 @@ static int acpi_thermal_remove_fs(struct acpi_device *device)
                acpi_device_dir(device) = NULL;
        }
 
-       return 0;
+       return_VALUE(0);
 }
 
 /* --------------------------------------------------------------------------
@@ -1173,11 +1223,13 @@ static void acpi_thermal_notify(acpi_handle handle, u32 event, void *data)
        struct acpi_thermal *tz = (struct acpi_thermal *)data;
        struct acpi_device *device = NULL;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_notify");
 
        if (!tz)
-               return;
+               return_VOID;
 
-       device = tz->device;
+       if (acpi_bus_get_device(tz->handle, &device))
+               return_VOID;
 
        switch (event) {
        case ACPI_THERMAL_NOTIFY_TEMPERATURE:
@@ -1199,26 +1251,27 @@ static void acpi_thermal_notify(acpi_handle handle, u32 event, void *data)
                break;
        }
 
-       return;
+       return_VOID;
 }
 
 static int acpi_thermal_get_info(struct acpi_thermal *tz)
 {
        int result = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_get_info");
 
        if (!tz)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        /* Get temperature [_TMP] (required) */
        result = acpi_thermal_get_temperature(tz);
        if (result)
-               return result;
+               return_VALUE(result);
 
        /* Get trip points [_CRT, _PSV, etc.] (required) */
        result = acpi_thermal_get_trip_points(tz);
        if (result)
-               return result;
+               return_VALUE(result);
 
        /* Set the cooling mode [_SCP] to active cooling (default) */
        result = acpi_thermal_set_cooling_mode(tz, ACPI_THERMAL_MODE_ACTIVE);
@@ -1258,7 +1311,7 @@ static int acpi_thermal_get_info(struct acpi_thermal *tz)
        if (!result)
                tz->flags.devices = 1;
 
-       return 0;
+       return_VALUE(0);
 }
 
 static int acpi_thermal_add(struct acpi_device *device)
@@ -1267,16 +1320,17 @@ static int acpi_thermal_add(struct acpi_device *device)
        acpi_status status = AE_OK;
        struct acpi_thermal *tz = NULL;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_add");
 
        if (!device)
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        tz = kmalloc(sizeof(struct acpi_thermal), GFP_KERNEL);
        if (!tz)
-               return -ENOMEM;
+               return_VALUE(-ENOMEM);
        memset(tz, 0, sizeof(struct acpi_thermal));
 
-       tz->device = device;
+       tz->handle = device->handle;
        strcpy(tz->name, device->pnp.bus_id);
        strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
        strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
@@ -1288,16 +1342,18 @@ static int acpi_thermal_add(struct acpi_device *device)
 
        result = acpi_thermal_add_fs(device);
        if (result)
-               goto end;
+               return_VALUE(result);
 
        init_timer(&tz->timer);
 
        acpi_thermal_check(tz);
 
-       status = acpi_install_notify_handler(device->handle,
+       status = acpi_install_notify_handler(tz->handle,
                                             ACPI_DEVICE_NOTIFY,
                                             acpi_thermal_notify, tz);
        if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Error installing notify handler\n"));
                result = -ENODEV;
                goto end;
        }
@@ -1312,7 +1368,7 @@ static int acpi_thermal_add(struct acpi_device *device)
                kfree(tz);
        }
 
-       return result;
+       return_VALUE(result);
 }
 
 static int acpi_thermal_remove(struct acpi_device *device, int type)
@@ -1320,9 +1376,10 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
        acpi_status status = AE_OK;
        struct acpi_thermal *tz = NULL;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_remove");
 
        if (!device || !acpi_driver_data(device))
-               return -EINVAL;
+               return_VALUE(-EINVAL);
 
        tz = (struct acpi_thermal *)acpi_driver_data(device);
 
@@ -1335,9 +1392,12 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
        /* deferred task may reinsert timer */
        del_timer_sync(&(tz->timer));
 
-       status = acpi_remove_notify_handler(device->handle,
+       status = acpi_remove_notify_handler(tz->handle,
                                            ACPI_DEVICE_NOTIFY,
                                            acpi_thermal_notify);
+       if (ACPI_FAILURE(status))
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Error removing notify handler\n"));
 
        /* Terminate policy */
        if (tz->trips.passive.flags.valid && tz->trips.passive.flags.enabled) {
@@ -1353,65 +1413,38 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
        acpi_thermal_remove_fs(device);
 
        kfree(tz);
-       return 0;
-}
-
-static int acpi_thermal_resume(struct acpi_device *device, int state)
-{
-       struct acpi_thermal *tz = NULL;
-       int i;
-
-       if (!device || !acpi_driver_data(device))
-               return -EINVAL;
-
-       tz = (struct acpi_thermal *)acpi_driver_data(device);
-
-       acpi_thermal_get_temperature(tz);
-
-       for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
-               if (tz->trips.active[i].flags.valid) {
-                       tz->temperature = tz->trips.active[i].temperature;
-                       tz->trips.active[i].flags.enabled = 0;
-
-                       acpi_thermal_active(tz);
-
-                       tz->state.active |= tz->trips.active[i].flags.enabled;
-                       tz->state.active_index = i;
-               }
-       }
-
-       acpi_thermal_check(tz);
-
-       return AE_OK;
+       return_VALUE(0);
 }
 
 static int __init acpi_thermal_init(void)
 {
        int result = 0;
 
+       ACPI_FUNCTION_TRACE("acpi_thermal_init");
 
        acpi_thermal_dir = proc_mkdir(ACPI_THERMAL_CLASS, acpi_root_dir);
        if (!acpi_thermal_dir)
-               return -ENODEV;
+               return_VALUE(-ENODEV);
        acpi_thermal_dir->owner = THIS_MODULE;
 
        result = acpi_bus_register_driver(&acpi_thermal_driver);
        if (result < 0) {
                remove_proc_entry(ACPI_THERMAL_CLASS, acpi_root_dir);
-               return -ENODEV;
+               return_VALUE(-ENODEV);
        }
 
-       return 0;
+       return_VALUE(0);
 }
 
 static void __exit acpi_thermal_exit(void)
 {
+       ACPI_FUNCTION_TRACE("acpi_thermal_exit");
 
        acpi_bus_unregister_driver(&acpi_thermal_driver);
 
        remove_proc_entry(ACPI_THERMAL_CLASS, acpi_root_dir);
 
-       return;
+       return_VOID;
 }
 
 module_init(acpi_thermal_init);