linux/drivers/gpio
Javier Martinez Canillas b4419e1a15 gpio/omap: auto request GPIO as input if used as IRQ via DT
When an OMAP GPIO is used as an IRQ line, a call to gpio_request()
has to be made to initialize the OMAP GPIO bank before a driver
request the IRQ. Otherwise the call to request_irq() fails.

Drives should not be aware of this neither care wether an IRQ line
is a GPIO or not. They should just request the IRQ and this has to
be handled by the irq_chip driver.

With the current OMAP GPIO DT binding, if we define:

    gpio6: gpio@49058000 {
    	   compatible = "ti,omap3-gpio";
	   reg = <0x49058000 0x200>;
	   interrupts = <34>;
	   ti,hwmods = "gpio6";
	   gpio-controller;
	   #gpio-cells = <2>;
	   interrupt-controller;
	   #interrupt-cells = <2>;
    };

	   interrupt-parent = <&gpio6>;
           interrupts = <16 8>;

The GPIO is correctly mapped as an IRQ but a call to gpio_request()
is never made. Since a call to the custom IRQ domain .map function
handler is made for each GPIO used as an IRQ, the GPIO can be setup
and configured as input there automatically.

Changes since v3:
  - Use bank->chip.of_node instead of_have_populated_dt() to check
    DT or legacy boot as suggested by Jean-Christophe PLAGNIOL-VILLARD
  - Add a comment that this is just a temporary solution until and
    that it has to be removed once is handled by the IRQ core.

Changes since v2:
 - Only make the call to gpio_request_one() conditional in the DT
   case as suggested by Grant Likely.

Changes since v1:
  - Split the irq domain mapping function handler and the GPIO
    request in two different patches.

Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Tested-by: Enric Balletbo i Serra <eballetbo@gmail.com>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2013-07-20 18:57:28 +02:00
..
devres.c gpio: devres: make comments proper 2013-06-17 07:53:00 +02:00
gpio-74x164.c gpio: 74x164: use spi_get_drvdata() and spi_set_drvdata() 2013-03-27 16:05:13 +01:00
gpio-adnp.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-adp5520.c gpio: adp5520: use devm_kzalloc() 2013-03-27 16:05:10 +01:00
gpio-adp5588.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-amd8111.c gpio: add a driver for GPIO pins found on AMD-8111 south bridge chips 2012-07-12 13:40:13 +02:00
gpio-arizona.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-bt8xx.c Gpio/trivial: replace numeric with standard PM state macros 2013-06-30 01:37:07 +02:00
gpio-clps711x.c GPIO: clps711x: Add DT support 2013-06-11 15:44:57 -07:00
gpio-cs5535.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-da9052.c This is the MFD patch set for the 3.8 merge window. 2012-12-16 18:55:20 -08:00
gpio-da9055.c Drivers: misc: remove __dev* attributes. 2013-01-03 15:57:16 -08:00
gpio-davinci.c gpio: davinci: preparation for switch to common clock framework 2012-09-01 01:12:01 +02:00
gpio-em.c gpio: em: Make use of devm functions 2013-03-27 16:05:09 +01:00
gpio-ep93xx.c gpio: remove use of __devinit 2012-11-28 11:39:33 -08:00
gpio-ge.c
gpio-generic.c GPIO: gpio-generic: remove kfree() from bgpio_remove call 2013-04-11 19:33:54 +02:00
gpio-grgpio.c gpio: grgpio: Staticize local symbols 2013-06-19 21:40:38 +02:00
gpio-ich.c gpio: ich: add GPO_BLINK support 2013-06-19 21:14:00 +02:00
gpio-it8761e.c
gpio-janz-ttl.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-ks8695.c
gpio-langwell.c Power management and ACPI updates for 3.11-rc1 2013-07-03 14:35:40 -07:00
gpio-lpc32xx.c Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
gpio-lynxpoint.c gpio: lynxpoint: remove unnecessary platform_set_drvdata() 2013-05-30 19:20:20 +02:00
gpio-max730x.c Driver core updates for 3.8-rc1 2012-12-11 13:13:55 -08:00
gpio-max732x.c gpio: max732x: use devm_kzalloc() 2013-03-27 16:05:11 +01:00
gpio-max7300.c gpio: max7300: use devm_kzalloc() 2013-03-27 16:05:11 +01:00
gpio-max7301.c MAX7301 GPIO: Do not force SPI speed when using OF Platform 2013-03-27 16:05:18 +01:00
gpio-mc9s08dz60.c gpio: mc9s08dz60: Use devm_kzalloc API 2012-09-01 01:02:27 +02:00
gpio-mc33880.c gpio: mc33880: use spi_get_drvdata() and spi_set_drvdata() 2013-03-27 16:05:14 +01:00
gpio-mcp23s08.c gpio: mcp23s08: convert driver to DT 2013-04-10 23:41:17 +02:00
gpio-ml-ioh.c gpio-ml-ioh: fix error return code in ioh_gpio_probe() 2013-05-30 19:39:20 +02:00
gpio-mm-lantiq.c GPIO: MIPS: lantiq: convert gpio-mm-lantiq to OF and of_mm_gpio 2012-05-21 14:31:53 +01:00
gpio-mpc8xxx.c gpio: mpc8xxx: don't set IRQ_TYPE_NONE when creating irq mapping 2013-02-04 21:41:46 +01:00
gpio-mpc5200.c gpio: remove use of __devinit 2012-11-28 11:39:33 -08:00
gpio-msic.c gpio: remove use of __devinit 2012-11-28 11:39:33 -08:00
gpio-msm-v1.c gpio_msm: Convert to use devm_ioremap_resource 2013-06-17 10:52:40 +02:00
gpio-msm-v2.c gpio: msm: Add device tree and irqdomain support for gpio-msm-v2 2013-06-12 14:50:12 -07:00
gpio-mvebu.c gpio: mvebu: Use irq_get_trigger_type() to get IRQ flags 2013-06-25 11:48:25 +02:00
gpio-mxc.c arm: Move chained_irq_(enter|exit) to a generic file 2013-03-26 16:11:43 +00:00
gpio-mxs.c gpio: mxs: Use set and clear capabilities of the gpio controller 2013-05-20 20:14:43 +02:00
gpio-omap.c gpio/omap: auto request GPIO as input if used as IRQ via DT 2013-07-20 18:57:28 +02:00
gpio-palmas.c gpio: palmas: Add support for Palmas GPIO 2013-02-14 00:22:45 +01:00
gpio-pca953x.c GPIO changes for Linux 3.10 2013-05-06 15:40:55 -07:00
gpio-pcf857x.c gpio: pcf857x: use devm_kzalloc() 2013-03-27 16:05:12 +01:00
gpio-pch.c gpio: Don't override the error code in probe error handling 2013-05-20 20:27:30 +02:00
gpio-pl061.c ARM: arm-soc cleanup for 3.10 2013-05-02 09:03:55 -07:00
gpio-pxa.c GPIO changes for Linux 3.10 2013-05-06 15:40:55 -07:00
gpio-rc5t583.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-rcar.c GPIO changes for the v3.11 development cycle: 2013-07-03 11:39:44 -07:00
gpio-rdc321x.c gpio: rdc321x: remove unnecessary platform_set_drvdata() 2013-05-30 19:20:21 +02:00
gpio-sa1100.c ARM: 7342/2: sa1100: prepare for sparse irq conversion 2012-03-25 23:57:20 +01:00
gpio-samsung.c Merge branch 'v3.11-next/driver-pinctrl' into v3.11-next/s3c24xx-driver 2013-06-12 05:24:16 +09:00
gpio-sch.c gpio: Don't override the error code in probe error handling 2013-05-20 20:27:30 +02:00
gpio-sodaville.c gpio: remove use of __devinit 2012-11-28 11:39:33 -08:00
gpio-spear-spics.c gpio: Convert to devm_ioremap_resource() 2013-01-22 11:41:56 -08:00
gpio-sta2x11.c gpio-sta2x11: Convert to use devm_ioremap_resource 2013-06-17 10:53:38 +02:00
gpio-stmpe.c gpio: stmpe: Staticize non-exported symbols 2013-05-30 19:20:22 +02:00
gpio-stp-xway.c gpio: gpio-stp-xway.c: fix checkpatch error 2013-03-27 16:05:16 +01:00
gpio-sx150x.c gpio: sx150x: convert to use devm_* functions 2013-05-30 22:18:36 +02:00
gpio-tc3589x.c gpio: tc3589x: remove unnecessary platform_set_drvdata() 2013-05-30 19:20:21 +02:00
gpio-tegra.c drivers/gpio: don't check resource with devm_ioremap_resource 2013-05-18 11:55:19 +02:00
gpio-timberdale.c gpio: timberdale: remove unnecessary platform_set_drvdata() 2013-05-30 19:20:21 +02:00
gpio-tnetv107x.c
gpio-tps6586x.c This is the MFD patch set for the 3.8 merge window. 2012-12-16 18:55:20 -08:00
gpio-tps65910.c gpio: gpio-tps65910.c: fix checkpatch error 2013-03-27 16:05:18 +01:00
gpio-tps65912.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-ts5500.c Drivers: misc: remove __dev* attributes. 2013-01-03 15:57:16 -08:00
gpio-twl4030.c gpio: twl4030: Cache the direction and output states in private data 2013-01-17 11:48:12 +01:00
gpio-twl6040.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-ucb1400.c mfd: ucb1400: Pass ucb1400-gpio data through ac97 bus 2013-04-19 00:40:07 +02:00
gpio-viperboard.c gpio: Don't override the error code in probe error handling 2013-05-20 20:27:30 +02:00
gpio-vr41xx.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-vx855.c gpio: vx855: remove unnecessary platform_set_drvdata() 2013-05-30 19:20:21 +02:00
gpio-wm831x.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-wm8350.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-wm8994.c gpio: remove use of __devexit 2012-11-28 11:39:59 -08:00
gpio-xilinx.c GPIO: xilinx: Use BIT macro 2013-06-17 07:47:33 +02:00
gpiolib-acpi.c gpiolib-acpi: introduce acpi_get_gpio_by_index() helper 2013-04-12 00:31:18 +02:00
gpiolib-of.c GPIO changes for Linux 3.10 2013-05-06 15:40:55 -07:00
gpiolib.c gpiolib: remove warnning of allocations with IRQs disabled 2013-06-20 10:37:41 +02:00
Kconfig GPIO changes for the v3.11 development cycle: 2013-07-03 11:39:44 -07:00
Makefile ARM: SAMSUNG: Introduce GPIO_SAMSUNG Kconfig entry 2013-06-19 01:24:27 +09:00