diff options
Diffstat (limited to 'drivers/misc/arm-charlcd.c')
| -rw-r--r-- | drivers/misc/arm-charlcd.c | 29 | 
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/misc/arm-charlcd.c b/drivers/misc/arm-charlcd.c index 9e3879ef58f..c72e96b523e 100644 --- a/drivers/misc/arm-charlcd.c +++ b/drivers/misc/arm-charlcd.c @@ -11,6 +11,7 @@  #include <linux/module.h>  #include <linux/interrupt.h>  #include <linux/platform_device.h> +#include <linux/of.h>  #include <linux/completion.h>  #include <linux/delay.h>  #include <linux/io.h> @@ -291,13 +292,13 @@ static int __init charlcd_probe(struct platform_device *pdev)  	lcd->virtbase = ioremap(lcd->phybase, lcd->physize);  	if (!lcd->virtbase) {  		ret = -ENOMEM; -		goto out_no_remap; +		goto out_no_memregion;  	}  	lcd->irq = platform_get_irq(pdev, 0);  	/* If no IRQ is supplied, we'll survive without it */  	if (lcd->irq >= 0) { -		if (request_irq(lcd->irq, charlcd_interrupt, IRQF_DISABLED, +		if (request_irq(lcd->irq, charlcd_interrupt, 0,  				DRIVERNAME, lcd)) {  			ret = -EIO;  			goto out_no_irq; @@ -313,15 +314,13 @@ static int __init charlcd_probe(struct platform_device *pdev)  	INIT_DELAYED_WORK(&lcd->init_work, charlcd_init_work);  	schedule_delayed_work(&lcd->init_work, 0); -	dev_info(&pdev->dev, "initalized ARM character LCD at %08x\n", +	dev_info(&pdev->dev, "initialized ARM character LCD at %08x\n",  		lcd->phybase);  	return 0;  out_no_irq:  	iounmap(lcd->virtbase); -out_no_remap: -	platform_set_drvdata(pdev, NULL);  out_no_memregion:  	release_mem_region(lcd->phybase, SZ_4K);  out_no_resource: @@ -337,7 +336,6 @@ static int __exit charlcd_remove(struct platform_device *pdev)  		free_irq(lcd->irq, lcd);  		iounmap(lcd->virtbase);  		release_mem_region(lcd->phybase, lcd->physize); -		platform_set_drvdata(pdev, NULL);  		kfree(lcd);  	} @@ -369,27 +367,22 @@ static const struct dev_pm_ops charlcd_pm_ops = {  	.resume = charlcd_resume,  }; +static const struct of_device_id charlcd_match[] = { +	{ .compatible = "arm,versatile-lcd", }, +	{} +}; +  static struct platform_driver charlcd_driver = {  	.driver = {  		.name = DRIVERNAME,  		.owner = THIS_MODULE,  		.pm = &charlcd_pm_ops, +		.of_match_table = of_match_ptr(charlcd_match),  	},  	.remove = __exit_p(charlcd_remove),  }; -static int __init charlcd_init(void) -{ -	return platform_driver_probe(&charlcd_driver, charlcd_probe); -} - -static void __exit charlcd_exit(void) -{ -	platform_driver_unregister(&charlcd_driver); -} - -module_init(charlcd_init); -module_exit(charlcd_exit); +module_platform_driver_probe(charlcd_driver, charlcd_probe);  MODULE_AUTHOR("Linus Walleij <triad@df.lth.se>");  MODULE_DESCRIPTION("ARM Character LCD Driver");  | 
