ACPI: sbs: fix present rate
[sfrench/cifs-2.6.git] / drivers / acpi / sbs.c
index 62bef0b3b614aef8d10742cd3494e9ecca149675..87b48f838164305f8734b1670fd4d86345983683 100644 (file)
@@ -98,11 +98,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);
@@ -923,7 +923,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 +1034,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 +1074,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 +1123,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 +1158,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 +1215,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 +1300,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 +1483,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 +1496,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 +1574,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 +1656,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 +1682,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;
        }