Commit 5fed97a9 authored by Thomas Gleixner's avatar Thomas Gleixner

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: default avatarThomas Gleixner <tglx@linutronix.de>
parent ecf4b196
...@@ -72,13 +72,6 @@ static void mpc8xx_end_irq(struct irq_data *d) ...@@ -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) 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) { if (flow_type & IRQ_TYPE_EDGE_FALLING) {
irq_hw_number_t hw = (unsigned int)irq_map[d->irq].hwirq; irq_hw_number_t hw = (unsigned int)irq_map[d->irq].hwirq;
unsigned int siel = in_be32(&siu_reg->sc_siel); 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) ...@@ -87,7 +80,7 @@ static int mpc8xx_set_irq_type(struct irq_data *d, unsigned int flow_type)
if ((hw & 1) == 0) { if ((hw & 1) == 0) {
siel |= (0x80000000 >> hw); siel |= (0x80000000 >> hw);
out_be32(&siu_reg->sc_siel, siel); out_be32(&siu_reg->sc_siel, siel);
desc->handle_irq = handle_edge_irq; __set_irq_handler_unlocked(irq, handle_edge_irq);
} }
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment