rtc: ds1307: fix alarm reading at probe time
authorSimon Guinot <simon.guinot@sequanux.org>
Thu, 26 Nov 2015 14:37:13 +0000 (15:37 +0100)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Thu, 26 Nov 2015 17:11:26 +0000 (18:11 +0100)
With the actual code, read_alarm() always returns -EINVAL when called
during the RTC device registration. This prevents from retrieving an
already configured alarm in hardware.

This patch fixes the issue by moving the HAS_ALARM bit configuration
(if supported by the hardware) above the rtc_device_register() call.

Signed-off-by: Simon Guinot <simon.guinot@sequanux.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
drivers/rtc/rtc-ds1307.c

index 3258368188262af70fc5a02ae5dfb10eb7ba0141..aa705bb4748c08ac302d45775ef698cf26c69d5b 100644 (file)
@@ -1134,7 +1134,10 @@ read_rtc:
                                bin2bcd(tmp));
        }
 
-       device_set_wakeup_capable(&client->dev, want_irq);
+       if (want_irq) {
+               device_set_wakeup_capable(&client->dev, true);
+               set_bit(HAS_ALARM, &ds1307->flags);
+       }
        ds1307->rtc = devm_rtc_device_register(&client->dev, client->name,
                                rtc_ops, THIS_MODULE);
        if (IS_ERR(ds1307->rtc)) {
@@ -1148,12 +1151,11 @@ read_rtc:
                                                ds1307->rtc->name, client);
                if (err) {
                        client->irq = 0;
+                       device_set_wakeup_capable(&client->dev, false);
+                       clear_bit(HAS_ALARM, &ds1307->flags);
                        dev_err(&client->dev, "unable to request IRQ!\n");
-               } else {
-
-                       set_bit(HAS_ALARM, &ds1307->flags);
+               } else
                        dev_dbg(&client->dev, "got IRQ %d\n", client->irq);
-               }
        }
 
        if (chip->nvram_size) {