}
}
-void _reset_gpio(struct gpio_bank *bank, int gpio)
-{
- _set_gpio_direction(bank, get_gpio_index(gpio), 1);
- _set_gpio_irqenable(bank, gpio, 0);
- _clear_gpio_irqstatus(bank, gpio);
- _set_gpio_triggering(bank, get_gpio_index(gpio), IRQT_NOEDGE);
-}
-
/* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
static int gpio_wake_enable(unsigned int irq, unsigned int enable)
{
}
bank->reserved_map |= (1 << get_gpio_index(gpio));
+ /* Set trigger to none. You need to enable the trigger after request_irq */
+ _set_gpio_triggering(bank, get_gpio_index(gpio), IRQT_NOEDGE);
+
#ifdef CONFIG_ARCH_OMAP15XX
if (bank->method == METHOD_GPIO_1510) {
void __iomem *reg;
}
#endif
bank->reserved_map &= ~(1 << get_gpio_index(gpio));
- _reset_gpio(bank, gpio);
+ _set_gpio_direction(bank, get_gpio_index(gpio), 1);
+ _set_gpio_irqenable(bank, gpio, 0);
+ _clear_gpio_irqstatus(bank, gpio);
spin_unlock(&bank->lock);
}
}
-static unsigned int gpio_irq_startup(unsigned int irq)
-{
- unsigned int gpio = irq - IH_GPIO_BASE;
- struct gpio_bank *bank = get_gpio_bank(gpio);
-
- _reset_gpio(bank, gpio);
- _set_gpio_irqenable(bank, gpio, 1);
-
- return 0;
-}
-
-static void gpio_irq_shutdown(unsigned int irq)
-{
- unsigned int gpio = irq - IH_GPIO_BASE;
- struct gpio_bank *bank = get_gpio_bank(gpio);
-
- _reset_gpio(bank, gpio);
-}
-
static void gpio_ack_irq(unsigned int irq)
{
unsigned int gpio = irq - IH_GPIO_BASE;
static struct irq_chip gpio_irq_chip = {
.name = "GPIO",
- .startup = gpio_irq_startup,
- .shutdown = gpio_irq_shutdown,
.ack = gpio_ack_irq,
.mask = gpio_mask_irq,
.unmask = gpio_unmask_irq,