Pull bugzilla-7897 into release branch
[sfrench/cifs-2.6.git] / drivers / acpi / sbs.c
index 62bef0b3b614aef8d10742cd3494e9ecca149675..59640d9a0acceefe1ee8a4e6d9495edb4f5c5431 100644 (file)
@@ -59,7 +59,6 @@ extern void acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir);
 #define ACPI_AC_CLASS                  "ac_adapter"
 #define ACPI_BATTERY_CLASS             "battery"
 #define ACPI_SBS_HID                   "ACPI0002"
-#define ACPI_SBS_DRIVER_NAME           "ACPI Smart Battery System Driver"
 #define ACPI_SBS_DEVICE_NAME           "Smart Battery System"
 #define ACPI_SBS_FILE_INFO             "info"
 #define ACPI_SBS_FILE_STATE            "state"
@@ -78,7 +77,7 @@ extern void acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir);
 #define        MAX_SBS_BAT                     4
 #define        MAX_SMBUS_ERR                   1
 
-ACPI_MODULE_NAME("acpi_sbs");
+ACPI_MODULE_NAME("sbs");
 
 MODULE_AUTHOR("Rich Townsend");
 MODULE_DESCRIPTION("Smart Battery System ACPI interface driver");
@@ -98,11 +97,11 @@ static int update_info_mode = UPDATE_INFO_MODE;
 static int update_time = UPDATE_TIME;
 static int update_time2 = UPDATE_TIME2;
 
-module_param(capacity_mode, int, CAPACITY_UNIT);
-module_param(update_mode, int, UPDATE_MODE);
-module_param(update_info_mode, int, UPDATE_INFO_MODE);
-module_param(update_time, int, UPDATE_TIME);
-module_param(update_time2, int, UPDATE_TIME2);
+module_param(capacity_mode, int, 0);
+module_param(update_mode, int, 0);
+module_param(update_info_mode, int, 0);
+module_param(update_time, int, 0);
+module_param(update_time2, int, 0);
 
 static int acpi_sbs_add(struct acpi_device *device);
 static int acpi_sbs_remove(struct acpi_device *device, int type);
@@ -110,7 +109,7 @@ static void acpi_battery_smbus_err_handler(struct acpi_ec_smbus *smbus);
 static void acpi_sbs_update_queue(void *data);
 
 static struct acpi_driver acpi_sbs_driver = {
-       .name = ACPI_SBS_DRIVER_NAME,
+       .name = "sbs",
        .class = ACPI_SBS_CLASS,
        .ids = ACPI_SBS_HID,
        .ops = {
@@ -923,7 +922,7 @@ static struct proc_dir_entry *acpi_battery_dir = NULL;
 
 static int acpi_battery_read_info(struct seq_file *seq, void *offset)
 {
-       struct acpi_battery *battery = (struct acpi_battery *)seq->private;
+       struct acpi_battery *battery = seq->private;
        int cscale;
        int result = 0;
 
@@ -1034,21 +1033,19 @@ static int acpi_battery_read_state(struct seq_file *seq, void *offset)
        } else {
                seq_printf(seq, "capacity state:          ok\n");
        }
+
+       foo = (s16) battery->state.amperage * battery->info.ipscale;
+       if (battery->info.capacity_mode) {
+               foo = foo * battery->info.design_voltage / 1000;
+       }
        if (battery->state.amperage < 0) {
                seq_printf(seq, "charging state:          discharging\n");
-               foo = battery->state.remaining_capacity * cscale * 60 /
-                   (battery->state.average_time_to_empty == 0 ? 1 :
-                    battery->state.average_time_to_empty);
-               seq_printf(seq, "present rate:            %i%s\n",
-                          foo, battery->info.capacity_mode ? "0 mW" : " mA");
+               seq_printf(seq, "present rate:            %d %s\n",
+                          -foo, battery->info.capacity_mode ? "mW" : "mA");
        } else if (battery->state.amperage > 0) {
                seq_printf(seq, "charging state:          charging\n");
-               foo = (battery->info.full_charge_capacity -
-                      battery->state.remaining_capacity) * cscale * 60 /
-                   (battery->state.average_time_to_full == 0 ? 1 :
-                    battery->state.average_time_to_full);
-               seq_printf(seq, "present rate:            %i%s\n",
-                          foo, battery->info.capacity_mode ? "0 mW" : " mA");
+               seq_printf(seq, "present rate:            %d %s\n",
+                          foo, battery->info.capacity_mode ? "mW" : "mA");
        } else {
                seq_printf(seq, "charging state:          charged\n");
                seq_printf(seq, "present rate:            0 %s\n",
@@ -1076,7 +1073,7 @@ static int acpi_battery_state_open_fs(struct inode *inode, struct file *file)
 
 static int acpi_battery_read_alarm(struct seq_file *seq, void *offset)
 {
-       struct acpi_battery *battery = (struct acpi_battery *)seq->private;
+       struct acpi_battery *battery = seq->private;
        int result = 0;
        int cscale;
 
@@ -1125,8 +1122,8 @@ static ssize_t
 acpi_battery_write_alarm(struct file *file, const char __user * buffer,
                         size_t count, loff_t * ppos)
 {
-       struct seq_file *seq = (struct seq_file *)file->private_data;
-       struct acpi_battery *battery = (struct acpi_battery *)seq->private;
+       struct seq_file *seq = file->private_data;
+       struct acpi_battery *battery = seq->private;
        char alarm_string[12] = { '\0' };
        int result, old_alarm, new_alarm;
 
@@ -1160,14 +1157,14 @@ acpi_battery_write_alarm(struct file *file, const char __user * buffer,
        if (result) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
                                  "acpi_battery_set_alarm() failed\n"));
-               (void)acpi_battery_set_alarm(battery, old_alarm);
+               acpi_battery_set_alarm(battery, old_alarm);
                goto end;
        }
        result = acpi_battery_get_alarm(battery);
        if (result) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
                                  "acpi_battery_get_alarm() failed\n"));
-               (void)acpi_battery_set_alarm(battery, old_alarm);
+               acpi_battery_set_alarm(battery, old_alarm);
                goto end;
        }
 
@@ -1217,7 +1214,7 @@ static struct proc_dir_entry *acpi_ac_dir = NULL;
 
 static int acpi_ac_read_state(struct seq_file *seq, void *offset)
 {
-       struct acpi_sbs *sbs = (struct acpi_sbs *)seq->private;
+       struct acpi_sbs *sbs = seq->private;
        int result;
 
        if (sbs->zombie) {
@@ -1302,7 +1299,7 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
                battery->init_state = 1;
        }
 
-       (void)sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id);
+       sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id);
 
        result = acpi_sbs_generic_add_fs(&battery->battery_entry,
                                         acpi_battery_dir,
@@ -1485,7 +1482,7 @@ static int acpi_sbs_update_run(struct acpi_sbs *sbs, int data_type)
                }
 
                if (old_battery_present != new_battery_present) {
-                       (void)sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id);
+                       sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id);
                        result = acpi_sbs_generate_event(sbs->device,
                                                         ACPI_SBS_BATTERY_NOTIFY_STATUS,
                                                         new_battery_present,
@@ -1498,7 +1495,7 @@ static int acpi_sbs_update_run(struct acpi_sbs *sbs, int data_type)
                        }
                }
                if (old_remaining_capacity != battery->state.remaining_capacity) {
-                       (void)sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id);
+                       sprintf(dir_name, ACPI_BATTERY_DIR_NAME, id);
                        result = acpi_sbs_generate_event(sbs->device,
                                                         ACPI_SBS_BATTERY_NOTIFY_STATUS,
                                                         new_battery_present,
@@ -1576,12 +1573,11 @@ static int acpi_sbs_add(struct acpi_device *device)
        int id, cnt;
        acpi_status status = AE_OK;
 
-       sbs = kmalloc(sizeof(struct acpi_sbs), GFP_KERNEL);
+       sbs = kzalloc(sizeof(struct acpi_sbs), GFP_KERNEL);
        if (!sbs) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "kmalloc() failed\n"));
                return -ENOMEM;
        }
-       memset(sbs, 0, sizeof(struct acpi_sbs));
 
        cnt = 0;
        while (cnt < 10) {
@@ -1659,7 +1655,7 @@ static int acpi_sbs_add(struct acpi_device *device)
        init_timer(&sbs->update_timer);
        if (update_mode == QUEUE_UPDATE_MODE) {
                status = acpi_os_execute(OSL_GPE_HANDLER,
-                                        acpi_sbs_update_queue, (void *)sbs);
+                                        acpi_sbs_update_queue, sbs);
                if (status != AE_OK) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
                                          "acpi_os_execute() failed\n"));
@@ -1685,10 +1681,16 @@ static int acpi_sbs_add(struct acpi_device *device)
 
 int acpi_sbs_remove(struct acpi_device *device, int type)
 {
-       struct acpi_sbs *sbs = (struct acpi_sbs *)acpi_driver_data(device);
+       struct acpi_sbs *sbs;
        int id;
 
-       if (!device || !sbs) {
+       if (!device) {
+               return -EINVAL;
+       }
+
+       sbs = (struct acpi_sbs *)acpi_driver_data(device);
+
+       if (!sbs) {
                return -EINVAL;
        }