diff options
Diffstat (limited to 'drivers/power/wm97xx_battery.c')
| -rw-r--r-- | drivers/power/wm97xx_battery.c | 34 | 
1 files changed, 11 insertions, 23 deletions
diff --git a/drivers/power/wm97xx_battery.c b/drivers/power/wm97xx_battery.c index 5071d85ec12..58f7348e6c2 100644 --- a/drivers/power/wm97xx_battery.c +++ b/drivers/power/wm97xx_battery.c @@ -25,9 +25,8 @@  #include <linux/irq.h>  #include <linux/slab.h> -static DEFINE_MUTEX(bat_lock);  static struct work_struct bat_work; -static struct mutex work_lock; +static DEFINE_MUTEX(work_lock);  static int bat_status = POWER_SUPPLY_STATUS_UNKNOWN;  static enum power_supply_property *prop; @@ -147,7 +146,7 @@ static irqreturn_t wm97xx_chrg_irq(int irq, void *data)  #ifdef CONFIG_PM  static int wm97xx_bat_suspend(struct device *dev)  { -	flush_scheduled_work(); +	flush_work(&bat_work);  	return 0;  } @@ -163,7 +162,7 @@ static const struct dev_pm_ops wm97xx_bat_pm_ops = {  };  #endif -static int __devinit wm97xx_bat_probe(struct platform_device *dev) +static int wm97xx_bat_probe(struct platform_device *dev)  {  	int ret = 0;  	int props = 1;	/* POWER_SUPPLY_PROP_PRESENT */ @@ -181,8 +180,6 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)  	if (dev->id != -1)  		return -EINVAL; -	mutex_init(&work_lock); -  	if (!pdata) {  		dev_err(&dev->dev, "No platform_data supplied\n");  		return -EINVAL; @@ -196,7 +193,7 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)  		if (ret)  			goto err2;  		ret = request_irq(gpio_to_irq(pdata->charge_gpio), -				wm97xx_chrg_irq, IRQF_DISABLED, +				wm97xx_chrg_irq, 0,  				"AC Detect", dev);  		if (ret)  			goto err2; @@ -215,8 +212,10 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)  		props++;	/* POWER_SUPPLY_PROP_VOLTAGE_MIN */  	prop = kzalloc(props * sizeof(*prop), GFP_KERNEL); -	if (!prop) +	if (!prop) { +		ret = -ENOMEM;  		goto err3; +	}  	prop[i++] = POWER_SUPPLY_PROP_PRESENT;  	if (pdata->charge_gpio >= 0) @@ -264,7 +263,7 @@ err:  	return ret;  } -static int __devexit wm97xx_bat_remove(struct platform_device *dev) +static int wm97xx_bat_remove(struct platform_device *dev)  {  	struct wm97xx_pdata *wmdata = dev->dev.platform_data;  	struct wm97xx_batt_pdata *pdata = wmdata->batt_pdata; @@ -273,7 +272,7 @@ static int __devexit wm97xx_bat_remove(struct platform_device *dev)  		free_irq(gpio_to_irq(pdata->charge_gpio), dev);  		gpio_free(pdata->charge_gpio);  	} -	flush_scheduled_work(); +	cancel_work_sync(&bat_work);  	power_supply_unregister(&bat_ps);  	kfree(prop);  	return 0; @@ -288,21 +287,10 @@ static struct platform_driver wm97xx_bat_driver = {  #endif  	},  	.probe		= wm97xx_bat_probe, -	.remove		= __devexit_p(wm97xx_bat_remove), +	.remove		= wm97xx_bat_remove,  }; -static int __init wm97xx_bat_init(void) -{ -	return platform_driver_register(&wm97xx_bat_driver); -} - -static void __exit wm97xx_bat_exit(void) -{ -	platform_driver_unregister(&wm97xx_bat_driver); -} - -module_init(wm97xx_bat_init); -module_exit(wm97xx_bat_exit); +module_platform_driver(wm97xx_bat_driver);  MODULE_LICENSE("GPL");  MODULE_AUTHOR("Marek Vasut <marek.vasut@gmail.com>");  | 
