rtc: ac100: Fix multiple race conditions
[linux-2.6-microblaze.git] / drivers / rtc / rtc-ac100.c
index 9e33618..0e358d4 100644 (file)
@@ -567,6 +567,12 @@ static int ac100_rtc_probe(struct platform_device *pdev)
                return chip->irq;
        }
 
+       chip->rtc = devm_rtc_allocate_device(&pdev->dev);
+       if (IS_ERR(chip->rtc))
+               return PTR_ERR(chip->rtc);
+
+       chip->rtc->ops = &ac100_rtc_ops;
+
        ret = devm_request_threaded_irq(&pdev->dev, chip->irq, NULL,
                                        ac100_rtc_irq,
                                        IRQF_SHARED | IRQF_ONESHOT,
@@ -586,17 +592,16 @@ static int ac100_rtc_probe(struct platform_device *pdev)
        /* clear counter alarm pending interrupts */
        regmap_write(chip->regmap, AC100_ALM_INT_STA, AC100_ALM_INT_ENABLE);
 
-       chip->rtc = devm_rtc_device_register(&pdev->dev, "rtc-ac100",
-                                            &ac100_rtc_ops, THIS_MODULE);
-       if (IS_ERR(chip->rtc)) {
-               dev_err(&pdev->dev, "unable to register device\n");
-               return PTR_ERR(chip->rtc);
-       }
-
        ret = ac100_rtc_register_clks(chip);
        if (ret)
                return ret;
 
+       ret = rtc_register_device(chip->rtc);
+       if (ret) {
+               dev_err(&pdev->dev, "unable to register device\n");
+               return ret;
+       }
+
        dev_info(&pdev->dev, "RTC enabled\n");
 
        return 0;