diff options
Diffstat (limited to 'packages/linux/linux-2.6.24/simpad/linux-2.6.24-SIMpad-rtc-sa1100.patch')
-rw-r--r-- | packages/linux/linux-2.6.24/simpad/linux-2.6.24-SIMpad-rtc-sa1100.patch | 76 |
1 files changed, 58 insertions, 18 deletions
diff --git a/packages/linux/linux-2.6.24/simpad/linux-2.6.24-SIMpad-rtc-sa1100.patch b/packages/linux/linux-2.6.24/simpad/linux-2.6.24-SIMpad-rtc-sa1100.patch index 6e09bfd103..407fd89a26 100644 --- a/packages/linux/linux-2.6.24/simpad/linux-2.6.24-SIMpad-rtc-sa1100.patch +++ b/packages/linux/linux-2.6.24/simpad/linux-2.6.24-SIMpad-rtc-sa1100.patch @@ -1,28 +1,68 @@ -diff -Nur linux-2.6.24.vanilla/drivers/rtc/rtc-sa1100.c linux-2.6.24/drivers/rtc/rtc-sa1100.c +diff -Nur linux-2.6.24.vanilla/drivers/rtc/rtc-sa1100.c linux-2.6.24_rtc/drivers/rtc/rtc-sa1100.c --- linux-2.6.24.vanilla/drivers/rtc/rtc-sa1100.c 2008-01-24 23:58:37.000000000 +0100 -+++ linux-2.6.24/drivers/rtc/rtc-sa1100.c 2008-03-17 20:52:41.000000000 +0100 -@@ -15,6 +15,10 @@ - * Converted to the RTC subsystem and Driver Model - * by Richard Purdie <rpurdie@rpsys.net> - * -+ * 2008/03/17 mrdata: -+ * disable IRQ RTC1Hz and RTCAlrm before request_irq -+ * in sa1100_rtc_open() -+ * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version -@@ -154,7 +158,12 @@ - static int sa1100_rtc_open(struct device *dev) ++++ linux-2.6.24_rtc/drivers/rtc/rtc-sa1100.c 2008-03-24 13:49:40.000000000 +0100 +@@ -79,7 +79,10 @@ + + rtsr = RTSR; + /* clear interrupt sources */ +- RTSR = 0; ++ RTSR &= ~RTSR_HZE; //RTSR = 0; is not possible and does not work ++ RTSR &= ~RTSR_HZ; ++ RTSR &= ~RTSR_ALE; ++ RTSR &= ~RTSR_AL; + RTSR = (RTSR_AL | RTSR_HZ) & (rtsr >> 2); + + /* clear alarm interrupt if it has occurred */ +@@ -155,6 +158,20 @@ { int ret; -- -+ + ++ /* ++ * On some devices RTSR is set to some value but it must be set to 0. ++ * We have to set RTSR to 0 and OIER/OSSR to default. This should not be ++ * necessary here but it is. ++ */ + spin_lock_irq(&sa1100_rtc_lock); + RTSR &= ~RTSR_HZE; ++ RTSR &= ~RTSR_HZ; + RTSR &= ~RTSR_ALE; ++ RTSR &= ~RTSR_AL; ++ OIER &= ~OIER_E1; ++ OSSR = OSSR_M1; + spin_unlock_irq(&sa1100_rtc_lock); -+ ++ ret = request_irq(IRQ_RTC1Hz, sa1100_rtc_interrupt, IRQF_DISABLED, "rtc 1Hz", dev); if (ret) { +@@ -186,7 +203,10 @@ + static void sa1100_rtc_release(struct device *dev) + { + spin_lock_irq(&sa1100_rtc_lock); +- RTSR = 0; ++ RTSR &= ~RTSR_HZE; //RTSR = 0; is not possible and does not work ++ RTSR &= ~RTSR_HZ; ++ RTSR &= ~RTSR_ALE; ++ RTSR &= ~RTSR_AL; + OIER &= ~OIER_E1; + OSSR = OSSR_M1; + spin_unlock_irq(&sa1100_rtc_lock); +@@ -339,6 +359,19 @@ + + platform_set_drvdata(pdev, rtc); + ++ /* ++ * On some devices RTSR is set to some value but it must be set to 0. ++ * We have to set RTSR to 0 and OIER/OSSR to default. ++ */ ++ spin_lock_irq(&sa1100_rtc_lock); ++ RTSR &= ~RTSR_HZE; ++ RTSR &= ~RTSR_HZ; ++ RTSR &= ~RTSR_ALE; ++ RTSR &= ~RTSR_AL; ++ OIER &= ~OIER_E1; ++ OSSR = OSSR_M1; ++ spin_unlock_irq(&sa1100_rtc_lock); ++ + return 0; + } + |