2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-07 21:24:00 +08:00
linux-next/drivers/pinctrl
Paul Cercueil 1c95348ba3 pinctrl: ingenic: Enhance support for IRQ_TYPE_EDGE_BOTH
Ingenic SoCs don't natively support registering an interrupt for both
rising and falling edges. This has to be emulated in software.

Until now, this was emulated by switching back and forth between
IRQ_TYPE_EDGE_RISING and IRQ_TYPE_EDGE_FALLING according to the level of
the GPIO. While this worked most of the time, when used with GPIOs that
need debouncing, some events would be lost. For instance, between the
time a falling-edge interrupt happens and the interrupt handler
configures the hardware for rising-edge, the level of the pin may have
already risen, and the rising-edge event is lost.

To address that issue, instead of switching back and forth between
IRQ_TYPE_EDGE_RISING and IRQ_TYPE_EDGE_FALLING, we now switch back and
forth between IRQ_TYPE_LEVEL_LOW and IRQ_TYPE_LEVEL_HIGH. Since we
always switch in the interrupt handler, they actually permit to detect
level changes. In the example above, if the pin level rises before
switching the IRQ type from IRQ_TYPE_LEVEL_LOW to IRQ_TYPE_LEVEL_HIGH,
a new interrupt will raise as soon as the handler exits, and the
rising-edge event will be properly detected.

Fixes: e72394e2ea ("pinctrl: ingenic: Merge GPIO functionality")
Reported-by: João Henrique <johnnyonflame@hotmail.com>
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Tested-by: João Henrique <johnnyonflame@hotmail.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20200622214548.265417-1-paul@crapouillou.net
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2020-07-07 14:21:02 +02:00
..
actions pinctrl: actions: fix function group name for i2c0_group 2020-04-16 13:10:05 +02:00
aspeed Linux 5.5-rc3 2019-12-29 00:30:37 +01:00
bcm pinctrl: bcm2835: Add support for wake-up interrupts 2020-06-03 14:16:38 +02:00
berlin pinctrl: berlin: as370: fix a typo s/spififib/spdifib 2019-10-16 14:12:55 +02:00
cirrus pinctrl: madera: Add missing call to pinctrl_unregister_mappings 2020-02-29 00:34:23 +01:00
freescale pinctrl: imx8dxl: Support building as module 2020-07-06 15:53:25 +02:00
intel pinctrl: intel: Move npins closer to pin_base in struct intel_community 2020-04-22 14:20:00 +03:00
mediatek This is the bulk of pin control changes for the v5.8 2020-06-07 16:13:43 -07:00
meson pinctrl: meson: fix drive strength register and bit calculation 2020-07-07 13:15:11 +02:00
mvebu Revert "pinctrl: mvebu: armada-37xx: use use platform api" 2020-03-26 00:20:38 +01:00
nomadik pinctrl: db8500: Fix some old bugs 2020-04-28 16:33:08 +02:00
nuvoton pinctrl: nuvoton: npcm7xx: constify copied structure 2020-01-07 13:55:55 +01:00
pxa pinctrl: pxa: pxa2xx: Remove 'pxa2xx_pinctrl_exit()' which is unused and broken 2020-06-04 00:05:13 +02:00
qcom pinctrl: qcom: spmi-gpio: Add pm660(l) compatibility 2020-07-07 14:01:24 +02:00
samsung pinctrl: samsung: Save/restore eint_mask over suspend for EINT_TYPE GPIOs 2020-04-28 11:38:11 +02:00
sh-pfc pinctrl: sh-pfc: r8a77970: Add RPC pins, groups, and functions 2020-06-22 16:58:23 +02:00
sirf pinctrl: sirf: add missing put_device() call in sirfsoc_gpio_probe() 2020-06-03 14:32:28 +02:00
spear pinctrl: use devm_platform_ioremap_resource() to simplify code 2019-11-05 15:33:40 +01:00
sprd pinctrl: sprd: Fix the incorrect pull-up definition 2020-06-04 00:15:20 +02:00
stm32 pinctrl: stm32: add possibility to configure pins individually 2020-06-20 23:08:00 +02:00
sunxi pinctrl: sunxi: handle probe defferal 2020-04-16 10:23:02 +02:00
tegra pinctrl: fix several typos 2020-04-28 13:26:49 +02:00
ti pinctl: ti: iodelay: fix error checking on pinctrl_count_index_with_args call 2019-10-04 23:08:47 +02:00
uniphier pinctrl: uniphier: Replace zero-length array with flexible-array member 2020-02-21 15:36:24 +01:00
vt8500 pinctrl: Use new GPIO_LINE_DIRECTION 2020-02-21 15:19:42 +01:00
zte pinctrl: fix several typos 2020-04-28 13:26:49 +02:00
core.c This is the bulk of pin control changes for the v5.7 kernel cycle. 2020-04-02 15:47:18 -07:00
core.h pinctrl: Allow modules to use pinctrl_[un]register_mappings 2019-12-30 14:27:17 +01:00
devicetree.c This is the bulk of GPIO development for the v5.7 kernel cycle. 2020-04-04 10:27:00 -07:00
devicetree.h pinctrl: devicetree.c: remove orphan pinctrl_dt_has_hogs() 2019-10-04 23:26:23 +02:00
Kconfig pinctrl: at91-pio4: Add COMPILE_TEST support 2020-05-25 13:40:48 +02:00
Makefile pinctrl: mcp23s08: Split to three parts: core, I²C, SPI 2020-04-16 14:21:23 +02:00
pinconf-generic.c pinctrl: Export some needed symbols at module load time 2020-02-29 00:25:01 +01:00
pinconf.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
pinconf.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 194 2019-05-30 11:29:22 -07:00
pinctrl-amd.c pinctrl: Use new GPIO_LINE_DIRECTION 2020-02-21 15:19:42 +01:00
pinctrl-amd.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
pinctrl-artpec6.c pinctrl: artpec6: fix __iomem on reg in set 2020-01-07 13:57:17 +01:00
pinctrl-as3722.c
pinctrl-at91-pio4.c pinctrl: Fix return value about devm_platform_ioremap_resource() 2020-05-25 13:40:47 +02:00
pinctrl-at91.c pinctrl: at91: Make use of for_each_requested_gpio() 2020-06-20 23:13:27 +02:00
pinctrl-at91.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
pinctrl-axp209.c pinctrl: Use new GPIO_LINE_DIRECTION 2020-02-21 15:19:42 +01:00
pinctrl-bm1880.c pinctrl: bm1880: add pwm37 to bm1880_pctrl_groups 2020-04-28 16:28:37 +02:00
pinctrl-coh901.c pinctrl: use devm_platform_ioremap_resource() to simplify code 2019-11-05 15:33:40 +01:00
pinctrl-coh901.h
pinctrl-da850-pupd.c pinctrl: use devm_platform_ioremap_resource() to simplify code 2019-11-05 15:33:40 +01:00
pinctrl-da9062.c pinctrl: da9062: Fix error gpiolib.h path 2020-02-28 14:15:53 +01:00
pinctrl-digicolor.c pinctrl: use devm_platform_ioremap_resource() to simplify code 2019-11-05 15:33:40 +01:00
pinctrl-equilibrium.c pinctrl: Fix warning by adding missing MODULE_LICENSE 2019-11-28 09:12:43 +01:00
pinctrl-equilibrium.h pinctrl: Add pinmux & GPIO controller driver for a new SoC 2019-11-21 14:47:44 +01:00
pinctrl-falcon.c pinctrl: falcon: fix syntax error 2020-03-09 13:52:37 +01:00
pinctrl-gemini.c
pinctrl-ingenic.c pinctrl: ingenic: Enhance support for IRQ_TYPE_EDGE_BOTH 2020-07-07 14:21:02 +02:00
pinctrl-lantiq.c pinctrl: fix several typos 2020-04-28 13:26:49 +02:00
pinctrl-lantiq.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 332 2019-06-05 17:37:06 +02:00
pinctrl-lpc18xx.c pinctrl: use devm_platform_ioremap_resource() to simplify code 2019-11-05 15:33:40 +01:00
pinctrl-max77620.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
pinctrl-mcp23s08_i2c.c pinctrl: mcp23s08: Split to three parts: core, I²C, SPI 2020-04-16 14:21:23 +02:00
pinctrl-mcp23s08_spi.c pinctrl: mcp23s08: Split to three parts: core, I²C, SPI 2020-04-16 14:21:23 +02:00
pinctrl-mcp23s08.c pinctrl: mcp23s08: add module license 2020-04-17 12:24:59 +02:00
pinctrl-mcp23s08.h pinctrl: mcp23s08: Split to three parts: core, I²C, SPI 2020-04-16 14:21:23 +02:00
pinctrl-ocelot.c pinctrl: ocelot: Add Sparx5 SoC support 2020-07-07 13:58:21 +02:00
pinctrl-oxnas.c pinctrl: Use new GPIO_LINE_DIRECTION 2020-02-21 15:19:42 +01:00
pinctrl-palmas.c
pinctrl-pic32.c pinctrl: Use new GPIO_LINE_DIRECTION 2020-02-21 15:19:42 +01:00
pinctrl-pic32.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 445 2019-06-05 17:37:18 +02:00
pinctrl-pistachio.c pinctrl: Use new GPIO_LINE_DIRECTION 2020-02-21 15:19:42 +01:00
pinctrl-rk805.c pinctrl: rk805: Constify rk805_gpio_cfgs 2020-05-12 13:35:33 +02:00
pinctrl-rockchip.c pinctrl: rockchip: fix memleak in rockchip_dt_node_to_map 2020-05-12 19:45:33 +02:00
pinctrl-rza1.c pinctrl: rza1: Fix flag name in comment 2020-05-15 10:47:06 +02:00
pinctrl-rza2.c pinctrl: Use new GPIO_LINE_DIRECTION 2020-02-21 15:19:42 +01:00
pinctrl-rzn1.c pinctrl: rzn1: Make array reg_drive static, makes object smaller 2019-10-14 12:11:12 +02:00
pinctrl-single.c pinctrl: single: fix function name in documentation 2020-07-07 13:12:37 +02:00
pinctrl-st.c pinctrl: Use new GPIO_LINE_DIRECTION 2020-02-21 15:19:42 +01:00
pinctrl-stmfx.c pinctrl: stmfx: stmfx_pinconf_set doesn't require to get direction anymore 2020-04-28 14:49:11 +02:00
pinctrl-sx150x.c pinctrl: fix several typos 2020-04-28 13:26:49 +02:00
pinctrl-tb10x.c pinctrl: use devm_platform_ioremap_resource() to simplify code 2019-11-05 15:33:40 +01:00
pinctrl-u300.c pinctrl: use devm_platform_ioremap_resource() to simplify code 2019-11-05 15:33:40 +01:00
pinctrl-utils.c
pinctrl-utils.h
pinctrl-xway.c pinctrl: use devm_platform_ioremap_resource() to simplify code 2019-11-05 15:33:40 +01:00
pinctrl-zynq.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 2019-05-21 11:28:45 +02:00
pinmux.c pinctrl: pinmux: fix a possible null pointer in pinmux_can_be_used_for_gpio 2019-12-13 10:57:23 +01:00
pinmux.h pinctrl/gpio: Take MUX usage into account 2019-08-23 11:09:41 +02:00