diff options
Diffstat (limited to 'drivers/acpi/battery.c')
| -rw-r--r-- | drivers/acpi/battery.c | 48 | 
1 files changed, 25 insertions, 23 deletions
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 63d43677f644..b3628cc01a53 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c @@ -70,6 +70,7 @@ MODULE_AUTHOR("Alexey Starikovskiy <[email protected]>");  MODULE_DESCRIPTION("ACPI Battery Driver");  MODULE_LICENSE("GPL"); +static async_cookie_t async_cookie;  static int battery_bix_broken_package;  static int battery_notification_delay_ms;  static unsigned int cache_time = 1000; @@ -338,14 +339,6 @@ static enum power_supply_property energy_battery_props[] = {  	POWER_SUPPLY_PROP_SERIAL_NUMBER,  }; -#ifdef CONFIG_ACPI_PROCFS_POWER -inline char *acpi_battery_units(struct acpi_battery *battery) -{ -	return (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) ? -		"mA" : "mW"; -} -#endif -  /* --------------------------------------------------------------------------                                 Battery Management     -------------------------------------------------------------------------- */ @@ -354,14 +347,14 @@ struct acpi_offsets {  	u8 mode;		/* int or string? */  }; -static struct acpi_offsets state_offsets[] = { +static const struct acpi_offsets state_offsets[] = {  	{offsetof(struct acpi_battery, state), 0},  	{offsetof(struct acpi_battery, rate_now), 0},  	{offsetof(struct acpi_battery, capacity_now), 0},  	{offsetof(struct acpi_battery, voltage_now), 0},  }; -static struct acpi_offsets info_offsets[] = { +static const struct acpi_offsets info_offsets[] = {  	{offsetof(struct acpi_battery, power_unit), 0},  	{offsetof(struct acpi_battery, design_capacity), 0},  	{offsetof(struct acpi_battery, full_charge_capacity), 0}, @@ -377,7 +370,7 @@ static struct acpi_offsets info_offsets[] = {  	{offsetof(struct acpi_battery, oem_info), 1},  }; -static struct acpi_offsets extended_info_offsets[] = { +static const struct acpi_offsets extended_info_offsets[] = {  	{offsetof(struct acpi_battery, revision), 0},  	{offsetof(struct acpi_battery, power_unit), 0},  	{offsetof(struct acpi_battery, design_capacity), 0}, @@ -402,7 +395,7 @@ static struct acpi_offsets extended_info_offsets[] = {  static int extract_package(struct acpi_battery *battery,  			   union acpi_object *package, -			   struct acpi_offsets *offsets, int num) +			   const struct acpi_offsets *offsets, int num)  {  	int i;  	union acpi_object *element; @@ -792,6 +785,12 @@ static void acpi_battery_refresh(struct acpi_battery *battery)  #ifdef CONFIG_ACPI_PROCFS_POWER  static struct proc_dir_entry *acpi_battery_dir; +static const char *acpi_battery_units(const struct acpi_battery *battery) +{ +	return (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) ? +		"mA" : "mW"; +} +  static int acpi_battery_print_info(struct seq_file *seq, int result)  {  	struct acpi_battery *battery = seq->private; @@ -1125,19 +1124,21 @@ static int battery_notify(struct notifier_block *nb,  	return 0;  } -static int battery_bix_broken_package_quirk(const struct dmi_system_id *d) +static int __init +battery_bix_broken_package_quirk(const struct dmi_system_id *d)  {  	battery_bix_broken_package = 1;  	return 0;  } -static int battery_notification_delay_quirk(const struct dmi_system_id *d) +static int __init +battery_notification_delay_quirk(const struct dmi_system_id *d)  {  	battery_notification_delay_ms = 1000;  	return 0;  } -static struct dmi_system_id bat_dmi_table[] = { +static const struct dmi_system_id bat_dmi_table[] __initconst = {  	{  		.callback = battery_bix_broken_package_quirk,  		.ident = "NEC LZ750/LS", @@ -1292,33 +1293,34 @@ static struct acpi_driver acpi_battery_driver = {  static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie)  { -	if (acpi_disabled) -		return; +	int result;  	dmi_check_system(bat_dmi_table); -	 +  #ifdef CONFIG_ACPI_PROCFS_POWER  	acpi_battery_dir = acpi_lock_battery_dir();  	if (!acpi_battery_dir)  		return;  #endif -	if (acpi_bus_register_driver(&acpi_battery_driver) < 0) { +	result = acpi_bus_register_driver(&acpi_battery_driver);  #ifdef CONFIG_ACPI_PROCFS_POWER +	if (result < 0)  		acpi_unlock_battery_dir(acpi_battery_dir);  #endif -		return; -	} -	return;  }  static int __init acpi_battery_init(void)  { -	async_schedule(acpi_battery_init_async, NULL); +	if (acpi_disabled) +		return -ENODEV; + +	async_cookie = async_schedule(acpi_battery_init_async, NULL);  	return 0;  }  static void __exit acpi_battery_exit(void)  { +	async_synchronize_cookie(async_cookie);  	acpi_bus_unregister_driver(&acpi_battery_driver);  #ifdef CONFIG_ACPI_PROCFS_POWER  	acpi_unlock_battery_dir(acpi_battery_dir);  |