powerpc: mpc8xx_pic: Cleanup flow type handling
authorThomas Gleixner <tglx@linutronix.de>
Fri, 25 Mar 2011 15:18:32 +0000 (16:18 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 29 Mar 2011 12:48:10 +0000 (14:48 +0200)
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>
arch/powerpc/sysdev/mpc8xx_pic.c

index 1a75a7fb4a994ff53c7b3f239c9100a8a9a9f82d..7cd936cdfe00e910756f65106efbd9fdf269a3d2 100644 (file)
@@ -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;