diff options
Diffstat (limited to 'drivers/rtc/rtc-ds1216.c')
| -rw-r--r-- | drivers/rtc/rtc-ds1216.c | 63 | 
1 files changed, 10 insertions, 53 deletions
diff --git a/drivers/rtc/rtc-ds1216.c b/drivers/rtc/rtc-ds1216.c index 45cd8c9f5a3..9c04fd2bc20 100644 --- a/drivers/rtc/rtc-ds1216.c +++ b/drivers/rtc/rtc-ds1216.c @@ -30,8 +30,6 @@ struct ds1216_regs {  struct ds1216_priv {  	struct rtc_device *rtc;  	void __iomem *ioaddr; -	size_t size; -	unsigned long baseaddr;  };  static const u8 magic[] = { @@ -144,58 +142,29 @@ static int __init ds1216_rtc_probe(struct platform_device *pdev)  {  	struct resource *res;  	struct ds1216_priv *priv; -	int ret = 0;  	u8 dummy[8];  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (!res)  		return -ENODEV; -	priv = kzalloc(sizeof *priv, GFP_KERNEL); +	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);  	if (!priv)  		return -ENOMEM;  	platform_set_drvdata(pdev, priv); -	priv->size = resource_size(res); -	if (!request_mem_region(res->start, priv->size, pdev->name)) { -		ret = -EBUSY; -		goto out; -	} -	priv->baseaddr = res->start; -	priv->ioaddr = ioremap(priv->baseaddr, priv->size); -	if (!priv->ioaddr) { -		ret = -ENOMEM; -		goto out; -	} -	priv->rtc = rtc_device_register("ds1216", &pdev->dev, -				  &ds1216_rtc_ops, THIS_MODULE); -	if (IS_ERR(priv->rtc)) { -		ret = PTR_ERR(priv->rtc); -		goto out; -	} +	priv->ioaddr = devm_ioremap_resource(&pdev->dev, res); +	if (IS_ERR(priv->ioaddr)) +		return PTR_ERR(priv->ioaddr); + +	priv->rtc = devm_rtc_device_register(&pdev->dev, "ds1216", +					&ds1216_rtc_ops, THIS_MODULE); +	if (IS_ERR(priv->rtc)) +		return PTR_ERR(priv->rtc);  	/* dummy read to get clock into a known state */  	ds1216_read(priv->ioaddr, dummy);  	return 0; - -out: -	if (priv->ioaddr) -		iounmap(priv->ioaddr); -	if (priv->baseaddr) -		release_mem_region(priv->baseaddr, priv->size); -	kfree(priv); -	return ret; -} - -static int __exit ds1216_rtc_remove(struct platform_device *pdev) -{ -	struct ds1216_priv *priv = platform_get_drvdata(pdev); - -	rtc_device_unregister(priv->rtc); -	iounmap(priv->ioaddr); -	release_mem_region(priv->baseaddr, priv->size); -	kfree(priv); -	return 0;  }  static struct platform_driver ds1216_rtc_platform_driver = { @@ -203,24 +172,12 @@ static struct platform_driver ds1216_rtc_platform_driver = {  		.name	= "rtc-ds1216",  		.owner	= THIS_MODULE,  	}, -	.remove		= __exit_p(ds1216_rtc_remove),  }; -static int __init ds1216_rtc_init(void) -{ -	return platform_driver_probe(&ds1216_rtc_platform_driver, ds1216_rtc_probe); -} - -static void __exit ds1216_rtc_exit(void) -{ -	platform_driver_unregister(&ds1216_rtc_platform_driver); -} +module_platform_driver_probe(ds1216_rtc_platform_driver, ds1216_rtc_probe);  MODULE_AUTHOR("Thomas Bogendoerfer <tsbogend@alpha.franken.de>");  MODULE_DESCRIPTION("DS1216 RTC driver");  MODULE_LICENSE("GPL");  MODULE_VERSION(DRV_VERSION);  MODULE_ALIAS("platform:rtc-ds1216"); - -module_init(ds1216_rtc_init); -module_exit(ds1216_rtc_exit);  | 
