rtc: Suppress duplicate enable/disable of WM8350 update interrupt
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 5 Jan 2010 13:59:08 +0000 (13:59 +0000)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 7 Mar 2010 21:16:56 +0000 (22:16 +0100)
Unlike the wm8350-custom code genirq nests enable and disable calls
so we can't just unconditionally mask or unmask the interrupt,
we need to remember the state we set and only mask or unmask when
there is a real change.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Alessandro Zummo <a.zummo@towertech.it>
Cc: rtc-linux@googlegroups.com
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/rtc/rtc-wm8350.c
include/linux/mfd/wm8350/rtc.h

index a5512f515998b255325bb913c713107e99fc24d4..3d0dc76b38af24ef47e35b209da51a04e70d2087 100644 (file)
@@ -307,11 +307,18 @@ static int wm8350_rtc_update_irq_enable(struct device *dev,
 {
        struct wm8350 *wm8350 = dev_get_drvdata(dev);
 
+       /* Suppress duplicate changes since genirq nests enable and
+        * disable calls. */
+       if (enabled == wm8350->rtc.update_enabled)
+               return 0;
+
        if (enabled)
                wm8350_unmask_irq(wm8350, WM8350_IRQ_RTC_SEC);
        else
                wm8350_mask_irq(wm8350, WM8350_IRQ_RTC_SEC);
 
+       wm8350->rtc.update_enabled = enabled;
+
        return 0;
 }
 
index 24add2bef6c9240a30023e82766059bc8b31f81d..ebd72ffc62d17082b75642b96f2ed066df481b76 100644 (file)
@@ -263,6 +263,7 @@ struct wm8350_rtc {
        struct platform_device *pdev;
        struct rtc_device *rtc;
        int alarm_enabled;      /* used over suspend/resume */
+       int update_enabled;
 };
 
 #endif