diff options
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-ds1286.c | 46 | 
1 files changed, 9 insertions, 37 deletions
diff --git a/drivers/rtc/rtc-ds1286.c b/drivers/rtc/rtc-ds1286.c index d120cb8bfcb..398c96a98fc 100644 --- a/drivers/rtc/rtc-ds1286.c +++ b/drivers/rtc/rtc-ds1286.c @@ -25,8 +25,6 @@  struct ds1286_priv {  	struct rtc_device *rtc;  	u32 __iomem *rtcregs; -	size_t size; -	unsigned long baseaddr;  	spinlock_t lock;  }; @@ -333,56 +331,30 @@ static int ds1286_probe(struct platform_device *pdev)  	struct rtc_device *rtc;  	struct resource *res;  	struct ds1286_priv *priv; -	int ret = 0;  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (!res)  		return -ENODEV; -	priv = kzalloc(sizeof(struct ds1286_priv), GFP_KERNEL); +	priv = devm_kzalloc(&pdev->dev, sizeof(struct ds1286_priv), GFP_KERNEL);  	if (!priv)  		return -ENOMEM; -	priv->size = resource_size(res); -	if (!request_mem_region(res->start, priv->size, pdev->name)) { -		ret = -EBUSY; -		goto out; -	} -	priv->baseaddr = res->start; -	priv->rtcregs = ioremap(priv->baseaddr, priv->size); -	if (!priv->rtcregs) { -		ret = -ENOMEM; -		goto out; -	} +	priv->rtcregs = devm_ioremap_resource(&pdev->dev, res); +	if (IS_ERR(priv->rtcregs)) +		return PTR_ERR(priv->rtcregs); +  	spin_lock_init(&priv->lock);  	platform_set_drvdata(pdev, priv); -	rtc = rtc_device_register("ds1286", &pdev->dev, -				  &ds1286_ops, THIS_MODULE); -	if (IS_ERR(rtc)) { -		ret = PTR_ERR(rtc); -		goto out; -	} +	rtc = devm_rtc_device_register(&pdev->dev, "ds1286", &ds1286_ops, +					THIS_MODULE); +	if (IS_ERR(rtc)) +		return PTR_ERR(rtc);  	priv->rtc = rtc;  	return 0; - -out: -	if (priv->rtc) -		rtc_device_unregister(priv->rtc); -	if (priv->rtcregs) -		iounmap(priv->rtcregs); -	if (priv->baseaddr) -		release_mem_region(priv->baseaddr, priv->size); -	kfree(priv); -	return ret;  }  static int ds1286_remove(struct platform_device *pdev)  { -	struct ds1286_priv *priv = platform_get_drvdata(pdev); - -	rtc_device_unregister(priv->rtc); -	iounmap(priv->rtcregs); -	release_mem_region(priv->baseaddr, priv->size); -	kfree(priv);  	return 0;  }  |