]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/acpi/battery.c
Pull sbs into release branch
[linux-2.6-omap-h63xx.git] / drivers / acpi / battery.c
index cad932de383d02c3f3426f3784a9ff2190a1e4b2..d7b499fe0cd932fec5f8c6a9c7237cd38b962acc 100644 (file)
@@ -41,7 +41,6 @@
 
 #define ACPI_BATTERY_COMPONENT         0x00040000
 #define ACPI_BATTERY_CLASS             "battery"
-#define ACPI_BATTERY_HID               "PNP0C0A"
 #define ACPI_BATTERY_DEVICE_NAME       "Battery"
 #define ACPI_BATTERY_NOTIFY_STATUS     0x80
 #define ACPI_BATTERY_NOTIFY_INFO       0x81
@@ -74,10 +73,16 @@ static int acpi_battery_add(struct acpi_device *device);
 static int acpi_battery_remove(struct acpi_device *device, int type);
 static int acpi_battery_resume(struct acpi_device *device);
 
+static const struct acpi_device_id battery_device_ids[] = {
+       {"PNP0C0A", 0},
+       {"", 0},
+};
+MODULE_DEVICE_TABLE(acpi, battery_device_ids);
+
 static struct acpi_driver acpi_battery_driver = {
        .name = "battery",
        .class = ACPI_BATTERY_CLASS,
-       .ids = ACPI_BATTERY_HID,
+       .ids = battery_device_ids,
        .ops = {
                .add = acpi_battery_add,
                .resume = acpi_battery_resume,
@@ -108,7 +113,7 @@ struct acpi_battery_info {
        acpi_string oem_info;
 };
 
-enum acpi_battery_files{
+enum acpi_battery_files {
        ACPI_BATTERY_INFO = 0,
        ACPI_BATTERY_STATE,
        ACPI_BATTERY_ALARM,
@@ -124,13 +129,14 @@ struct acpi_battery_flags {
 };
 
 struct acpi_battery {
-       struct mutex mutex;
        struct acpi_device *device;
        struct acpi_battery_flags flags;
        struct acpi_buffer bif_data;
        struct acpi_buffer bst_data;
+       struct mutex lock;
        unsigned long alarm;
        unsigned long update_time[ACPI_BATTERY_NUMFILES];
+
 };
 
 inline int acpi_battery_present(struct acpi_battery *battery)
@@ -230,10 +236,10 @@ static int acpi_battery_get_info(struct acpi_battery *battery)
                return 0;
 
        /* Evaluate _BIF */
-
-       status =
-           acpi_evaluate_object(acpi_battery_handle(battery), "_BIF", NULL,
-                                &buffer);
+       mutex_lock(&battery->lock);
+       status = acpi_evaluate_object(acpi_battery_handle(battery), "_BIF",
+                                     NULL, &buffer);
+       mutex_unlock(&battery->lock);
        if (ACPI_FAILURE(status)) {
                ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF"));
                return -ENODEV;
@@ -280,10 +286,10 @@ static int acpi_battery_get_state(struct acpi_battery *battery)
                return 0;
 
        /* Evaluate _BST */
-
-       status =
-           acpi_evaluate_object(acpi_battery_handle(battery), "_BST", NULL,
-                                &buffer);
+       mutex_lock(&battery->lock);
+       status = acpi_evaluate_object(acpi_battery_handle(battery), "_BST",
+                                     NULL, &buffer);
+       mutex_unlock(&battery->lock);
        if (ACPI_FAILURE(status)) {
                ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST"));
                return -ENODEV;
@@ -331,9 +337,10 @@ static int acpi_battery_set_alarm(struct acpi_battery *battery,
 
        arg0.integer.value = alarm;
 
-       status =
-           acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
+       mutex_lock(&battery->lock);
+       status = acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
                                 &arg_list, NULL);
+       mutex_unlock(&battery->lock);
        if (ACPI_FAILURE(status))
                return -ENODEV;
 
@@ -653,8 +660,6 @@ acpi_battery_write_alarm(struct file *file,
        if (!battery || (count > sizeof(alarm_string) - 1))
                return -EINVAL;
 
-       mutex_lock(&battery->mutex);
-
        result = acpi_battery_update(battery, 1, &update_result);
        if (result) {
                result = -ENODEV;
@@ -683,9 +688,7 @@ acpi_battery_write_alarm(struct file *file,
        acpi_battery_check_result(battery, result);
 
        if (!result)
-               result = count;
-
-       mutex_unlock(&battery->mutex);
+               return count;
 
        return result;
 }
@@ -709,8 +712,6 @@ static int acpi_battery_read(int fid, struct seq_file *seq)
        int update_result = ACPI_BATTERY_NONE_UPDATE;
        int update = 0;
 
-       mutex_lock(&battery->mutex);
-
        update = (get_seconds() - battery->update_time[fid] >= update_time);
        update = (update | battery->flags.update[fid]);
 
@@ -728,7 +729,6 @@ static int acpi_battery_read(int fid, struct seq_file *seq)
        result = acpi_read_funcs[fid].print(seq, result);
        acpi_battery_check_result(battery, result);
        battery->flags.update[fid] = result;
-       mutex_unlock(&battery->mutex);
        return result;
 }
 
@@ -892,10 +892,7 @@ static int acpi_battery_add(struct acpi_device *device)
        if (!battery)
                return -ENOMEM;
 
-       mutex_init(&battery->mutex);
-
-       mutex_lock(&battery->mutex);
-
+       mutex_init(&battery->lock);
        battery->device = device;
        strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
        strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
@@ -931,7 +928,6 @@ static int acpi_battery_add(struct acpi_device *device)
                kfree(battery);
        }
 
-       mutex_unlock(&battery->mutex);
 
        return result;
 }
@@ -946,8 +942,6 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
 
        battery = acpi_driver_data(device);
 
-       mutex_lock(&battery->mutex);
-
        status = acpi_remove_notify_handler(device->handle,
                                            ACPI_ALL_NOTIFY,
                                            acpi_battery_notify);
@@ -958,9 +952,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
 
        kfree(battery->bst_data.pointer);
 
-       mutex_unlock(&battery->mutex);
-
-       mutex_destroy(&battery->mutex);
+       mutex_destroy(&battery->lock);
 
        kfree(battery);