gpio/omap: warn if bank is not enabled on setting irq type
authorJon Hunter <jon-hunter@ti.com>
Fri, 1 Mar 2013 17:22:48 +0000 (11:22 -0600)
committerGrant Likely <grant.likely@secretlab.ca>
Wed, 6 Mar 2013 01:12:26 +0000 (09:12 +0800)
For OMAP devices, if a gpio is being used as an interrupt source but has
not been requested by calling gpio_request(), a call to request_irq()
may cause the kernel hang because the gpio bank may be disabled and
hence the register access will fail. To prevent such hangs, test for
this case and warn if this is detected.

Signed-off-by: Jon Hunter <jon-hunter@ti.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Kevin Hilman <khilman@linaro.org>
Tested-by: Javier Martinez Canillas <javier@dowhile0.org>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
drivers/gpio/gpio-omap.c

index c3598d143aa9419111d9920ec6983f72d51d0d38..0d30c7acf0c723c2f124a2aa18a6bc77622d5f24 100644 (file)
@@ -427,6 +427,9 @@ static int gpio_irq_type(struct irq_data *d, unsigned type)
        int retval;
        unsigned long flags;
 
+       if (WARN_ON(!bank->mod_usage))
+               return -EINVAL;
+
 #ifdef CONFIG_ARCH_OMAP1
        if (d->irq > IH_MPUIO_BASE)
                gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);