Loading drivers/acpi/Kconfig +6 −3 Original line number Original line Diff line number Diff line Loading @@ -82,6 +82,12 @@ config ACPI_PROCFS_POWER and functions, which do not yet exist in /sys and functions, which do not yet exist in /sys Say N to delete power /proc/acpi/ folders that have moved to /sys/ Say N to delete power /proc/acpi/ folders that have moved to /sys/ config ACPI_SYSFS_POWER bool "Future power /sys interface" select POWER_SUPPLY default y ---help--- Say N to disable power /sys interface config ACPI_PROC_EVENT config ACPI_PROC_EVENT bool "Deprecated /proc/acpi/event support" bool "Deprecated /proc/acpi/event support" depends on PROC_FS depends on PROC_FS Loading @@ -103,7 +109,6 @@ config ACPI_PROC_EVENT config ACPI_AC config ACPI_AC tristate "AC Adapter" tristate "AC Adapter" depends on X86 depends on X86 select POWER_SUPPLY default y default y help help This driver adds support for the AC Adapter object, which indicates This driver adds support for the AC Adapter object, which indicates Loading @@ -113,7 +118,6 @@ config ACPI_AC config ACPI_BATTERY config ACPI_BATTERY tristate "Battery" tristate "Battery" depends on X86 depends on X86 select POWER_SUPPLY default y default y help help This driver adds support for battery information through This driver adds support for battery information through Loading Loading @@ -368,7 +372,6 @@ config ACPI_HOTPLUG_MEMORY config ACPI_SBS config ACPI_SBS tristate "Smart Battery System" tristate "Smart Battery System" depends on X86 depends on X86 select POWER_SUPPLY help help This driver adds support for the Smart Battery System, another This driver adds support for the Smart Battery System, another type of access to battery information, found on some laptops. type of access to battery information, found on some laptops. Loading drivers/acpi/ac.c +14 −2 Original line number Original line Diff line number Diff line Loading @@ -31,7 +31,9 @@ #include <linux/proc_fs.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <linux/seq_file.h> #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER #include <linux/power_supply.h> #include <linux/power_supply.h> #endif #include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h> #include <acpi/acpi_drivers.h> #include <acpi/acpi_drivers.h> Loading Loading @@ -79,7 +81,9 @@ static struct acpi_driver acpi_ac_driver = { }; }; struct acpi_ac { struct acpi_ac { #ifdef CONFIG_ACPI_SYSFS_POWER struct power_supply charger; struct power_supply charger; #endif struct acpi_device * device; struct acpi_device * device; unsigned long state; unsigned long state; }; }; Loading @@ -94,7 +98,7 @@ static const struct file_operations acpi_ac_fops = { .release = single_release, .release = single_release, }; }; #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER static int get_ac_property(struct power_supply *psy, static int get_ac_property(struct power_supply *psy, enum power_supply_property psp, enum power_supply_property psp, union power_supply_propval *val) union power_supply_propval *val) Loading @@ -113,7 +117,7 @@ static int get_ac_property(struct power_supply *psy, static enum power_supply_property ac_props[] = { static enum power_supply_property ac_props[] = { POWER_SUPPLY_PROP_ONLINE, POWER_SUPPLY_PROP_ONLINE, }; }; #endif /* -------------------------------------------------------------------------- /* -------------------------------------------------------------------------- AC Adapter Management AC Adapter Management -------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */ Loading Loading @@ -241,7 +245,9 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data) acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class, device->dev.bus_id, event, device->dev.bus_id, event, (u32) ac->state); (u32) ac->state); #ifdef CONFIG_ACPI_SYSFS_POWER kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); #endif break; break; default: default: ACPI_DEBUG_PRINT((ACPI_DB_INFO, ACPI_DEBUG_PRINT((ACPI_DB_INFO, Loading Loading @@ -280,12 +286,14 @@ static int acpi_ac_add(struct acpi_device *device) #endif #endif if (result) if (result) goto end; goto end; #ifdef CONFIG_ACPI_SYSFS_POWER ac->charger.name = acpi_device_bid(device); ac->charger.name = acpi_device_bid(device); ac->charger.type = POWER_SUPPLY_TYPE_MAINS; ac->charger.type = POWER_SUPPLY_TYPE_MAINS; ac->charger.properties = ac_props; ac->charger.properties = ac_props; ac->charger.num_properties = ARRAY_SIZE(ac_props); ac->charger.num_properties = ARRAY_SIZE(ac_props); ac->charger.get_property = get_ac_property; ac->charger.get_property = get_ac_property; power_supply_register(&ac->device->dev, &ac->charger); power_supply_register(&ac->device->dev, &ac->charger); #endif status = acpi_install_notify_handler(device->handle, status = acpi_install_notify_handler(device->handle, ACPI_ALL_NOTIFY, acpi_ac_notify, ACPI_ALL_NOTIFY, acpi_ac_notify, ac); ac); Loading Loading @@ -319,8 +327,10 @@ static int acpi_ac_resume(struct acpi_device *device) old_state = ac->state; old_state = ac->state; if (acpi_ac_get_state(ac)) if (acpi_ac_get_state(ac)) return 0; return 0; #ifdef CONFIG_ACPI_SYSFS_POWER if (old_state != ac->state) if (old_state != ac->state) kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); #endif return 0; return 0; } } Loading @@ -337,8 +347,10 @@ static int acpi_ac_remove(struct acpi_device *device, int type) status = acpi_remove_notify_handler(device->handle, status = acpi_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY, acpi_ac_notify); ACPI_ALL_NOTIFY, acpi_ac_notify); #ifdef CONFIG_ACPI_SYSFS_POWER if (ac->charger.dev) if (ac->charger.dev) power_supply_unregister(&ac->charger); power_supply_unregister(&ac->charger); #endif #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER acpi_ac_remove_fs(device); acpi_ac_remove_fs(device); #endif #endif Loading drivers/acpi/battery.c +25 −6 Original line number Original line Diff line number Diff line Loading @@ -40,7 +40,9 @@ #include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h> #include <acpi/acpi_drivers.h> #include <acpi/acpi_drivers.h> #ifdef CONFIG_ACPI_SYSFS_POWER #include <linux/power_supply.h> #include <linux/power_supply.h> #endif #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF Loading Loading @@ -86,7 +88,9 @@ MODULE_DEVICE_TABLE(acpi, battery_device_ids); struct acpi_battery { struct acpi_battery { struct mutex lock; struct mutex lock; #ifdef CONFIG_ACPI_SYSFS_POWER struct power_supply bat; struct power_supply bat; #endif struct acpi_device *device; struct acpi_device *device; unsigned long update_time; unsigned long update_time; int current_now; int current_now; Loading Loading @@ -117,6 +121,7 @@ inline int acpi_battery_present(struct acpi_battery *battery) return battery->device->status.battery_present; return battery->device->status.battery_present; } } #ifdef CONFIG_ACPI_SYSFS_POWER static int acpi_battery_technology(struct acpi_battery *battery) static int acpi_battery_technology(struct acpi_battery *battery) { { if (!strcasecmp("NiCd", battery->type)) if (!strcasecmp("NiCd", battery->type)) Loading Loading @@ -222,6 +227,7 @@ static enum power_supply_property energy_battery_props[] = { POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MANUFACTURER, POWER_SUPPLY_PROP_MANUFACTURER, }; }; #endif #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER inline char *acpi_battery_units(struct acpi_battery *battery) inline char *acpi_battery_units(struct acpi_battery *battery) Loading Loading @@ -398,6 +404,7 @@ static int acpi_battery_init_alarm(struct acpi_battery *battery) return acpi_battery_set_alarm(battery); return acpi_battery_set_alarm(battery); } } #ifdef CONFIG_ACPI_SYSFS_POWER static ssize_t acpi_battery_alarm_show(struct device *dev, static ssize_t acpi_battery_alarm_show(struct device *dev, struct device_attribute *attr, struct device_attribute *attr, char *buf) char *buf) Loading Loading @@ -429,11 +436,6 @@ static int sysfs_add_battery(struct acpi_battery *battery) { { int result; int result; battery->update_time = 0; result = acpi_battery_get_info(battery); acpi_battery_init_alarm(battery); if (result) return result; if (battery->power_unit) { if (battery->power_unit) { battery->bat.properties = charge_battery_props; battery->bat.properties = charge_battery_props; battery->bat.num_properties = battery->bat.num_properties = Loading Loading @@ -462,18 +464,31 @@ static void sysfs_remove_battery(struct acpi_battery *battery) power_supply_unregister(&battery->bat); power_supply_unregister(&battery->bat); battery->bat.dev = NULL; battery->bat.dev = NULL; } } #endif static int acpi_battery_update(struct acpi_battery *battery) static int acpi_battery_update(struct acpi_battery *battery) { { int result = acpi_battery_get_status(battery); int result; result = acpi_battery_get_status(battery); if (result) if (result) return result; return result; #ifdef CONFIG_ACPI_SYSFS_POWER if (!acpi_battery_present(battery)) { if (!acpi_battery_present(battery)) { sysfs_remove_battery(battery); sysfs_remove_battery(battery); battery->update_time = 0; return 0; return 0; } } #endif if (!battery->update_time) { result = acpi_battery_get_info(battery); if (result) return result; acpi_battery_init_alarm(battery); } #ifdef CONFIG_ACPI_SYSFS_POWER if (!battery->bat.dev) if (!battery->bat.dev) sysfs_add_battery(battery); sysfs_add_battery(battery); #endif return acpi_battery_get_state(battery); return acpi_battery_get_state(battery); } } Loading Loading @@ -767,9 +782,11 @@ static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class, device->dev.bus_id, event, device->dev.bus_id, event, acpi_battery_present(battery)); acpi_battery_present(battery)); #ifdef CONFIG_ACPI_SYSFS_POWER /* acpi_batter_update could remove power_supply object */ /* acpi_batter_update could remove power_supply object */ if (battery->bat.dev) if (battery->bat.dev) kobject_uevent(&battery->bat.dev->kobj, KOBJ_CHANGE); kobject_uevent(&battery->bat.dev->kobj, KOBJ_CHANGE); #endif } } static int acpi_battery_add(struct acpi_device *device) static int acpi_battery_add(struct acpi_device *device) Loading Loading @@ -828,7 +845,9 @@ static int acpi_battery_remove(struct acpi_device *device, int type) #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER acpi_battery_remove_fs(device); acpi_battery_remove_fs(device); #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER sysfs_remove_battery(battery); sysfs_remove_battery(battery); #endif mutex_destroy(&battery->lock); mutex_destroy(&battery->lock); kfree(battery); kfree(battery); return 0; return 0; Loading drivers/acpi/sbs.c +22 −1 Original line number Original line Diff line number Diff line Loading @@ -40,7 +40,9 @@ #include <linux/jiffies.h> #include <linux/jiffies.h> #include <linux/delay.h> #include <linux/delay.h> #ifdef CONFIG_ACPI_SYSFS_POWER #include <linux/power_supply.h> #include <linux/power_supply.h> #endif #include "sbshc.h" #include "sbshc.h" Loading Loading @@ -80,7 +82,9 @@ static const struct acpi_device_id sbs_device_ids[] = { MODULE_DEVICE_TABLE(acpi, sbs_device_ids); MODULE_DEVICE_TABLE(acpi, sbs_device_ids); struct acpi_battery { struct acpi_battery { #ifdef CONFIG_ACPI_SYSFS_POWER struct power_supply bat; struct power_supply bat; #endif struct acpi_sbs *sbs; struct acpi_sbs *sbs; #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER struct proc_dir_entry *proc_entry; struct proc_dir_entry *proc_entry; Loading Loading @@ -113,7 +117,9 @@ struct acpi_battery { #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat); #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat); struct acpi_sbs { struct acpi_sbs { #ifdef CONFIG_ACPI_SYSFS_POWER struct power_supply charger; struct power_supply charger; #endif struct acpi_device *device; struct acpi_device *device; struct acpi_smb_hc *hc; struct acpi_smb_hc *hc; struct mutex lock; struct mutex lock; Loading Loading @@ -157,6 +163,7 @@ static inline int acpi_battery_scale(struct acpi_battery *battery) acpi_battery_ipscale(battery); acpi_battery_ipscale(battery); } } #ifdef CONFIG_ACPI_SYSFS_POWER static int sbs_get_ac_property(struct power_supply *psy, static int sbs_get_ac_property(struct power_supply *psy, enum power_supply_property psp, enum power_supply_property psp, union power_supply_propval *val) union power_supply_propval *val) Loading Loading @@ -294,6 +301,7 @@ static enum power_supply_property sbs_energy_battery_props[] = { POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MANUFACTURER, POWER_SUPPLY_PROP_MANUFACTURER, }; }; #endif /* -------------------------------------------------------------------------- /* -------------------------------------------------------------------------- Smart Battery System Management Smart Battery System Management Loading Loading @@ -429,6 +437,7 @@ static int acpi_ac_get_present(struct acpi_sbs *sbs) return result; return result; } } #ifdef CONFIG_ACPI_SYSFS_POWER static ssize_t acpi_battery_alarm_show(struct device *dev, static ssize_t acpi_battery_alarm_show(struct device *dev, struct device_attribute *attr, struct device_attribute *attr, char *buf) char *buf) Loading Loading @@ -458,6 +467,7 @@ static struct device_attribute alarm_attr = { .show = acpi_battery_alarm_show, .show = acpi_battery_alarm_show, .store = acpi_battery_alarm_store, .store = acpi_battery_alarm_store, }; }; #endif /* -------------------------------------------------------------------------- /* -------------------------------------------------------------------------- FS Interface (/proc/acpi) FS Interface (/proc/acpi) Loading Loading @@ -793,6 +803,7 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id) &acpi_battery_state_fops, &acpi_battery_alarm_fops, &acpi_battery_state_fops, &acpi_battery_alarm_fops, battery); battery); #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER battery->bat.name = battery->name; battery->bat.name = battery->name; battery->bat.type = POWER_SUPPLY_TYPE_BATTERY; battery->bat.type = POWER_SUPPLY_TYPE_BATTERY; if (!acpi_battery_mode(battery)) { if (!acpi_battery_mode(battery)) { Loading @@ -813,6 +824,7 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id) goto end; goto end; battery->have_sysfs_alarm = 1; battery->have_sysfs_alarm = 1; end: end: #endif 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"); Loading @@ -822,12 +834,13 @@ 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) { { struct acpi_battery *battery = &sbs->battery[id]; struct acpi_battery *battery = &sbs->battery[id]; #ifdef CONFIG_ACPI_SYSFS_POWER if (battery->bat.dev) { if (battery->bat.dev) { if (battery->have_sysfs_alarm) if (battery->have_sysfs_alarm) device_remove_file(battery->bat.dev, &alarm_attr); device_remove_file(battery->bat.dev, &alarm_attr); power_supply_unregister(&battery->bat); power_supply_unregister(&battery->bat); } } #endif #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER if (battery->proc_entry) if (battery->proc_entry) acpi_sbs_remove_fs(&battery->proc_entry, acpi_battery_dir); acpi_sbs_remove_fs(&battery->proc_entry, acpi_battery_dir); Loading @@ -848,12 +861,14 @@ static int acpi_charger_add(struct acpi_sbs *sbs) if (result) if (result) goto end; goto end; #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER sbs->charger.name = "sbs-charger"; sbs->charger.name = "sbs-charger"; sbs->charger.type = POWER_SUPPLY_TYPE_MAINS; sbs->charger.type = POWER_SUPPLY_TYPE_MAINS; sbs->charger.properties = sbs_ac_props; sbs->charger.properties = sbs_ac_props; sbs->charger.num_properties = ARRAY_SIZE(sbs_ac_props); sbs->charger.num_properties = ARRAY_SIZE(sbs_ac_props); sbs->charger.get_property = sbs_get_ac_property; sbs->charger.get_property = sbs_get_ac_property; power_supply_register(&sbs->device->dev, &sbs->charger); power_supply_register(&sbs->device->dev, &sbs->charger); #endif printk(KERN_INFO PREFIX "%s [%s]: AC Adapter [%s] (%s)\n", printk(KERN_INFO PREFIX "%s [%s]: AC Adapter [%s] (%s)\n", ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), ACPI_AC_DIR_NAME, sbs->charger_present ? "on-line" : "off-line"); ACPI_AC_DIR_NAME, sbs->charger_present ? "on-line" : "off-line"); Loading @@ -863,8 +878,10 @@ static int acpi_charger_add(struct acpi_sbs *sbs) static void acpi_charger_remove(struct acpi_sbs *sbs) static void acpi_charger_remove(struct acpi_sbs *sbs) { { #ifdef CONFIG_ACPI_SYSFS_POWER if (sbs->charger.dev) if (sbs->charger.dev) power_supply_unregister(&sbs->charger); power_supply_unregister(&sbs->charger); #endif #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER if (sbs->charger_entry) if (sbs->charger_entry) acpi_sbs_remove_fs(&sbs->charger_entry, acpi_ac_dir); acpi_sbs_remove_fs(&sbs->charger_entry, acpi_ac_dir); Loading @@ -885,7 +902,9 @@ void acpi_sbs_callback(void *context) ACPI_SBS_NOTIFY_STATUS, ACPI_SBS_NOTIFY_STATUS, sbs->charger_present); sbs->charger_present); #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER kobject_uevent(&sbs->charger.dev->kobj, KOBJ_CHANGE); kobject_uevent(&sbs->charger.dev->kobj, KOBJ_CHANGE); #endif } } if (sbs->manager_present) { if (sbs->manager_present) { for (id = 0; id < MAX_SBS_BAT; ++id) { for (id = 0; id < MAX_SBS_BAT; ++id) { Loading @@ -902,7 +921,9 @@ void acpi_sbs_callback(void *context) ACPI_SBS_NOTIFY_STATUS, ACPI_SBS_NOTIFY_STATUS, bat->present); bat->present); #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER kobject_uevent(&bat->bat.dev->kobj, KOBJ_CHANGE); kobject_uevent(&bat->bat.dev->kobj, KOBJ_CHANGE); #endif } } } } } } Loading Loading
drivers/acpi/Kconfig +6 −3 Original line number Original line Diff line number Diff line Loading @@ -82,6 +82,12 @@ config ACPI_PROCFS_POWER and functions, which do not yet exist in /sys and functions, which do not yet exist in /sys Say N to delete power /proc/acpi/ folders that have moved to /sys/ Say N to delete power /proc/acpi/ folders that have moved to /sys/ config ACPI_SYSFS_POWER bool "Future power /sys interface" select POWER_SUPPLY default y ---help--- Say N to disable power /sys interface config ACPI_PROC_EVENT config ACPI_PROC_EVENT bool "Deprecated /proc/acpi/event support" bool "Deprecated /proc/acpi/event support" depends on PROC_FS depends on PROC_FS Loading @@ -103,7 +109,6 @@ config ACPI_PROC_EVENT config ACPI_AC config ACPI_AC tristate "AC Adapter" tristate "AC Adapter" depends on X86 depends on X86 select POWER_SUPPLY default y default y help help This driver adds support for the AC Adapter object, which indicates This driver adds support for the AC Adapter object, which indicates Loading @@ -113,7 +118,6 @@ config ACPI_AC config ACPI_BATTERY config ACPI_BATTERY tristate "Battery" tristate "Battery" depends on X86 depends on X86 select POWER_SUPPLY default y default y help help This driver adds support for battery information through This driver adds support for battery information through Loading Loading @@ -368,7 +372,6 @@ config ACPI_HOTPLUG_MEMORY config ACPI_SBS config ACPI_SBS tristate "Smart Battery System" tristate "Smart Battery System" depends on X86 depends on X86 select POWER_SUPPLY help help This driver adds support for the Smart Battery System, another This driver adds support for the Smart Battery System, another type of access to battery information, found on some laptops. type of access to battery information, found on some laptops. Loading
drivers/acpi/ac.c +14 −2 Original line number Original line Diff line number Diff line Loading @@ -31,7 +31,9 @@ #include <linux/proc_fs.h> #include <linux/proc_fs.h> #include <linux/seq_file.h> #include <linux/seq_file.h> #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER #include <linux/power_supply.h> #include <linux/power_supply.h> #endif #include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h> #include <acpi/acpi_drivers.h> #include <acpi/acpi_drivers.h> Loading Loading @@ -79,7 +81,9 @@ static struct acpi_driver acpi_ac_driver = { }; }; struct acpi_ac { struct acpi_ac { #ifdef CONFIG_ACPI_SYSFS_POWER struct power_supply charger; struct power_supply charger; #endif struct acpi_device * device; struct acpi_device * device; unsigned long state; unsigned long state; }; }; Loading @@ -94,7 +98,7 @@ static const struct file_operations acpi_ac_fops = { .release = single_release, .release = single_release, }; }; #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER static int get_ac_property(struct power_supply *psy, static int get_ac_property(struct power_supply *psy, enum power_supply_property psp, enum power_supply_property psp, union power_supply_propval *val) union power_supply_propval *val) Loading @@ -113,7 +117,7 @@ static int get_ac_property(struct power_supply *psy, static enum power_supply_property ac_props[] = { static enum power_supply_property ac_props[] = { POWER_SUPPLY_PROP_ONLINE, POWER_SUPPLY_PROP_ONLINE, }; }; #endif /* -------------------------------------------------------------------------- /* -------------------------------------------------------------------------- AC Adapter Management AC Adapter Management -------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */ Loading Loading @@ -241,7 +245,9 @@ static void acpi_ac_notify(acpi_handle handle, u32 event, void *data) acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class, device->dev.bus_id, event, device->dev.bus_id, event, (u32) ac->state); (u32) ac->state); #ifdef CONFIG_ACPI_SYSFS_POWER kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); #endif break; break; default: default: ACPI_DEBUG_PRINT((ACPI_DB_INFO, ACPI_DEBUG_PRINT((ACPI_DB_INFO, Loading Loading @@ -280,12 +286,14 @@ static int acpi_ac_add(struct acpi_device *device) #endif #endif if (result) if (result) goto end; goto end; #ifdef CONFIG_ACPI_SYSFS_POWER ac->charger.name = acpi_device_bid(device); ac->charger.name = acpi_device_bid(device); ac->charger.type = POWER_SUPPLY_TYPE_MAINS; ac->charger.type = POWER_SUPPLY_TYPE_MAINS; ac->charger.properties = ac_props; ac->charger.properties = ac_props; ac->charger.num_properties = ARRAY_SIZE(ac_props); ac->charger.num_properties = ARRAY_SIZE(ac_props); ac->charger.get_property = get_ac_property; ac->charger.get_property = get_ac_property; power_supply_register(&ac->device->dev, &ac->charger); power_supply_register(&ac->device->dev, &ac->charger); #endif status = acpi_install_notify_handler(device->handle, status = acpi_install_notify_handler(device->handle, ACPI_ALL_NOTIFY, acpi_ac_notify, ACPI_ALL_NOTIFY, acpi_ac_notify, ac); ac); Loading Loading @@ -319,8 +327,10 @@ static int acpi_ac_resume(struct acpi_device *device) old_state = ac->state; old_state = ac->state; if (acpi_ac_get_state(ac)) if (acpi_ac_get_state(ac)) return 0; return 0; #ifdef CONFIG_ACPI_SYSFS_POWER if (old_state != ac->state) if (old_state != ac->state) kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE); #endif return 0; return 0; } } Loading @@ -337,8 +347,10 @@ static int acpi_ac_remove(struct acpi_device *device, int type) status = acpi_remove_notify_handler(device->handle, status = acpi_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY, acpi_ac_notify); ACPI_ALL_NOTIFY, acpi_ac_notify); #ifdef CONFIG_ACPI_SYSFS_POWER if (ac->charger.dev) if (ac->charger.dev) power_supply_unregister(&ac->charger); power_supply_unregister(&ac->charger); #endif #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER acpi_ac_remove_fs(device); acpi_ac_remove_fs(device); #endif #endif Loading
drivers/acpi/battery.c +25 −6 Original line number Original line Diff line number Diff line Loading @@ -40,7 +40,9 @@ #include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h> #include <acpi/acpi_drivers.h> #include <acpi/acpi_drivers.h> #ifdef CONFIG_ACPI_SYSFS_POWER #include <linux/power_supply.h> #include <linux/power_supply.h> #endif #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF Loading Loading @@ -86,7 +88,9 @@ MODULE_DEVICE_TABLE(acpi, battery_device_ids); struct acpi_battery { struct acpi_battery { struct mutex lock; struct mutex lock; #ifdef CONFIG_ACPI_SYSFS_POWER struct power_supply bat; struct power_supply bat; #endif struct acpi_device *device; struct acpi_device *device; unsigned long update_time; unsigned long update_time; int current_now; int current_now; Loading Loading @@ -117,6 +121,7 @@ inline int acpi_battery_present(struct acpi_battery *battery) return battery->device->status.battery_present; return battery->device->status.battery_present; } } #ifdef CONFIG_ACPI_SYSFS_POWER static int acpi_battery_technology(struct acpi_battery *battery) static int acpi_battery_technology(struct acpi_battery *battery) { { if (!strcasecmp("NiCd", battery->type)) if (!strcasecmp("NiCd", battery->type)) Loading Loading @@ -222,6 +227,7 @@ static enum power_supply_property energy_battery_props[] = { POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MANUFACTURER, POWER_SUPPLY_PROP_MANUFACTURER, }; }; #endif #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER inline char *acpi_battery_units(struct acpi_battery *battery) inline char *acpi_battery_units(struct acpi_battery *battery) Loading Loading @@ -398,6 +404,7 @@ static int acpi_battery_init_alarm(struct acpi_battery *battery) return acpi_battery_set_alarm(battery); return acpi_battery_set_alarm(battery); } } #ifdef CONFIG_ACPI_SYSFS_POWER static ssize_t acpi_battery_alarm_show(struct device *dev, static ssize_t acpi_battery_alarm_show(struct device *dev, struct device_attribute *attr, struct device_attribute *attr, char *buf) char *buf) Loading Loading @@ -429,11 +436,6 @@ static int sysfs_add_battery(struct acpi_battery *battery) { { int result; int result; battery->update_time = 0; result = acpi_battery_get_info(battery); acpi_battery_init_alarm(battery); if (result) return result; if (battery->power_unit) { if (battery->power_unit) { battery->bat.properties = charge_battery_props; battery->bat.properties = charge_battery_props; battery->bat.num_properties = battery->bat.num_properties = Loading Loading @@ -462,18 +464,31 @@ static void sysfs_remove_battery(struct acpi_battery *battery) power_supply_unregister(&battery->bat); power_supply_unregister(&battery->bat); battery->bat.dev = NULL; battery->bat.dev = NULL; } } #endif static int acpi_battery_update(struct acpi_battery *battery) static int acpi_battery_update(struct acpi_battery *battery) { { int result = acpi_battery_get_status(battery); int result; result = acpi_battery_get_status(battery); if (result) if (result) return result; return result; #ifdef CONFIG_ACPI_SYSFS_POWER if (!acpi_battery_present(battery)) { if (!acpi_battery_present(battery)) { sysfs_remove_battery(battery); sysfs_remove_battery(battery); battery->update_time = 0; return 0; return 0; } } #endif if (!battery->update_time) { result = acpi_battery_get_info(battery); if (result) return result; acpi_battery_init_alarm(battery); } #ifdef CONFIG_ACPI_SYSFS_POWER if (!battery->bat.dev) if (!battery->bat.dev) sysfs_add_battery(battery); sysfs_add_battery(battery); #endif return acpi_battery_get_state(battery); return acpi_battery_get_state(battery); } } Loading Loading @@ -767,9 +782,11 @@ static void acpi_battery_notify(acpi_handle handle, u32 event, void *data) acpi_bus_generate_netlink_event(device->pnp.device_class, acpi_bus_generate_netlink_event(device->pnp.device_class, device->dev.bus_id, event, device->dev.bus_id, event, acpi_battery_present(battery)); acpi_battery_present(battery)); #ifdef CONFIG_ACPI_SYSFS_POWER /* acpi_batter_update could remove power_supply object */ /* acpi_batter_update could remove power_supply object */ if (battery->bat.dev) if (battery->bat.dev) kobject_uevent(&battery->bat.dev->kobj, KOBJ_CHANGE); kobject_uevent(&battery->bat.dev->kobj, KOBJ_CHANGE); #endif } } static int acpi_battery_add(struct acpi_device *device) static int acpi_battery_add(struct acpi_device *device) Loading Loading @@ -828,7 +845,9 @@ static int acpi_battery_remove(struct acpi_device *device, int type) #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER acpi_battery_remove_fs(device); acpi_battery_remove_fs(device); #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER sysfs_remove_battery(battery); sysfs_remove_battery(battery); #endif mutex_destroy(&battery->lock); mutex_destroy(&battery->lock); kfree(battery); kfree(battery); return 0; return 0; Loading
drivers/acpi/sbs.c +22 −1 Original line number Original line Diff line number Diff line Loading @@ -40,7 +40,9 @@ #include <linux/jiffies.h> #include <linux/jiffies.h> #include <linux/delay.h> #include <linux/delay.h> #ifdef CONFIG_ACPI_SYSFS_POWER #include <linux/power_supply.h> #include <linux/power_supply.h> #endif #include "sbshc.h" #include "sbshc.h" Loading Loading @@ -80,7 +82,9 @@ static const struct acpi_device_id sbs_device_ids[] = { MODULE_DEVICE_TABLE(acpi, sbs_device_ids); MODULE_DEVICE_TABLE(acpi, sbs_device_ids); struct acpi_battery { struct acpi_battery { #ifdef CONFIG_ACPI_SYSFS_POWER struct power_supply bat; struct power_supply bat; #endif struct acpi_sbs *sbs; struct acpi_sbs *sbs; #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER struct proc_dir_entry *proc_entry; struct proc_dir_entry *proc_entry; Loading Loading @@ -113,7 +117,9 @@ struct acpi_battery { #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat); #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat); struct acpi_sbs { struct acpi_sbs { #ifdef CONFIG_ACPI_SYSFS_POWER struct power_supply charger; struct power_supply charger; #endif struct acpi_device *device; struct acpi_device *device; struct acpi_smb_hc *hc; struct acpi_smb_hc *hc; struct mutex lock; struct mutex lock; Loading Loading @@ -157,6 +163,7 @@ static inline int acpi_battery_scale(struct acpi_battery *battery) acpi_battery_ipscale(battery); acpi_battery_ipscale(battery); } } #ifdef CONFIG_ACPI_SYSFS_POWER static int sbs_get_ac_property(struct power_supply *psy, static int sbs_get_ac_property(struct power_supply *psy, enum power_supply_property psp, enum power_supply_property psp, union power_supply_propval *val) union power_supply_propval *val) Loading Loading @@ -294,6 +301,7 @@ static enum power_supply_property sbs_energy_battery_props[] = { POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MANUFACTURER, POWER_SUPPLY_PROP_MANUFACTURER, }; }; #endif /* -------------------------------------------------------------------------- /* -------------------------------------------------------------------------- Smart Battery System Management Smart Battery System Management Loading Loading @@ -429,6 +437,7 @@ static int acpi_ac_get_present(struct acpi_sbs *sbs) return result; return result; } } #ifdef CONFIG_ACPI_SYSFS_POWER static ssize_t acpi_battery_alarm_show(struct device *dev, static ssize_t acpi_battery_alarm_show(struct device *dev, struct device_attribute *attr, struct device_attribute *attr, char *buf) char *buf) Loading Loading @@ -458,6 +467,7 @@ static struct device_attribute alarm_attr = { .show = acpi_battery_alarm_show, .show = acpi_battery_alarm_show, .store = acpi_battery_alarm_store, .store = acpi_battery_alarm_store, }; }; #endif /* -------------------------------------------------------------------------- /* -------------------------------------------------------------------------- FS Interface (/proc/acpi) FS Interface (/proc/acpi) Loading Loading @@ -793,6 +803,7 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id) &acpi_battery_state_fops, &acpi_battery_alarm_fops, &acpi_battery_state_fops, &acpi_battery_alarm_fops, battery); battery); #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER battery->bat.name = battery->name; battery->bat.name = battery->name; battery->bat.type = POWER_SUPPLY_TYPE_BATTERY; battery->bat.type = POWER_SUPPLY_TYPE_BATTERY; if (!acpi_battery_mode(battery)) { if (!acpi_battery_mode(battery)) { Loading @@ -813,6 +824,7 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id) goto end; goto end; battery->have_sysfs_alarm = 1; battery->have_sysfs_alarm = 1; end: end: #endif 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"); Loading @@ -822,12 +834,13 @@ 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) { { struct acpi_battery *battery = &sbs->battery[id]; struct acpi_battery *battery = &sbs->battery[id]; #ifdef CONFIG_ACPI_SYSFS_POWER if (battery->bat.dev) { if (battery->bat.dev) { if (battery->have_sysfs_alarm) if (battery->have_sysfs_alarm) device_remove_file(battery->bat.dev, &alarm_attr); device_remove_file(battery->bat.dev, &alarm_attr); power_supply_unregister(&battery->bat); power_supply_unregister(&battery->bat); } } #endif #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER if (battery->proc_entry) if (battery->proc_entry) acpi_sbs_remove_fs(&battery->proc_entry, acpi_battery_dir); acpi_sbs_remove_fs(&battery->proc_entry, acpi_battery_dir); Loading @@ -848,12 +861,14 @@ static int acpi_charger_add(struct acpi_sbs *sbs) if (result) if (result) goto end; goto end; #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER sbs->charger.name = "sbs-charger"; sbs->charger.name = "sbs-charger"; sbs->charger.type = POWER_SUPPLY_TYPE_MAINS; sbs->charger.type = POWER_SUPPLY_TYPE_MAINS; sbs->charger.properties = sbs_ac_props; sbs->charger.properties = sbs_ac_props; sbs->charger.num_properties = ARRAY_SIZE(sbs_ac_props); sbs->charger.num_properties = ARRAY_SIZE(sbs_ac_props); sbs->charger.get_property = sbs_get_ac_property; sbs->charger.get_property = sbs_get_ac_property; power_supply_register(&sbs->device->dev, &sbs->charger); power_supply_register(&sbs->device->dev, &sbs->charger); #endif printk(KERN_INFO PREFIX "%s [%s]: AC Adapter [%s] (%s)\n", printk(KERN_INFO PREFIX "%s [%s]: AC Adapter [%s] (%s)\n", ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), ACPI_AC_DIR_NAME, sbs->charger_present ? "on-line" : "off-line"); ACPI_AC_DIR_NAME, sbs->charger_present ? "on-line" : "off-line"); Loading @@ -863,8 +878,10 @@ static int acpi_charger_add(struct acpi_sbs *sbs) static void acpi_charger_remove(struct acpi_sbs *sbs) static void acpi_charger_remove(struct acpi_sbs *sbs) { { #ifdef CONFIG_ACPI_SYSFS_POWER if (sbs->charger.dev) if (sbs->charger.dev) power_supply_unregister(&sbs->charger); power_supply_unregister(&sbs->charger); #endif #ifdef CONFIG_ACPI_PROCFS_POWER #ifdef CONFIG_ACPI_PROCFS_POWER if (sbs->charger_entry) if (sbs->charger_entry) acpi_sbs_remove_fs(&sbs->charger_entry, acpi_ac_dir); acpi_sbs_remove_fs(&sbs->charger_entry, acpi_ac_dir); Loading @@ -885,7 +902,9 @@ void acpi_sbs_callback(void *context) ACPI_SBS_NOTIFY_STATUS, ACPI_SBS_NOTIFY_STATUS, sbs->charger_present); sbs->charger_present); #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER kobject_uevent(&sbs->charger.dev->kobj, KOBJ_CHANGE); kobject_uevent(&sbs->charger.dev->kobj, KOBJ_CHANGE); #endif } } if (sbs->manager_present) { if (sbs->manager_present) { for (id = 0; id < MAX_SBS_BAT; ++id) { for (id = 0; id < MAX_SBS_BAT; ++id) { Loading @@ -902,7 +921,9 @@ void acpi_sbs_callback(void *context) ACPI_SBS_NOTIFY_STATUS, ACPI_SBS_NOTIFY_STATUS, bat->present); bat->present); #endif #endif #ifdef CONFIG_ACPI_SYSFS_POWER kobject_uevent(&bat->bat.dev->kobj, KOBJ_CHANGE); kobject_uevent(&bat->bat.dev->kobj, KOBJ_CHANGE); #endif } } } } } } Loading