Patch "rtc: snvs: fix wakealarm by call enable_irq_wake earlier" has been added to the 4.1-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
rtc: snvs: fix wakealarm by call enable_irq_wake earlier
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
rtc-snvs-fix-wakealarm-by-call-enable_irq_wake-earlier.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
119434f44c78df8c4b6d67f835448542a4bd7e91Mon Sep 17 00:00:00 2001
From: Stefan Agner <[email protected]>
Date: Thu, 21 May 2015 17:29:35 +0200
Subject: rtc: snvs: fix wakealarm by call enable_irq_wake earlier
From: Stefan Agner <[email protected]>
commit 119434f44c78df8c4b6d67f835448542a4bd7e91 upstream.
When entering suspend while an wakeup alarm is set, enable_set_wake should make sure that the RTC interrupt keep being enabled and the .irq_set_wake for the RTC interrupt get called. However, since the driver uses the suspend_noirq callback, the call to enable_irq_wake has been made after disabling the interrupts. While .irq_set_wake has been called properly, the interrupt remained disabled.
Use the suspend callback to call enable_irq_wake early enough to ensure the RTC interrupt remains enabled.
--- drivers/rtc/rtc-snvs.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-)
drivers/rtc/rtc-snvs.c +21 -9
@@ -322,6 +322,13 @@ static int snvs_rtc_suspend(struct devicif (device_may_wakeup (dev))enable_irq_wake (data->irq); +return 0 ; +} + +static int snvs_rtc_suspend_noirq (struct device *dev) +{ +struct snvs_rtc_data *data =dev_get_drvdata (dev); +if (data->clk)clk_disable_unprepare (data->clk);
@@ -331,23 +338,28 @@ static int snvs_rtc_suspend(struct devicstatic int snvs_rtc_resume (struct device *dev) {struct snvs_rtc_data *data =dev_get_drvdata (dev); -int ret;if (device_may_wakeup (dev)) -disable_irq_wake (data->irq); +return disable_irq_wake (data->irq); -if (data->clk) { - ret =clk_prepare_enable (data->clk); -if (ret) -return ret; - } +return 0 ; +} + +static int snvs_rtc_resume_noirq (struct device *dev) +{ +struct snvs_rtc_data *data =dev_get_drvdata (dev); + +if (data->clk) +return clk_prepare_enable (data->clk);return 0 ; }static const struct dev_pm_ops snvs_rtc_pm_ops = { - .suspend_noirq = snvs_rtc_suspend, - .resume_noirq = snvs_rtc_resume, + .suspend = snvs_rtc_suspend, + .suspend_noirq = snvs_rtc_suspend_noirq, + .resume = snvs_rtc_resume, + .resume_noirq = snvs_rtc_resume_noirq, };#define SNVS_RTC_PM_OPS (&snvs_rtc_pm_ops)
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/rtc-snvs-fix-wakealarm-by-call-enable_irq_wake-earlier.patch