Commit 68491b07 authored by Linus Walleij's avatar Linus Walleij
Browse files

gpio: ep93xx: Use for_each_set_bit() in IRQ handler



This simplifies and standardizes the AB IRQ handler by using
the for_each_set_bit() library function.

Acked-by: default avatarAlexander Sverdlin <alexander.sverdlin@gmail.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 51ba88e3
Loading
Loading
Loading
Loading
+10 −14
Original line number Diff line number Diff line
@@ -105,26 +105,22 @@ static void ep93xx_gpio_ab_irq_handler(struct irq_desc *desc)
	struct gpio_chip *gc = irq_desc_get_handler_data(desc);
	struct ep93xx_gpio *epg = gpiochip_get_data(gc);
	struct irq_chip *irqchip = irq_desc_get_chip(desc);
	unsigned char status;
	int i;
	unsigned long stat;
	int offset;

	chained_irq_enter(irqchip, desc);

	status = readb(epg->base + EP93XX_GPIO_A_INT_STATUS);
	for (i = 0; i < 8; i++) {
		if (status & (1 << i)) {
			int gpio_irq = gpio_to_irq(0) + i;
	stat = readb(epg->base + EP93XX_GPIO_A_INT_STATUS);
	for_each_set_bit(offset, &stat, 8) {
		int gpio_irq = gpio_to_irq(0) + offset;
		generic_handle_irq(gpio_irq);
	}
	}

	status = readb(epg->base + EP93XX_GPIO_B_INT_STATUS);
	for (i = 0; i < 8; i++) {
		if (status & (1 << i)) {
			int gpio_irq = gpio_to_irq(8) + i;
	stat = readb(epg->base + EP93XX_GPIO_B_INT_STATUS);
	for_each_set_bit(offset, &stat, 8) {
		int gpio_irq = gpio_to_irq(8) + offset;
		generic_handle_irq(gpio_irq);
	}
	}

	chained_irq_exit(irqchip, desc);
}