diff options
Diffstat (limited to 'drivers/rtc/rtc-ds1216.c')
| -rw-r--r-- | drivers/rtc/rtc-ds1216.c | 44 | 
1 files changed, 9 insertions, 35 deletions
diff --git a/drivers/rtc/rtc-ds1216.c b/drivers/rtc/rtc-ds1216.c index 45cd8c9f5a3..c7702b7269f 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,57 +142,33 @@ 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;  }  |