linux-2.6.24: new rtc-sa1100 fixes for the simpad
authorHenning Heinold <heinold@inf.fu-berlin.de>
Tue, 25 Mar 2008 17:30:23 +0000 (17:30 +0000)
committerHenning Heinold <heinold@inf.fu-berlin.de>
Tue, 25 Mar 2008 17:30:23 +0000 (17:30 +0000)
* new rtc-sa1100 fix
* bump pr
* fixes bug 4094

packages/linux/linux-2.6.24/simpad/linux-2.6.24-SIMpad-rtc-sa1100.patch
packages/linux/linux_2.6.24.bb

index 6e09bfd..407fd89 100644 (file)
@@ -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;
+ }
index a3ae2f9..c075163 100644 (file)
@@ -12,7 +12,7 @@ DEFAULT_PREFERENCE_ts72xx = "1"
 
 DEPENDS_append_mpc8313e-rdb = " dtc-native"
 
-PR = "r10"
+PR = "r11"
 
 SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \
            http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \