gpio: tegra: configure pins during irq_set_type
authorStephen Warren <swarren@nvidia.com>
Mon, 19 Mar 2012 16:31:58 +0000 (10:31 -0600)
committerStephen Warren <swarren@nvidia.com>
Wed, 18 Apr 2012 16:26:38 +0000 (10:26 -0600)
When a Tegra GPIO is used as an IRQ, it should be enabled as a GPIO (so
the pinmux module isn't driving it as an output) and configured as a GPIO
input (so the GPIO module isn't driving it as an output). Set this up
automatically whenever an IRQ is requested, so that users of IRQs don't
need to do this.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Olof Johansson <olof@lixom.net>
drivers/gpio/gpio-tegra.c

index 12f349b3830d29589a6373b32e722f268bac58f9..4383a7205349344772e59379722493fab1e86ea1 100644 (file)
@@ -224,6 +224,9 @@ static int tegra_gpio_irq_set_type(struct irq_data *d, unsigned int type)
 
        spin_unlock_irqrestore(&bank->lvl_lock[port], flags);
 
+       tegra_gpio_mask_write(GPIO_MSK_OE(gpio), gpio, 0);
+       tegra_gpio_enable(gpio);
+
        if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
                __irq_set_handler_locked(d->irq, handle_level_irq);
        else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))