diff options
Diffstat (limited to 'drivers/acpi/ac.c')
| -rw-r--r-- | drivers/acpi/ac.c | 25 | 
1 files changed, 19 insertions, 6 deletions
diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c index 6512b20aeccd..d5fdd36190cc 100644 --- a/drivers/acpi/ac.c +++ b/drivers/acpi/ac.c @@ -61,7 +61,6 @@ static int acpi_ac_open_fs(struct inode *inode, struct file *file);  static int acpi_ac_add(struct acpi_device *device);  static int acpi_ac_remove(struct acpi_device *device, int type); -static int acpi_ac_resume(struct acpi_device *device);  static void acpi_ac_notify(struct acpi_device *device, u32 event);  static const struct acpi_device_id ac_device_ids[] = { @@ -70,6 +69,11 @@ static const struct acpi_device_id ac_device_ids[] = {  };  MODULE_DEVICE_TABLE(acpi, ac_device_ids); +#ifdef CONFIG_PM_SLEEP +static int acpi_ac_resume(struct device *dev); +#endif +static SIMPLE_DEV_PM_OPS(acpi_ac_pm, NULL, acpi_ac_resume); +  static struct acpi_driver acpi_ac_driver = {  	.name = "ac",  	.class = ACPI_AC_CLASS, @@ -78,9 +82,9 @@ static struct acpi_driver acpi_ac_driver = {  	.ops = {  		.add = acpi_ac_add,  		.remove = acpi_ac_remove, -		.resume = acpi_ac_resume,  		.notify = acpi_ac_notify,  		}, +	.drv.pm = &acpi_ac_pm,  };  struct acpi_ac { @@ -292,7 +296,9 @@ static int acpi_ac_add(struct acpi_device *device)  	ac->charger.properties = ac_props;  	ac->charger.num_properties = ARRAY_SIZE(ac_props);  	ac->charger.get_property = get_ac_property; -	power_supply_register(&ac->device->dev, &ac->charger); +	result = power_supply_register(&ac->device->dev, &ac->charger); +	if (result) +		goto end;  	printk(KERN_INFO PREFIX "%s [%s] (%s)\n",  	       acpi_device_name(device), acpi_device_bid(device), @@ -309,13 +315,19 @@ static int acpi_ac_add(struct acpi_device *device)  	return result;  } -static int acpi_ac_resume(struct acpi_device *device) +#ifdef CONFIG_PM_SLEEP +static int acpi_ac_resume(struct device *dev)  {  	struct acpi_ac *ac;  	unsigned old_state; -	if (!device || !acpi_driver_data(device)) + +	if (!dev)  		return -EINVAL; -	ac = acpi_driver_data(device); + +	ac = acpi_driver_data(to_acpi_device(dev)); +	if (!ac) +		return -EINVAL; +  	old_state = ac->state;  	if (acpi_ac_get_state(ac))  		return 0; @@ -323,6 +335,7 @@ static int acpi_ac_resume(struct acpi_device *device)  		kobject_uevent(&ac->charger.dev->kobj, KOBJ_CHANGE);  	return 0;  } +#endif  static int acpi_ac_remove(struct acpi_device *device, int type)  {  | 
