summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner2011-03-25 16:18:32 +0100
committerThomas Gleixner2011-03-29 14:48:10 +0200
commit5fed97a9fdc0bc76ea2e220cf3aac0e8c7cf4b2b (patch)
tree4417b5ec02fb470c37f44bea677045eb5ac6562f
parentpowerpc: ipic: Cleanup flow type handling (diff)
downloadkernel-qcow2-linux-5fed97a9fdc0bc76ea2e220cf3aac0e8c7cf4b2b.tar.gz
kernel-qcow2-linux-5fed97a9fdc0bc76ea2e220cf3aac0e8c7cf4b2b.tar.xz
kernel-qcow2-linux-5fed97a9fdc0bc76ea2e220cf3aac0e8c7cf4b2b.zip
powerpc: mpc8xx_pic: Cleanup flow type handling
The core irq_set_type() function updates the flow type when the chip callback returns 0. So setting the type is bogus. The level flag is updated in the core as well. Use the proper accessors for setting the irq handlers. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--arch/powerpc/sysdev/mpc8xx_pic.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/arch/powerpc/sysdev/mpc8xx_pic.c b/arch/powerpc/sysdev/mpc8xx_pic.c
index 1a75a7fb4a99..7cd936cdfe00 100644
--- a/arch/powerpc/sysdev/mpc8xx_pic.c
+++ b/arch/powerpc/sysdev/mpc8xx_pic.c
@@ -72,13 +72,6 @@ static void mpc8xx_end_irq(struct irq_data *d)
static int mpc8xx_set_irq_type(struct irq_data *d, unsigned int flow_type)
{
- struct irq_desc *desc = irq_to_desc(d->irq);
-
- desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
- desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;
- if (flow_type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW))
- desc->status |= IRQ_LEVEL;
-
if (flow_type & IRQ_TYPE_EDGE_FALLING) {
irq_hw_number_t hw = (unsigned int)irq_map[d->irq].hwirq;
unsigned int siel = in_be32(&siu_reg->sc_siel);
@@ -87,7 +80,7 @@ static int mpc8xx_set_irq_type(struct irq_data *d, unsigned int flow_type)
if ((hw & 1) == 0) {
siel |= (0x80000000 >> hw);
out_be32(&siu_reg->sc_siel, siel);
- desc->handle_irq = handle_edge_irq;
+ __set_irq_handler_unlocked(irq, handle_edge_irq);
}
}
return 0;