]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
serial: clear proper MPSC interrupt cause bits
authorJay Lubomirski <jaylubo@motorola.com>
Wed, 27 Jun 2007 21:10:09 +0000 (14:10 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 4 Aug 2007 16:10:25 +0000 (09:10 -0700)
The interrupt clearing code in mpsc_sdma_intr_ack() mistakenly clears the
interrupt for both controllers instead of just the one its supposed to.
This can result in the other controller appearing to hang because its
interrupt was effectively lost.

So, don't clear the interrupt cause bits for both MPSC controllers when
clearing the interrupt for one of them.  Just clear the one that is
supposed to be cleared.

Signed-off-by: Jay Lubomirski <jaylubo@motorola.com>
Acked-by: Mark A. Greer <mgreer@mvista.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/serial/mpsc.c

index 3d2fcc57b1ced216ec9d6702f5c10a73edd8631f..64ed5ef5a612f65a8e580a511b50e797a558075b 100644 (file)
@@ -502,7 +502,8 @@ mpsc_sdma_intr_ack(struct mpsc_port_info *pi)
 
        if (pi->mirror_regs)
                pi->shared_regs->SDMA_INTR_CAUSE_m = 0;
-       writel(0, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE);
+       writeb(0x00, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE +
+              pi->port.line);
        return;
 }