Drivers: scsi: remove __dev* attributes.
[deliverable/linux.git] / drivers / rtc / rtc-spear.c
index bb507d23f6cea09e3c2ab80fec144e1acbb1c4a9..141fc945295f0796a46f2f4cb79d1535bbfe7bf7 100644 (file)
@@ -363,35 +363,42 @@ static int __devinit spear_rtc_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "no resource defined\n");
                return -EBUSY;
        }
-       if (!request_mem_region(res->start, resource_size(res), pdev->name)) {
-               dev_err(&pdev->dev, "rtc region already claimed\n");
-               return -EBUSY;
-       }
 
-       config = kzalloc(sizeof(*config), GFP_KERNEL);
+       config = devm_kzalloc(&pdev->dev, sizeof(*config), GFP_KERNEL);
        if (!config) {
                dev_err(&pdev->dev, "out of memory\n");
-               status = -ENOMEM;
-               goto err_release_region;
+               return -ENOMEM;
        }
 
-       config->clk = clk_get(&pdev->dev, NULL);
-       if (IS_ERR(config->clk)) {
-               status = PTR_ERR(config->clk);
-               goto err_kfree;
+       /* alarm irqs */
+       irq = platform_get_irq(pdev, 0);
+       if (irq < 0) {
+               dev_err(&pdev->dev, "no update irq?\n");
+               return irq;
        }
 
-       status = clk_enable(config->clk);
-       if (status < 0)
-               goto err_clk_put;
+       status = devm_request_irq(&pdev->dev, irq, spear_rtc_irq, 0, pdev->name,
+                       config);
+       if (status) {
+               dev_err(&pdev->dev, "Alarm interrupt IRQ%d already claimed\n",
+                               irq);
+               return status;
+       }
 
-       config->ioaddr = ioremap(res->start, resource_size(res));
+       config->ioaddr = devm_request_and_ioremap(&pdev->dev, res);
        if (!config->ioaddr) {
-               dev_err(&pdev->dev, "ioremap fail\n");
-               status = -ENOMEM;
-               goto err_disable_clock;
+               dev_err(&pdev->dev, "request-ioremap fail\n");
+               return -ENOMEM;
        }
 
+       config->clk = devm_clk_get(&pdev->dev, NULL);
+       if (IS_ERR(config->clk))
+               return PTR_ERR(config->clk);
+
+       status = clk_prepare_enable(config->clk);
+       if (status < 0)
+               return status;
+
        spin_lock_init(&config->lock);
        platform_set_drvdata(pdev, config);
 
@@ -401,42 +408,19 @@ static int __devinit spear_rtc_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "can't register RTC device, err %ld\n",
                                PTR_ERR(config->rtc));
                status = PTR_ERR(config->rtc);
-               goto err_iounmap;
-       }
-
-       /* alarm irqs */
-       irq = platform_get_irq(pdev, 0);
-       if (irq < 0) {
-               dev_err(&pdev->dev, "no update irq?\n");
-               status = irq;
-               goto err_clear_platdata;
+               goto err_disable_clock;
        }
 
-       status = request_irq(irq, spear_rtc_irq, 0, pdev->name, config);
-       if (status) {
-               dev_err(&pdev->dev, "Alarm interrupt IRQ%d already \
-                               claimed\n", irq);
-               goto err_clear_platdata;
-       }
+       config->rtc->uie_unsupported = 1;
 
        if (!device_can_wakeup(&pdev->dev))
                device_init_wakeup(&pdev->dev, 1);
 
        return 0;
 
-err_clear_platdata:
-       platform_set_drvdata(pdev, NULL);
-       rtc_device_unregister(config->rtc);
-err_iounmap:
-       iounmap(config->ioaddr);
 err_disable_clock:
-       clk_disable(config->clk);
-err_clk_put:
-       clk_put(config->clk);
-err_kfree:
-       kfree(config);
-err_release_region:
-       release_mem_region(res->start, resource_size(res));
+       platform_set_drvdata(pdev, NULL);
+       clk_disable_unprepare(config->clk);
 
        return status;
 }
@@ -444,24 +428,11 @@ err_release_region:
 static int __devexit spear_rtc_remove(struct platform_device *pdev)
 {
        struct spear_rtc_config *config = platform_get_drvdata(pdev);
-       int irq;
-       struct resource *res;
 
-       /* leave rtc running, but disable irqs */
+       rtc_device_unregister(config->rtc);
        spear_rtc_disable_interrupt(config);
+       clk_disable_unprepare(config->clk);
        device_init_wakeup(&pdev->dev, 0);
-       irq = platform_get_irq(pdev, 0);
-       if (irq)
-               free_irq(irq, pdev);
-       clk_disable(config->clk);
-       clk_put(config->clk);
-       iounmap(config->ioaddr);
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (res)
-               release_mem_region(res->start, resource_size(res));
-       platform_set_drvdata(pdev, NULL);
-       rtc_device_unregister(config->rtc);
-       kfree(config);
 
        return 0;
 }
This page took 0.03797 seconds and 5 git commands to generate.