OpenCloudOS-Kernel/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 pinctrl: berlin: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
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 pinctrl: vt8500: drop owner assignment from platform_drivers 2014-10-20 16:21:26 +02:00
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
core.c pinctrl: Fix two deadlocks 2015-01-14 14:20:33 +01:00
core.h pinctrl: move subsystem mutex to pinctrl_dev struct 2013-04-26 17:01:35 +02:00
devicetree.c pinctrl: Quiet logging about missing DT nodes when not using DT 2014-02-24 10:44:54 +01:00
devicetree.h pinctrl: core device tree mapping table parsing support 2012-04-18 13:53:10 +02: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: pinctrl-adi: combine multiple groups of one function together 2014-02-25 10:49:13 +01:00
pinctrl-adi2-bf60x.c pinctrl: pinctrl-adi: combine multiple groups of one function together 2014-02-25 10:49:13 +01:00
pinctrl-adi2.c pinctrl: adi2: Remove duplicate gpiochip_remove_pin_ranges 2014-09-05 10:33:51 +02:00
pinctrl-adi2.h pinctrl: pinctrl-adi: combine multiple groups of one function together 2014-02-25 10:49:13 +01:00
pinctrl-as3722.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-at91.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
pinctrl-at91.h pinctrl: at91: use own header 2014-10-29 09:28:35 +01:00
pinctrl-bcm281xx.c pinctrl: bcm281xx: Constify struct regmap_config 2015-01-14 14:21:53 +01:00
pinctrl-bcm2835.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-coh901.c pinctrl: remove all usage of gpio_remove ret val in driver/pinctl 2014-07-22 16:34:12 +02:00
pinctrl-coh901.h pinctrl: support pinconfig on the U300 2012-03-12 22:49:03 +01:00
pinctrl-falcon.c staging: drivers: pinctrl: Fixed checkpatch.pl warnings 2015-01-21 11:02:26 +01:00
pinctrl-lantiq.c pinctrl: clean up after enable refactoring 2014-09-04 10:05:07 +02:00
pinctrl-lantiq.h pinctrl: lantiq: Fix header file include guard 2014-04-22 08:41:35 +02:00
pinctrl-palmas.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-rockchip.c pinctrl: rockchip: Only mask interrupts; never disable 2015-01-30 10:38:36 +01:00
pinctrl-single.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
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: clean up after enable refactoring 2014-09-04 10:05:07 +02:00
pinctrl-tegra.h pinctrl: tegra: add missing kerneldoc 2014-04-22 16:55:41 +02:00
pinctrl-tegra20.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-tegra30.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-tegra114.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-tegra124.c pinctrl: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
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: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pinctrl-utils.c pinctrl: utils: include export.h to avoid warnings 2013-08-28 15:50:33 +02:00
pinctrl-utils.h pinctrl: add utility functions for add map/configs 2013-08-14 21:00:41 +02:00
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 pinctrl: clean up after enable refactoring 2014-09-04 10:05:07 +02:00
pinmux.h pinctrl: ifdef CONFIG_DEBUG_FS cleanup 2012-04-18 13:53:12 +02:00