rtc: rtc-pl031: Set wakeup flag prior to registering rtcdev
authorJohn Stultz <john.stultz@linaro.org>
Tue, 17 Sep 2013 18:20:21 +0000 (11:20 -0700)
committerJohn Stultz <john.stultz@linaro.org>
Wed, 18 Sep 2013 21:37:50 +0000 (14:37 -0700)
In some recent testing, I noticed the CLOCK_REALTIME_ALARM clockid
wasn't functioning on my vexpress qemu environment. Looking into it
I noticed the pl031 rtc driver doesn't set the wakeup flag on the
device until after registering the device with the RTC subsystem.

This causes the alarmtimer subsystem to not see the pl031 driver
as a valid backing device, and that resuls in alarm clockids
getting ENOTSUPP errors.

Thus be sure to set the wakeup flag on the device prior to
registering the rtcdev so the pl031 rtc driver can be used as
the backing alarmtimer device.

Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: "Jon Medhurst (Tixy)" <tixy@linaro.org>
Cc: linux-arm-kernel@lists.infradead.org
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: John Stultz <john.stultz@linaro.org>
drivers/rtc/rtc-pl031.c

index 0f0609b1aa2ccfead83ec98db660a58fac5736de..e3b25712b6591906aff9633e98d5c82f4feba351 100644 (file)
@@ -371,6 +371,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
                }
        }
 
+       device_init_wakeup(&adev->dev, 1);
        ldata->rtc = rtc_device_register("pl031", &adev->dev, ops,
                                        THIS_MODULE);
        if (IS_ERR(ldata->rtc)) {
@@ -384,8 +385,6 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
                goto out_no_irq;
        }
 
-       device_init_wakeup(&adev->dev, 1);
-
        return 0;
 
 out_no_irq: