diff options
Diffstat (limited to 'drivers/input/misc/pwm-beeper.c')
| -rw-r--r-- | drivers/input/misc/pwm-beeper.c | 39 | 
1 files changed, 20 insertions, 19 deletions
diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c index 57c294f0719..8ef288e7c97 100644 --- a/drivers/input/misc/pwm-beeper.c +++ b/drivers/input/misc/pwm-beeper.c @@ -16,6 +16,7 @@  #include <linux/input.h>  #include <linux/module.h>  #include <linux/kernel.h> +#include <linux/of.h>  #include <linux/platform_device.h>  #include <linux/pwm.h>  #include <linux/slab.h> @@ -65,9 +66,9 @@ static int pwm_beeper_event(struct input_dev *input,  	return 0;  } -static int __devinit pwm_beeper_probe(struct platform_device *pdev) +static int pwm_beeper_probe(struct platform_device *pdev)  { -	unsigned long pwm_id = (unsigned long)pdev->dev.platform_data; +	unsigned long pwm_id = (unsigned long)dev_get_platdata(&pdev->dev);  	struct pwm_beeper *beeper;  	int error; @@ -75,7 +76,11 @@ static int __devinit pwm_beeper_probe(struct platform_device *pdev)  	if (!beeper)  		return -ENOMEM; -	beeper->pwm = pwm_request(pwm_id, "pwm beeper"); +	beeper->pwm = pwm_get(&pdev->dev, NULL); +	if (IS_ERR(beeper->pwm)) { +		dev_dbg(&pdev->dev, "unable to request PWM, trying legacy API\n"); +		beeper->pwm = pwm_request(pwm_id, "pwm beeper"); +	}  	if (IS_ERR(beeper->pwm)) {  		error = PTR_ERR(beeper->pwm); @@ -125,11 +130,10 @@ err_free:  	return error;  } -static int __devexit pwm_beeper_remove(struct platform_device *pdev) +static int pwm_beeper_remove(struct platform_device *pdev)  {  	struct pwm_beeper *beeper = platform_get_drvdata(pdev); -	platform_set_drvdata(pdev, NULL);  	input_unregister_device(beeper->input);  	pwm_disable(beeper->pwm); @@ -140,7 +144,7 @@ static int __devexit pwm_beeper_remove(struct platform_device *pdev)  	return 0;  } -#ifdef CONFIG_PM +#ifdef CONFIG_PM_SLEEP  static int pwm_beeper_suspend(struct device *dev)  {  	struct pwm_beeper *beeper = dev_get_drvdata(dev); @@ -171,27 +175,24 @@ static SIMPLE_DEV_PM_OPS(pwm_beeper_pm_ops,  #define PWM_BEEPER_PM_OPS NULL  #endif +#ifdef CONFIG_OF +static const struct of_device_id pwm_beeper_match[] = { +	{ .compatible = "pwm-beeper", }, +	{ }, +}; +#endif +  static struct platform_driver pwm_beeper_driver = {  	.probe	= pwm_beeper_probe, -	.remove = __devexit_p(pwm_beeper_remove), +	.remove = pwm_beeper_remove,  	.driver = {  		.name	= "pwm-beeper",  		.owner	= THIS_MODULE,  		.pm	= PWM_BEEPER_PM_OPS, +		.of_match_table = of_match_ptr(pwm_beeper_match),  	},  }; - -static int __init pwm_beeper_init(void) -{ -	return platform_driver_register(&pwm_beeper_driver); -} -module_init(pwm_beeper_init); - -static void __exit pwm_beeper_exit(void) -{ -	platform_driver_unregister(&pwm_beeper_driver); -} -module_exit(pwm_beeper_exit); +module_platform_driver(pwm_beeper_driver);  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");  MODULE_DESCRIPTION("PWM beeper driver");  | 
