@@ -546,8 +546,6 @@ static int sysfs_add_battery(struct acpi_battery *battery)
static void sysfs_remove_battery(struct acpi_battery *battery)
{
- if (!battery->bat.dev)
- return;
device_remove_file(battery->bat.dev, &alarm_attr);
power_supply_unregister(&battery->bat);
battery->bat.dev = NULL;
@@ -568,9 +566,6 @@ static int acpi_battery_update(struct acpi_battery *battery)
if (result)
return result;
if (!acpi_battery_present(battery)) {
-#ifdef CONFIG_ACPI_SYSFS_POWER
- sysfs_remove_battery(battery);
-#endif
battery->update_time = 0;
return 0;
}
@@ -582,10 +577,6 @@ static int acpi_battery_update(struct acpi_battery *battery)
acpi_battery_quirks(battery);
acpi_battery_init_alarm(battery);
}
-#ifdef CONFIG_ACPI_SYSFS_POWER
- if (!battery->bat.dev)
- sysfs_add_battery(battery);
-#endif
return acpi_battery_get_state(battery);
}
@@ -877,9 +868,7 @@ static void acpi_battery_notify(struct acpi_device *device, u32 event)
dev_name(&device->dev), event,
acpi_battery_present(battery));
#ifdef CONFIG_ACPI_SYSFS_POWER
- /* acpi_battery_update could remove power_supply object */
- if (battery->bat.dev)
- power_supply_changed(&battery->bat);
+ power_supply_changed(&battery->bat);
#endif
}
@@ -904,17 +893,24 @@ static int acpi_battery_add(struct acpi_device *device)
acpi_battery_update(battery);
#ifdef CONFIG_ACPI_PROCFS_POWER
result = acpi_battery_add_fs(device);
+ if (result)
+ goto fail;
#endif
- if (!result) {
- printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n",
- ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device),
- device->status.battery_present ? "present" : "absent");
- } else {
+#ifdef CONFIG_ACPI_SYSFS_POWER
+ result = sysfs_add_battery(battery);
+ if (result)
+ goto fail;
+#endif
+ printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n",
+ ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device),
+ device->status.battery_present ? "present" : "absent");
+ return 0;
+
+fail:
#ifdef CONFIG_ACPI_PROCFS_POWER
- acpi_battery_remove_fs(device);
+ acpi_battery_remove_fs(device);
#endif
- kfree(battery);
- }
+ kfree(battery);
return result;
}