linux/drivers/gpio
Russell King d01849f7de gpio: gpio-omap: fix level interrupt idling
Tony notes that the GPIO module does not idle when level interrupts are
in use, as the wakeup appears to get stuck.

After extensive investigation, it appears that the wakeup will only be
cleared if the interrupt status register is cleared while the interrupt
is enabled. However, we are currently clearing it with the interrupt
disabled for level-based interrupts.

It is acknowledged that this observed behaviour conflicts with a
statement in the TRM:

CAUTION
  After servicing the interrupt, the status bit in the interrupt status
  register (GPIOi.GPIO_IRQSTATUS_0 or GPIOi.GPIO_IRQSTATUS_1) must be
  reset and the interrupt line released (by setting the corresponding
  bit of the interrupt status register to 1) before enabling an
  interrupt for the GPIO channel in the interrupt-enable register
  (GPIOi.GPIO_IRQSTATUS_SET_0 or GPIOi.GPIO_IRQSTATUS_SET_1) to prevent
  the occurrence of unexpected interrupts when enabling an interrupt
  for the GPIO channel.

However, this does not appear to be a practical problem.

Further, as reported by Grygorii Strashko <grygorii.strashko@ti.com>,
the TI Android kernel tree has an earlier similar patch as "GPIO: OMAP:
Fix the sequence to clear the IRQ status" saying:

 if the status is cleared after disabling the IRQ then sWAKEUP will not
 be cleared and gates the module transition

When we unmask the level interrupt after the interrupt has been handled,
enable the interrupt and only then clear the interrupt. If the interrupt
is still pending, the hardware will re-assert the interrupt status.

Should the caution note in the TRM prove to be a problem, we could
use a clear-enable-clear sequence instead.

Cc: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: Keerthy <j-keerthy@ti.com>
Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
[tony@atomide.com: updated comments based on an earlier TI patch]
Signed-off-by: Tony Lindgren <tony@atomide.com>
Acked-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2019-03-08 14:11:30 +01:00
..
gpio-74x164.c The is the bulk of GPIO changes for the v4.16 kernel cycle. 2018-01-31 12:25:27 -08:00
gpio-74xx-mmio.c gpio: 74xx-mmio: Use of_device_get_match_data() 2018-05-16 14:35:24 +02:00
gpio-104-dio-48e.c gpio: 104-dio-48e: Mask read inputs for get_multiple 2018-11-05 08:54:41 +01:00
gpio-104-idi-48.c gpio: 104-idi-48e: Mask the read inputs for get_multiple 2018-11-05 08:54:41 +01:00
gpio-104-idio-16.c gpio: 104-idio-16: Implement get_multiple callback 2018-03-26 10:10:18 +02:00
gpio-adnp.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
gpio-adp5520.c drivers: gpio: Update MODULE AUTHOR email address 2018-08-29 13:30:25 +02:00
gpio-adp5588.c gpio: adp5588.c: Switch to events system 2019-02-09 11:33:37 +01:00
gpio-altera-a10sr.c gpio: altera-a10sr: Trivial coding style fix 2019-02-14 15:14:38 +01:00
gpio-altera.c gpio: altera: Fixup block comment style 2019-01-28 14:59:58 +01:00
gpio-amd8111.c gpio: amd8111: Include proper header 2018-01-13 22:22:49 +01:00
gpio-amd-fch.c gpio: amd-fch: Set proper output level for direction_output 2019-03-08 14:11:30 +01:00
gpio-amdpt.c
gpio-arizona.c gpio: arizona: Include proper header 2018-01-13 22:47:48 +01:00
gpio-aspeed.c gpio: aspeed: remove duplicated statement 2018-12-21 11:14:11 +01:00
gpio-ath79.c gpio: fix meaningless return expression 2018-07-29 23:34:54 +02:00
gpio-bcm-kona.c gpio-bcm-kona: use new req/relres and dis/enable_irq funcs 2018-09-10 08:57:36 +02:00
gpio-bd9571mwv.c
gpio-brcmstb.c gpio: brcmstb: allow 0 width GPIO banks 2018-08-30 11:04:50 +02:00
gpio-bt8xx.c gpio: bt8xx: Include proper header 2018-01-13 22:56:52 +01:00
gpio-cadence.c gpio: Add Cadence GPIO driver 2018-12-21 11:41:00 +01:00
gpio-clps711x.c
gpio-creg-snps.c GPIO: add single-register GPIO via CREG driver 2018-10-10 09:21:06 +02:00
gpio-crystalcove.c gpio: crystalcove: Convert to use SPDX identifier 2019-02-08 15:55:40 +02:00
gpio-cs5535.c gpio: cs5535: Include proper header 2018-01-14 01:56:24 +01:00
gpio-da9052.c gpio: da905x: Include proper header 2018-01-14 02:00:10 +01:00
gpio-da9055.c gpio: da905x: Include proper header 2018-01-14 02:00:10 +01:00
gpio-davinci.c gpio: davinci: use devm_platform_ioremap_resource() 2019-02-21 13:05:52 +01:00
gpio-dln2.c gpio: dln2: Include proper header 2018-03-19 01:50:07 +01:00
gpio-dwapb.c gpio: gpio-dwapb: simplify getting .driver_data 2018-11-05 08:54:41 +01:00
gpio-eic-sprd.c gpio updates for v5.1 2019-02-17 21:59:33 +01:00
gpio-em.c gpio: em: Don't shadow error code of gpiochip_lock_as_irq() 2018-08-06 23:46:55 +02:00
gpio-ep93xx.c gpio: ep93xx: fix test for end of loop 2018-09-10 08:48:24 +02:00
gpio-exar.c gpio: exar: Use correct property prefix and document bindings 2017-08-01 13:43:55 +02:00
gpio-f7188x.c gpio-f7188x: add support Fintek F81804 & F81966 2019-01-22 15:48:44 +01:00
gpio-ftgpio010.c gpio: ftgpio: Register per-instance irqchip 2019-02-25 10:24:07 +01:00
gpio-ge.c gpio: ge: Fix build warning 2018-05-16 14:35:24 +02:00
gpio-gpio-mm.c gpio: gpio-mm: Mask read inputs for get_multiple 2018-11-05 08:54:41 +01:00
gpio-grgpio.c drivers/gpio/gpio-grgpio.c: Remove duplicate header 2018-11-19 15:09:22 +01:00
gpio-gw-pld.c gpio: Add a Gateworks PLD GPIO driver 2019-02-09 11:33:37 +01:00
gpio-hlwd.c gpio: hlwd: Implement edge trigger emulation 2019-01-21 14:34:45 +01:00
gpio-htc-egpio.c gpio: htc-egpio: Remove set but not used variable 'bit' 2018-10-01 12:27:19 +02:00
gpio-ich.c gpio: ich: Convert to use SPDX identifier 2018-12-07 17:34:07 +02:00
gpio-intel-mid.c gpio: intel-mid: Convert to use SPDX identifier 2018-12-07 17:34:07 +02:00
gpio-iop.c gpio: iop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE 2017-12-02 22:42:21 +01:00
gpio-it87.c gpio: it87: Add support for IT8613 2018-08-10 23:19:17 +02:00
gpio-janz-ttl.c gpio: janz-ttl: Use BIT() macro 2018-03-19 01:50:30 +01:00
gpio-kempld.c gpio: kempld: Include the right header 2018-03-19 01:50:31 +01:00
gpio-ks8695.c gpio: ks8695: Change to use DEFINE_SHOW_ATTRIBUTE macro 2018-12-07 11:10:14 +01:00
gpio-loongson1.c gpio: loongson1: fix bgpio usage 2017-10-25 11:25:38 +02:00
gpio-loongson.c gpio: loongson: Use BIT() macros 2018-05-16 14:35:24 +02:00
gpio-lp873x.c gpio: lp873x: Include the right header 2018-05-16 14:35:24 +02:00
gpio-lp3943.c gpio: lp3943: Include the right header 2018-05-16 14:35:24 +02:00
gpio-lp87565.c
gpio-lpc18xx.c gpio: lpc18xx: fix GPIO controller driver build as a module 2018-12-10 09:10:46 +01:00
gpio-lpc32xx.c gpio: lpc32xx: Include the right header 2018-05-16 14:35:24 +02:00
gpio-lynxpoint.c intel-gpio for v4.21-1 2018-12-14 14:27:41 +01:00
gpio-madera.c gpio: madera: Add missing const 2019-02-14 15:14:37 +01:00
gpio-max730x.c gpio: max730x: Include the right header 2018-05-16 14:35:24 +02:00
gpio-max732x.c gpio: max732x: add error handling for i2c_new_dummy 2018-06-18 07:55:30 +02:00
gpio-max3191x.c gpiolib: Pass array info to get/set array functions 2018-09-13 11:16:54 +02:00
gpio-max7300.c
gpio-max7301.c gpio: max7301: fix driver for use with CONFIG_VMAP_STACK 2018-12-21 09:23:45 +01:00
gpio-max77620.c regmap: regmap-irq/gpio-max77620: add level-irq support 2018-12-19 18:35:45 +00:00
gpio-mb86s7x.c gpio: mb86s70: Revert "Return error if requesting an already assigned gpio" 2017-10-31 13:13:34 +01:00
gpio-mc9s08dz60.c gpio: mc9s08dz60: Include the right header 2018-05-16 14:35:24 +02:00
gpio-mc33880.c gpio: mc33880: Include the right header 2018-05-16 14:35:24 +02:00
gpio-menz127.c gpio: Fix wrong rounding in gpio-menz127 2018-06-18 07:55:30 +02:00
gpio-merrifield.c gpio: merrifield: Convert to use SPDX identifier 2018-12-07 17:34:08 +02:00
gpio-ml-ioh.c gpio: ml-ioh: Fix buffer underwrite on probe error path 2018-07-29 23:13:09 +02:00
gpio-mm-lantiq.c gpio: mm-lantiq: Include the right header 2018-05-16 14:35:24 +02:00
gpio-mmio.c gpio: Use SPDX header for core library 2018-09-25 09:08:48 +02:00
gpio-mockup.c gpio: mockup: rework debugfs interface 2019-02-19 17:42:29 +01:00
gpio-mpc8xxx.c gpio: mpc8xxx: Do not reverse bits using bgpio 2017-10-25 11:25:40 +02:00
gpio-mpc5200.c
gpio-msic.c gpio: msic: Convert to use SPDX identifier 2019-02-08 15:55:41 +02:00
gpio-mt7621.c gpio: mt7621: pass mediatek_gpio_bank_probe() failure up the stack 2018-12-07 10:47:24 +01:00
gpio-mvebu.c gpio: mvebu: implement get_direction 2019-01-10 16:19:11 +01:00
gpio-mxc.c gpio: mxc: add check to return defer probe if clock tree NOT ready 2019-02-25 13:42:46 +01:00
gpio-mxs.c gpio: mxs: read pin level directly instead of using .get 2018-12-21 11:29:57 +01:00
gpio-octeon.c gpio: octeon: Include the right header 2018-05-24 14:22:04 +02:00
gpio-omap.c gpio: gpio-omap: fix level interrupt idling 2019-03-08 14:11:30 +01:00
gpio-palmas.c gpio: palmas: Include the right header 2018-05-24 14:25:13 +02:00
gpio-pca953x.c gpio: pca953x: Use PCA_LATCH_INT 2019-03-08 14:11:30 +01:00
gpio-pcf857x.c gpio updates for v5.1 2019-02-17 21:59:33 +01:00
gpio-pch.c gpio: pch: Convert to use SPDX identifier 2018-12-07 17:34:08 +02:00
gpio-pci-idio-16.c gpio: pci-idio-16: Mask read inputs for get_multiple 2018-11-05 08:54:42 +01:00
gpio-pcie-idio-24.c gpio: pcie-idio-24: Mask read inputs for get_multiple 2018-11-05 08:54:42 +01:00
gpio-pisosr.c gpio-pisosr: add support for get_multiple 2018-07-29 21:55:33 +02:00
gpio-pl061.c gpio: pl061: Move irq_chip definition inside struct pl061 2018-11-05 08:54:42 +01:00
gpio-pmic-eic-sprd.c gpio: sprd: Change to use SoC compatible string 2019-02-21 13:18:49 +01:00
gpio-pxa.c gpio: pxa: fix legacy non pinctrl aware builds again 2018-11-16 23:06:29 +01:00
gpio-raspberrypi-exp.c gpio: raspberrypi-exp: decrease refcount on firmware dt node 2018-12-17 15:28:30 +01:00
gpio-rc5t583.c gpio: rc5t583: Include the right header 2018-07-02 16:00:49 +02:00
gpio-rcar.c gpio: rcar: select General Output Register to set output states 2019-01-21 14:59:50 +01:00
gpio-rdc321x.c gpio: rdc321x: Include the right header 2018-07-02 16:00:49 +02:00
gpio-reg.c gpio: gpio-reg: fix build 2017-12-22 15:24:31 +01:00
gpio-sa1100.c gpio: sa1100: Include the right header 2018-07-02 16:00:49 +02:00
gpio-sama5d2-piobu.c gpio: sama5d2-piobu: Set proper output level for direction_output 2019-01-11 10:34:37 +01:00
gpio-sch311x.c gpio: sch311x: clean an indentation issue, remove extraneous space 2018-11-05 08:54:42 +01:00
gpio-sch.c gpio: sch: Convert to use SPDX identifier 2018-12-07 17:34:08 +02:00
gpio-siox.c gpio: new driver to work with a 8x12 siox 2018-09-28 09:30:42 +02:00
gpio-sodaville.c gpio: sodaville: Convert to use SPDX identifier 2018-12-07 17:34:08 +02:00
gpio-spear-spics.c gpio: spear-spics: Include the right header 2018-07-02 16:00:49 +02:00
gpio-sprd.c gpio: Add GPIO driver for Spreadtrum SC9860 platform 2018-03-02 11:00:43 +01:00
gpio-sta2x11.c gpio: sta2x11: Inline regs macro 2018-07-02 16:00:49 +02:00
gpio-stmpe.c gpio: stmpe: Include the right header 2018-07-02 16:00:49 +02:00
gpio-stp-xway.c gpio: stp-xway: Include the right header 2018-07-02 16:00:49 +02:00
gpio-syscon.c gpio: syscon: Fix possible NULL ptr usage 2018-10-10 10:33:11 +02:00
gpio-tb10x.c gpio: tb10x: Use GENERIC_GPIO 2018-08-29 08:53:37 +02:00
gpio-tc3589x.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-tegra186.c gpio: tegra186: Use TEGRA186_ prefix for GPIO names 2019-02-14 15:14:38 +01:00
gpio-tegra.c gpio: tegra: Fix offset of pinctrl calls 2019-02-19 21:48:20 +01:00
gpio-thunderx.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
gpio-timberdale.c gpio: timberdale: Include the right header 2018-08-10 23:04:27 +02:00
gpio-tpic2810.c
gpio-tps6586x.c gpio: tps65xxx: Use SPDX license tag 2018-09-04 08:22:47 +02:00
gpio-tps65086.c gpio: tps65xxx: Use SPDX license tag 2018-09-04 08:22:47 +02:00
gpio-tps65218.c
gpio-tps65910.c gpio: tps65xxx: Use SPDX license tag 2018-09-04 08:22:47 +02:00
gpio-tps65912.c gpio: tps65xxx: Use SPDX license tag 2018-09-04 08:22:47 +02:00
gpio-tps68470.c gpio: tps68470: Update to SPDX license identifier 2018-02-23 15:26:42 +01:00
gpio-tqmx86.c gpio: tqmx86: Set proper output level for direction_output 2019-02-21 13:19:52 +01:00
gpio-ts4800.c
gpio-ts4900.c gpio: ts4900: Use of_device_get_match_data() 2018-05-16 14:35:24 +02:00
gpio-ts5500.c gpio: ts5500: Delete platform data handling 2018-09-04 08:22:47 +02:00
gpio-twl4030.c gpio: twl4030: Implement .get_direction() 2018-09-10 08:48:51 +02:00
gpio-twl6040.c gpio: twl6040: Implement .get_direction() 2018-09-10 08:49:22 +02:00
gpio-ucb1400.c
gpio-uniphier.c gpio: uniphier: convert to SPDX License Identifier 2018-12-07 13:40:28 +01:00
gpio-vf610.c gpio: vf610: Mask all GPIO interrupts 2019-01-28 15:28:43 +01:00
gpio-viperboard.c gpio: viperboard: Cut down on boilerplate 2018-09-17 10:55:24 -07:00
gpio-vr41xx.c gpio: vr41xx: Delete vr41xx_gpio_pullupdown() callback 2018-09-17 10:55:24 -07:00
gpio-vx855.c gpio: vx855: Cut down on boilerplate 2018-09-17 10:55:24 -07:00
gpio-wcove.c gpio: wcove: Convert to use SPDX identifier 2019-02-08 15:55:41 +02:00
gpio-winbond.c gpio: winbond: Add driver 2018-01-09 14:51:00 +01:00
gpio-wm831x.c gpio: wm8xxx: Cut down on boilerplate 2018-09-17 10:55:24 -07:00
gpio-wm8350.c gpio: wm8xxx: Cut down on boilerplate 2018-09-17 10:55:24 -07:00
gpio-wm8994.c gpio: wm8xxx: Cut down on boilerplate 2018-09-17 10:55:24 -07:00
gpio-ws16c48.c gpio: ws16c48: Mask read inputs for get_multiple 2018-11-05 08:54:42 +01:00
gpio-xgene-sb.c gpio: xgene-sb: Don't shadow error code of gpiochip_lock_as_irq() 2018-08-06 23:46:55 +02:00
gpio-xgene.c
gpio-xilinx.c gpio: xilinx: Use the right include 2018-08-10 23:19:17 +02:00
gpio-xlp.c gpio: xlp: Cut down on boilerplate 2018-09-17 10:55:24 -07:00
gpio-xra1403.c gpio: xra1403: Switch to a fixed upper bound for registers 2018-04-27 01:06:21 +02:00
gpio-xtensa.c gpio: xtensa: Cut down on boilerplate 2018-09-17 10:55:24 -07:00
gpio-zevio.c gpio: zevio: Include the right header 2018-09-04 08:22:47 +02:00
gpio-zx.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-zynq.c gpio: zynq: properly support runtime PM for GPIO used as interrupts 2019-02-13 10:36:54 +01:00
gpiolib-acpi.c gpio updates for v5.1 2019-02-17 21:59:33 +01:00
gpiolib-devprop.c Accept partial 'gpio-line-names' property. 2018-10-01 13:15:06 +02:00
gpiolib-devres.c gpio: Add devm_gpiod_unhinge() 2018-12-11 01:04:23 +00:00
gpiolib-legacy.c gpio: Use SPDX header for core library 2018-09-25 09:08:48 +02:00
gpiolib-of.c gpio: of: Handle both enable-gpio{,s} 2019-02-21 13:12:04 +01:00
gpiolib-sysfs.c gpio: Use SPDX header for core library 2018-09-25 09:08:48 +02:00
gpiolib.c gpio updates for v5.1 2019-02-17 21:59:33 +01:00
gpiolib.h gpio: add core support for pull-up/pull-down configuration 2019-02-13 09:10:14 +01:00
Kconfig gpio: AMD G-Series PCH gpio driver 2019-02-22 17:26:52 +01:00
Makefile gpio: AMD G-Series PCH gpio driver 2019-02-22 17:26:52 +01:00
TODO gpio: Add global TODO file for GPIO 2018-11-05 08:54:40 +01:00