diff options
Diffstat (limited to 'drivers/rtc/rtc-nuc900.c')
| -rw-r--r-- | drivers/rtc/rtc-nuc900.c | 53 | 
1 files changed, 11 insertions, 42 deletions
diff --git a/drivers/rtc/rtc-nuc900.c b/drivers/rtc/rtc-nuc900.c index 4d9525cc1cf..f5dfb6e5e7d 100644 --- a/drivers/rtc/rtc-nuc900.c +++ b/drivers/rtc/rtc-nuc900.c @@ -226,9 +226,9 @@ static int __init nuc900_rtc_probe(struct platform_device *pdev)  {  	struct resource *res;  	struct nuc900_rtc *nuc900_rtc; -	int err = 0; -	nuc900_rtc = kzalloc(sizeof(struct nuc900_rtc), GFP_KERNEL); +	nuc900_rtc = devm_kzalloc(&pdev->dev, sizeof(struct nuc900_rtc), +				GFP_KERNEL);  	if (!nuc900_rtc) {  		dev_err(&pdev->dev, "kzalloc nuc900_rtc failed\n");  		return -ENOMEM; @@ -236,68 +236,37 @@ static int __init nuc900_rtc_probe(struct platform_device *pdev)  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (!res) {  		dev_err(&pdev->dev, "platform_get_resource failed\n"); -		err = -ENXIO; -		goto fail1; +		return -ENXIO;  	} -	if (!request_mem_region(res->start, resource_size(res), -				pdev->name)) { -		dev_err(&pdev->dev, "request_mem_region failed\n"); -		err = -EBUSY; -		goto fail1; -	} - -	nuc900_rtc->rtc_reg = ioremap(res->start, resource_size(res)); -	if (!nuc900_rtc->rtc_reg) { -		dev_err(&pdev->dev, "ioremap rtc_reg failed\n"); -		err = -ENOMEM; -		goto fail2; -	} +	nuc900_rtc->rtc_reg = devm_ioremap_resource(&pdev->dev, res); +	if (IS_ERR(nuc900_rtc->rtc_reg)) +		return PTR_ERR(nuc900_rtc->rtc_reg);  	platform_set_drvdata(pdev, nuc900_rtc); -	nuc900_rtc->rtcdev = rtc_device_register(pdev->name, &pdev->dev, +	nuc900_rtc->rtcdev = devm_rtc_device_register(&pdev->dev, pdev->name,  						&nuc900_rtc_ops, THIS_MODULE);  	if (IS_ERR(nuc900_rtc->rtcdev)) {  		dev_err(&pdev->dev, "rtc device register failed\n"); -		err = PTR_ERR(nuc900_rtc->rtcdev); -		goto fail3; +		return PTR_ERR(nuc900_rtc->rtcdev);  	}  	__raw_writel(__raw_readl(nuc900_rtc->rtc_reg + REG_RTC_TSSR) | MODE24,  					nuc900_rtc->rtc_reg + REG_RTC_TSSR);  	nuc900_rtc->irq_num = platform_get_irq(pdev, 0); -	if (request_irq(nuc900_rtc->irq_num, nuc900_rtc_interrupt, -				0, "nuc900rtc", nuc900_rtc)) { +	if (devm_request_irq(&pdev->dev, nuc900_rtc->irq_num, +			nuc900_rtc_interrupt, 0, "nuc900rtc", nuc900_rtc)) {  		dev_err(&pdev->dev, "NUC900 RTC request irq failed\n"); -		err = -EBUSY; -		goto fail4; +		return -EBUSY;  	}  	return 0; - -fail4:	rtc_device_unregister(nuc900_rtc->rtcdev); -fail3:	iounmap(nuc900_rtc->rtc_reg); -fail2:	release_mem_region(res->start, resource_size(res)); -fail1:	kfree(nuc900_rtc); -	return err;  }  static int __exit nuc900_rtc_remove(struct platform_device *pdev)  { -	struct nuc900_rtc *nuc900_rtc = platform_get_drvdata(pdev); -	struct resource *res; - -	free_irq(nuc900_rtc->irq_num, nuc900_rtc); -	rtc_device_unregister(nuc900_rtc->rtcdev); -	iounmap(nuc900_rtc->rtc_reg); - -	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	release_mem_region(res->start, resource_size(res)); - -	kfree(nuc900_rtc); -  	platform_set_drvdata(pdev, NULL);  	return 0;  |