Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b0dcfd87 authored by Nicolas Ferre's avatar Nicolas Ferre Committed by Linus Walleij
Browse files

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: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
Cc: stable <stable@vger.kernel.org> # v3.12
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 38dbfb59
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -1286,22 +1286,22 @@ static int alt_gpio_irq_type(struct irq_data *d, unsigned type)


	switch (type) {
	switch (type) {
	case IRQ_TYPE_EDGE_RISING:
	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_ESR);
		writel_relaxed(mask, pio + PIO_REHLSR);
		writel_relaxed(mask, pio + PIO_REHLSR);
		break;
		break;
	case IRQ_TYPE_EDGE_FALLING:
	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_ESR);
		writel_relaxed(mask, pio + PIO_FELLSR);
		writel_relaxed(mask, pio + PIO_FELLSR);
		break;
		break;
	case IRQ_TYPE_LEVEL_LOW:
	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_LSR);
		writel_relaxed(mask, pio + PIO_FELLSR);
		writel_relaxed(mask, pio + PIO_FELLSR);
		break;
		break;
	case IRQ_TYPE_LEVEL_HIGH:
	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_LSR);
		writel_relaxed(mask, pio + PIO_REHLSR);
		writel_relaxed(mask, pio + PIO_REHLSR);
		break;
		break;
@@ -1310,7 +1310,7 @@ static int alt_gpio_irq_type(struct irq_data *d, unsigned type)
		 * disable additional interrupt modes:
		 * disable additional interrupt modes:
		 * fall back to default behavior
		 * 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);
		writel_relaxed(mask, pio + PIO_AIMDR);
		return 0;
		return 0;
	case IRQ_TYPE_NONE:
	case IRQ_TYPE_NONE: