]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
alarmtimer: Use wakeup source from alarmtimer platform device
authorStephen Boyd <swboyd@chromium.org>
Fri, 24 Jan 2020 05:58:47 +0000 (21:58 -0800)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 24 Jan 2020 20:00:21 +0000 (21:00 +0100)
Use the wakeup source that can be associated with the 'alarmtimer'
platform device instead of registering another one by hand.

Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Link: https://lore.kernel.org/r/20200124055849.154411-3-swboyd@chromium.org
kernel/time/alarmtimer.c

index f0469ccc84eed03ddcf90588c4d8ca7551866d47..685ff57a1d876870a7e5aa436e4ea56476688f65 100644 (file)
@@ -58,8 +58,6 @@ static DEFINE_SPINLOCK(freezer_delta_lock);
 #endif
 
 #ifdef CONFIG_RTC_CLASS
-static struct wakeup_source *ws;
-
 /* rtc timer and device for setting alarm wakeups at suspend */
 static struct rtc_timer                rtctimer;
 static struct rtc_device       *rtcdev;
@@ -88,7 +86,6 @@ static int alarmtimer_rtc_add_device(struct device *dev,
 {
        unsigned long flags;
        struct rtc_device *rtc = to_rtc_device(dev);
-       struct wakeup_source *__ws;
        struct platform_device *pdev;
        int ret = 0;
 
@@ -100,12 +97,13 @@ static int alarmtimer_rtc_add_device(struct device *dev,
        if (!device_may_wakeup(rtc->dev.parent))
                return -1;
 
-       __ws = wakeup_source_register(dev, "alarmtimer");
        pdev = platform_device_register_data(dev, "alarmtimer",
                                             PLATFORM_DEVID_AUTO, NULL, 0);
+       if (!IS_ERR(pdev))
+               device_init_wakeup(&pdev->dev, true);
 
        spin_lock_irqsave(&rtcdev_lock, flags);
-       if (__ws && !IS_ERR(pdev) && !rtcdev) {
+       if (!IS_ERR(pdev) && !rtcdev) {
                if (!try_module_get(rtc->owner)) {
                        ret = -1;
                        goto unlock;
@@ -114,8 +112,6 @@ static int alarmtimer_rtc_add_device(struct device *dev,
                rtcdev = rtc;
                /* hold a reference so it doesn't go away */
                get_device(dev);
-               ws = __ws;
-               __ws = NULL;
                pdev = NULL;
        } else {
                ret = -1;
@@ -124,7 +120,6 @@ static int alarmtimer_rtc_add_device(struct device *dev,
        spin_unlock_irqrestore(&rtcdev_lock, flags);
 
        platform_device_unregister(pdev);
-       wakeup_source_unregister(__ws);
 
        return ret;
 }
@@ -291,7 +286,7 @@ static int alarmtimer_suspend(struct device *dev)
                return 0;
 
        if (ktime_to_ns(min) < 2 * NSEC_PER_SEC) {
-               __pm_wakeup_event(ws, 2 * MSEC_PER_SEC);
+               pm_wakeup_event(dev, 2 * MSEC_PER_SEC);
                return -EBUSY;
        }
 
@@ -306,7 +301,7 @@ static int alarmtimer_suspend(struct device *dev)
        /* Set alarm, if in the past reject suspend briefly to handle */
        ret = rtc_timer_start(rtc, &rtctimer, now, 0);
        if (ret < 0)
-               __pm_wakeup_event(ws, MSEC_PER_SEC);
+               pm_wakeup_event(dev, MSEC_PER_SEC);
        return ret;
 }