forked from Minki/linux
pinctrl: at91: use locked variant of irq_set_handler
When setting the gpio irq type, use the __irq_set_handler_locked() variant instead of the irq_set_handler() to prevent false spinlock recursion warning. Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Cc: stable <stable@vger.kernel.org> # v3.12 Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
38dbfb59d1
commit
b0dcfd8732
@ -1286,22 +1286,22 @@ static int alt_gpio_irq_type(struct irq_data *d, unsigned type)
|
||||
|
||||
switch (type) {
|
||||
case IRQ_TYPE_EDGE_RISING:
|
||||
irq_set_handler(d->irq, handle_simple_irq);
|
||||
__irq_set_handler_locked(d->irq, handle_simple_irq);
|
||||
writel_relaxed(mask, pio + PIO_ESR);
|
||||
writel_relaxed(mask, pio + PIO_REHLSR);
|
||||
break;
|
||||
case IRQ_TYPE_EDGE_FALLING:
|
||||
irq_set_handler(d->irq, handle_simple_irq);
|
||||
__irq_set_handler_locked(d->irq, handle_simple_irq);
|
||||
writel_relaxed(mask, pio + PIO_ESR);
|
||||
writel_relaxed(mask, pio + PIO_FELLSR);
|
||||
break;
|
||||
case IRQ_TYPE_LEVEL_LOW:
|
||||
irq_set_handler(d->irq, handle_level_irq);
|
||||
__irq_set_handler_locked(d->irq, handle_level_irq);
|
||||
writel_relaxed(mask, pio + PIO_LSR);
|
||||
writel_relaxed(mask, pio + PIO_FELLSR);
|
||||
break;
|
||||
case IRQ_TYPE_LEVEL_HIGH:
|
||||
irq_set_handler(d->irq, handle_level_irq);
|
||||
__irq_set_handler_locked(d->irq, handle_level_irq);
|
||||
writel_relaxed(mask, pio + PIO_LSR);
|
||||
writel_relaxed(mask, pio + PIO_REHLSR);
|
||||
break;
|
||||
@ -1310,7 +1310,7 @@ static int alt_gpio_irq_type(struct irq_data *d, unsigned type)
|
||||
* disable additional interrupt modes:
|
||||
* fall back to default behavior
|
||||
*/
|
||||
irq_set_handler(d->irq, handle_simple_irq);
|
||||
__irq_set_handler_locked(d->irq, handle_simple_irq);
|
||||
writel_relaxed(mask, pio + PIO_AIMDR);
|
||||
return 0;
|
||||
case IRQ_TYPE_NONE:
|
||||
|
Loading…
Reference in New Issue
Block a user