omap24xx: Some retu/tahvo IRQ fixes
authorMichael Büsch <mb@bu3sch.de>
Thu, 17 Nov 2011 18:06:19 +0000 (18:06 +0000)
committerMichael Büsch <mb@bu3sch.de>
Thu, 17 Nov 2011 18:06:19 +0000 (18:06 +0000)
SVN-Revision: 29233

target/linux/omap24xx/patches-3.1/252-cbus-retu-tahvo-ack-fix.patch [new file with mode: 0644]
target/linux/omap24xx/patches-3.1/253-cbus-tahvo-irq-reg-lock.patch [new file with mode: 0644]

diff --git a/target/linux/omap24xx/patches-3.1/252-cbus-retu-tahvo-ack-fix.patch b/target/linux/omap24xx/patches-3.1/252-cbus-retu-tahvo-ack-fix.patch
new file mode 100644 (file)
index 0000000..34f9465
--- /dev/null
@@ -0,0 +1,65 @@
+Index: linux-3.1.1/drivers/cbus/retu.c
+===================================================================
+--- linux-3.1.1.orig/drivers/cbus/retu.c       2011-11-17 18:47:59.453004678 +0100
++++ linux-3.1.1/drivers/cbus/retu.c    2011-11-17 18:49:03.180787673 +0100
+@@ -54,8 +54,6 @@ struct retu {
+       int                     irq;
+       int                     ack;
+-      bool                    ack_pending;
+-
+       int                     mask;
+       bool                    mask_pending;
+@@ -238,7 +236,6 @@ static void retu_irq_ack(struct irq_data
+       int                     irq = data->irq;
+       retu->ack |= (1 << (irq - retu->irq_base));
+-      retu->ack_pending = true;
+ }
+ static void retu_bus_lock(struct irq_data *data)
+@@ -257,9 +254,9 @@ static void retu_bus_sync_unlock(struct
+               retu->mask_pending = false;
+       }
+-      if (retu->ack_pending) {
++      if (retu->ack) {
+               __retu_write_reg(retu, RETU_REG_IDR, retu->ack);
+-              retu->ack_pending = false;
++              retu->ack = 0;
+       }
+       mutex_unlock(&retu->mutex);
+Index: linux-3.1.1/drivers/cbus/tahvo.c
+===================================================================
+--- linux-3.1.1.orig/drivers/cbus/tahvo.c      2011-11-17 18:47:59.437004733 +0100
++++ linux-3.1.1/drivers/cbus/tahvo.c   2011-11-17 18:51:03.708374259 +0100
+@@ -52,7 +52,6 @@ struct tahvo {
+       int             mask;
+       unsigned int    mask_pending:1;
+-      unsigned int    ack_pending:1;
+       unsigned int    is_betty:1;
+ };
+@@ -177,9 +176,9 @@ static void tahvo_irq_bus_sync_unlock(st
+               tahvo->mask_pending = false;
+       }
+-      if (tahvo->ack_pending) {
++      if (tahvo->ack) {
+               __tahvo_write_reg(tahvo, TAHVO_REG_IDR, tahvo->ack);
+-              tahvo->ack_pending = false;
++              tahvo->ack = 0;
+       }
+       mutex_unlock(&tahvo->mutex);
+@@ -209,7 +208,6 @@ static void tahvo_irq_ack(struct irq_dat
+       int                     irq = data->irq;
+       tahvo->ack |= (1 << (irq - tahvo->irq_base));
+-      tahvo->ack_pending = true;
+ }
+ static struct irq_chip tahvo_irq_chip = {
diff --git a/target/linux/omap24xx/patches-3.1/253-cbus-tahvo-irq-reg-lock.patch b/target/linux/omap24xx/patches-3.1/253-cbus-tahvo-irq-reg-lock.patch
new file mode 100644 (file)
index 0000000..c27a67c
--- /dev/null
@@ -0,0 +1,15 @@
+Index: linux-3.1.1/drivers/cbus/tahvo.c
+===================================================================
+--- linux-3.1.1.orig/drivers/cbus/tahvo.c      2011-11-17 18:51:03.708374259 +0100
++++ linux-3.1.1/drivers/cbus/tahvo.c   2011-11-17 18:57:17.739067493 +0100
+@@ -137,8 +137,10 @@ static irqreturn_t tahvo_irq_handler(int
+       u16                     id;
+       u16                     im;
++      mutex_lock(&tahvo->mutex);
+       id = __tahvo_read_reg(tahvo, TAHVO_REG_IDR);
+       im = __tahvo_read_reg(tahvo, TAHVO_REG_IMR);
++      mutex_unlock(&tahvo->mutex);
+       id &= ~im;
+       if (!id) {