summaryrefslogtreecommitdiff
path: root/packages/linux/linux-2.6.24/simpad/linux-2.6.24-SIMpad-rtc-sa1100.patch
diff options
context:
space:
mode:
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.patch76
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;
+ }
+