|
@@ -113,6 +113,7 @@ struct acpi_battery {
|
|
u16 spec;
|
|
u16 spec;
|
|
u8 id;
|
|
u8 id;
|
|
u8 present:1;
|
|
u8 present:1;
|
|
|
|
+ u8 have_sysfs_alarm:1;
|
|
};
|
|
};
|
|
|
|
|
|
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
|
|
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
|
|
@@ -808,7 +809,13 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
|
|
}
|
|
}
|
|
battery->bat.get_property = acpi_sbs_battery_get_property;
|
|
battery->bat.get_property = acpi_sbs_battery_get_property;
|
|
result = power_supply_register(&sbs->device->dev, &battery->bat);
|
|
result = power_supply_register(&sbs->device->dev, &battery->bat);
|
|
- device_create_file(battery->bat.dev, &alarm_attr);
|
|
|
|
|
|
+ if (result)
|
|
|
|
+ goto end;
|
|
|
|
+ result = device_create_file(battery->bat.dev, &alarm_attr);
|
|
|
|
+ if (result)
|
|
|
|
+ goto end;
|
|
|
|
+ battery->have_sysfs_alarm = 1;
|
|
|
|
+ end:
|
|
printk(KERN_INFO PREFIX "%s [%s]: Battery Slot [%s] (battery %s)\n",
|
|
printk(KERN_INFO PREFIX "%s [%s]: Battery Slot [%s] (battery %s)\n",
|
|
ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device),
|
|
ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device),
|
|
battery->name, sbs->battery->present ? "present" : "absent");
|
|
battery->name, sbs->battery->present ? "present" : "absent");
|
|
@@ -817,14 +824,16 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
|
|
|
|
|
|
static void acpi_battery_remove(struct acpi_sbs *sbs, int id)
|
|
static void acpi_battery_remove(struct acpi_sbs *sbs, int id)
|
|
{
|
|
{
|
|
- if (sbs->battery[id].bat.dev)
|
|
|
|
- device_remove_file(sbs->battery[id].bat.dev, &alarm_attr);
|
|
|
|
- power_supply_unregister(&sbs->battery[id].bat);
|
|
|
|
-#ifdef CONFIG_ACPI_PROCFS
|
|
|
|
- if (sbs->battery[id].proc_entry) {
|
|
|
|
- acpi_sbs_remove_fs(&(sbs->battery[id].proc_entry),
|
|
|
|
- acpi_battery_dir);
|
|
|
|
|
|
+ struct acpi_battery *battery = &sbs->battery[id];
|
|
|
|
+
|
|
|
|
+ if (battery->bat.dev) {
|
|
|
|
+ if (battery->have_sysfs_alarm)
|
|
|
|
+ device_remove_file(battery->bat.dev, &alarm_attr);
|
|
|
|
+ power_supply_unregister(&battery->bat);
|
|
}
|
|
}
|
|
|
|
+#ifdef CONFIG_ACPI_PROCFS
|
|
|
|
+ if (battery->proc_entry)
|
|
|
|
+ acpi_sbs_remove_fs(&battery->proc_entry, acpi_battery_dir);
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|