drivers/rtc/rtc-vr41xx.c: use devm_*() functions
[linux-2.6-microblaze.git] / drivers / rtc / rtc-vr41xx.c
index aabc22c..88c9c92 100644 (file)
@@ -293,7 +293,7 @@ static int rtc_probe(struct platform_device *pdev)
        if (!res)
                return -EBUSY;
 
-       rtc1_base = ioremap(res->start, resource_size(res));
+       rtc1_base = devm_ioremap(&pdev->dev, res->start, resource_size(res));
        if (!rtc1_base)
                return -EBUSY;
 
@@ -303,13 +303,14 @@ static int rtc_probe(struct platform_device *pdev)
                goto err_rtc1_iounmap;
        }
 
-       rtc2_base = ioremap(res->start, resource_size(res));
+       rtc2_base = devm_ioremap(&pdev->dev, res->start, resource_size(res));
        if (!rtc2_base) {
                retval = -EBUSY;
                goto err_rtc1_iounmap;
        }
 
-       rtc = rtc_device_register(rtc_name, &pdev->dev, &vr41xx_rtc_ops, THIS_MODULE);
+       rtc = devm_rtc_device_register(&pdev->dev, rtc_name, &vr41xx_rtc_ops,
+                                       THIS_MODULE);
        if (IS_ERR(rtc)) {
                retval = PTR_ERR(rtc);
                goto err_iounmap_all;
@@ -330,24 +331,24 @@ static int rtc_probe(struct platform_device *pdev)
        aie_irq = platform_get_irq(pdev, 0);
        if (aie_irq <= 0) {
                retval = -EBUSY;
-               goto err_device_unregister;
+               goto err_iounmap_all;
        }
 
-       retval = request_irq(aie_irq, elapsedtime_interrupt, 0,
-                            "elapsed_time", pdev);
+       retval = devm_request_irq(&pdev->dev, aie_irq, elapsedtime_interrupt, 0,
+                               "elapsed_time", pdev);
        if (retval < 0)
-               goto err_device_unregister;
+               goto err_iounmap_all;
 
        pie_irq = platform_get_irq(pdev, 1);
        if (pie_irq <= 0) {
                retval = -EBUSY;
-               goto err_free_irq;
+               goto err_iounmap_all;
        }
 
-       retval = request_irq(pie_irq, rtclong1_interrupt, 0,
-                            "rtclong1", pdev);
+       retval = devm_request_irq(&pdev->dev, pie_irq, rtclong1_interrupt, 0,
+                               "rtclong1", pdev);
        if (retval < 0)
-               goto err_free_irq;
+               goto err_iounmap_all;
 
        platform_set_drvdata(pdev, rtc);
 
@@ -358,47 +359,20 @@ static int rtc_probe(struct platform_device *pdev)
 
        return 0;
 
-err_free_irq:
-       free_irq(aie_irq, pdev);
-
-err_device_unregister:
-       rtc_device_unregister(rtc);
-
 err_iounmap_all:
-       iounmap(rtc2_base);
        rtc2_base = NULL;
 
 err_rtc1_iounmap:
-       iounmap(rtc1_base);
        rtc1_base = NULL;
 
        return retval;
 }
 
-static int rtc_remove(struct platform_device *pdev)
-{
-       struct rtc_device *rtc;
-
-       rtc = platform_get_drvdata(pdev);
-       if (rtc)
-               rtc_device_unregister(rtc);
-
-       free_irq(aie_irq, pdev);
-       free_irq(pie_irq, pdev);
-       if (rtc1_base)
-               iounmap(rtc1_base);
-       if (rtc2_base)
-               iounmap(rtc2_base);
-
-       return 0;
-}
-
 /* work with hotplug and coldplug */
 MODULE_ALIAS("platform:RTC");
 
 static struct platform_driver rtc_platform_driver = {
        .probe          = rtc_probe,
-       .remove         = rtc_remove,
        .driver         = {
                .name   = rtc_name,
                .owner  = THIS_MODULE,