linux-stable/drivers/pinctrl
Doug Anderson 5ae0c7ad06 pinctrl: rockchip: Only mask interrupts; never disable
The Rockchip GPIO interrupt controller totally throws away all status
about an interrupt when you "disable" the interrupt.  That has
unfortunate consequences in the following situation:

1. An edge-triggered interrupt is enabled and should wake the system.
2. System suspend happens: interrupt is disabled and marked for wake.
3. rockchip_irq_suspend() reenables the interrupt so we can wake.
4. Interrupt happens when asleep.
5. rockchip_irq_resume() redisables the interrupt.
6. Disabling the interrupt throws away all status about it.
7. Normal system resume happens and we enable the interrupt again,
   since we threw away status about the interrupt we don't know it
   fired while suspended.  Even worse: if we need both edges of the
   interrupt the logic to swap edges never runs.

Note: even if we somehow can post the status about wakeup interrupts
in rockchip_irq_resume() we would still have a window of losing any
edges that came in while interrupts were disabled.

If we use mask only then we don't need to worry.  The GPIO Interrupt
controller keeps track of pending interrupts that are enabled and just
masked.

There was no real strong reason to support the enable/disable
functionality (other than that it seemed right), so let's go back to
just supporting mask/unmask but actually map it to the real
mask/unmask.  This ends up with slightly different (and more correct)
behavior than before (f2dd028 pinctrl: rockchip: Fix
enable/disable/mask/unmask).

Signed-off-by: Doug Anderson <dianders@chromium.org>
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2015-01-30 10:38:36 +01:00
..
berlin
freescale Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
intel pinctrl: intel: drop owner assignment from platform_drivers 2015-01-10 22:47:23 +01:00
meson pinctrl: add driver for Amlogic Meson SoCs 2015-01-26 09:13:00 +01:00
mvebu pinctrl: dove: Constify struct regmap_config and of_device_id 2015-01-14 14:21:53 +01:00
nomadik pinctrl: pinconf-generic: Allow driver to specify DT params 2015-01-11 22:32:19 +01:00
qcom Linux 3.19-rc6 2015-01-30 10:38:15 +01:00
samsung pinctrl: exynos: Add AUDIO pin controller for exynos7 2015-01-19 11:04:47 +01:00
sh-pfc pinctrl: sh-pfc: sh7372: Remove PFC support 2015-01-29 10:40:38 +01:00
sirf pinctrl: sirf: drop marco support 2015-01-14 14:21:54 +01:00
spear Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
sunxi pinctrl: sun6i: Add A31s pinctrl support 2015-01-14 14:21:52 +01:00
vt8500
core.c pinctrl: Fix two deadlocks 2015-01-14 14:20:33 +01:00
core.h
devicetree.c
devicetree.h
Kconfig pinctrl: add driver for Amlogic Meson SoCs 2015-01-26 09:13:00 +01:00
Makefile pinctrl: add driver for Amlogic Meson SoCs 2015-01-26 09:13:00 +01:00
pinconf-generic.c pinctrl: pinconf-generic: loose DT dependence 2015-01-14 14:21:38 +01:00
pinconf.c pinctrl: pinconf-generic: Allow driver to specify DT params 2015-01-11 22:32:19 +01:00
pinconf.h pinctrl: pinconf-generic: Allow driver to specify DT params 2015-01-11 22:32:19 +01:00
pinctrl-adi2-bf54x.c
pinctrl-adi2-bf60x.c
pinctrl-adi2.c
pinctrl-adi2.h
pinctrl-as3722.c
pinctrl-at91.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
pinctrl-at91.h
pinctrl-bcm281xx.c pinctrl: bcm281xx: Constify struct regmap_config 2015-01-14 14:21:53 +01:00
pinctrl-bcm2835.c
pinctrl-coh901.c
pinctrl-coh901.h
pinctrl-falcon.c staging: drivers: pinctrl: Fixed checkpatch.pl warnings 2015-01-21 11:02:26 +01:00
pinctrl-lantiq.c
pinctrl-lantiq.h
pinctrl-palmas.c
pinctrl-rockchip.c pinctrl: rockchip: Only mask interrupts; never disable 2015-01-30 10:38:36 +01:00
pinctrl-single.c
pinctrl-st.c pinctrl: st: Add irq_disable hook to st_gpio_irqchip 2015-01-07 10:44:39 +01:00
pinctrl-tb10x.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
pinctrl-tegra-xusb.c USB patches for 3.19-rc1 2014-12-14 14:57:16 -08:00
pinctrl-tegra.c
pinctrl-tegra.h
pinctrl-tegra20.c
pinctrl-tegra30.c
pinctrl-tegra114.c
pinctrl-tegra124.c
pinctrl-tz1090-pdc.c pinctrl: pinconf-generic: Allow driver to specify DT params 2015-01-11 22:32:19 +01:00
pinctrl-tz1090.c pinctrl: pinconf-generic: Allow driver to specify DT params 2015-01-11 22:32:19 +01:00
pinctrl-u300.c
pinctrl-utils.c
pinctrl-utils.h
pinctrl-xway.c pinctrl: lantiq: remove bogus of_gpio_chip_add 2015-01-14 14:20:46 +01:00
pinctrl-zynq.c pinctrl: zynq: Fix usb0 pins 2015-01-30 10:31:49 +01:00
pinmux.c
pinmux.h