linux/drivers/gpio
Matthias Schiffer 9d6a811b52 gpio: tqmx86: introduce shadow register for GPIO output value
The TQMx86 GPIO controller uses the same register address for input and
output data. Reading the register will always return current inputs
rather than the previously set outputs (regardless of the current
direction setting). Therefore, using a RMW pattern does not make sense
when setting output values. Instead, the previously set output register
value needs to be stored as a shadow register.

As there is no reliable way to get the current output values from the
hardware, also initialize all channels to 0, to ensure that stored and
actual output values match. This should usually not have any effect in
practise, as the TQMx86 UEFI sets all outputs to 0 during boot.

Also prepare for extension of the driver to more than 8 GPIOs by using
DECLARE_BITMAP.

Fixes: b868db94a6 ("gpio: tqmx86: Add GPIO from for this IO controller")
Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/d0555933becd45fa92a85675d26e4d59343ddc01.1717063994.git.matthias.schiffer@ew.tq-group.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
2024-06-03 14:13:13 +02:00
..
gpio-74x164.c gpio: 74x164: Enable output pins after registers are reset 2024-03-01 08:23:08 +01:00
gpio-74xx-mmio.c gpio: 74xx-mmio: remove unneeded platform_set_drvdata() call 2023-07-29 16:03:17 +02:00
gpio-104-dio-48e.c gpio: 104-dio-48e: Add Counter/Timer support 2023-07-27 09:37:33 +02:00
gpio-104-idi-48.c gpio: 104-idi-48: Enable use_raw_spinlock for idi48_regmap_config 2023-04-11 21:08:31 +02:00
gpio-104-idio-16.c gpio: 104-idio-16: Migrate to the regmap API 2023-08-11 14:23:29 +02:00
gpio-adnp.c gpio: Switch i2c drivers back to use .probe() 2023-05-23 10:09:11 +02:00
gpio-adp5520.c
gpio-aggregator.c gpio: aggregator: Set up a parser of delay line parameters 2023-06-16 11:02:07 +02:00
gpio-altera-a10sr.c gpio: altera-a10sr: remove redundant of_match_ptr 2023-08-03 15:58:45 +02:00
gpio-altera.c gpio: altera: Convert to platform remove callback returning void 2023-10-02 08:53:57 +02:00
gpio-amd8111.c gpio: amd8111: Fix PCI device reference count leak 2022-11-30 17:18:35 +01:00
gpio-amd-fch.c
gpio-amdpt.c gpio: amdpt: Convert to platform remove callback returning void 2023-10-02 08:54:09 +02:00
gpio-arizona.c gpio: arizona: Remove unused header(s) 2022-10-19 17:03:55 +03:00
gpio-aspeed-sgpio.c gpio: aspeed-sgpio: Convert to immutable irq_chip 2023-03-10 16:17:20 +01:00
gpio-aspeed.c treewide: rename pinctrl_gpio_set_config_new() 2023-11-04 10:23:22 +01:00
gpio-ath79.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-bcm-kona.c gpio: bcm-kona: Drop unused pdev member in private data structure 2023-07-19 13:26:22 +02:00
gpio-bd9571mwv.c
gpio-bd71815.c
gpio-bd71828.c
gpio-brcmstb.c gpio: brcmstb: add support for gpio-ranges 2024-04-26 09:32:54 +02:00
gpio-bt8xx.c
gpio-cadence.c gpio: cadence: Convert to platform remove callback returning void 2023-10-02 08:54:26 +02:00
gpio-clps711x.c gpio: clps711x: remove redundant of_match_ptr() 2023-08-03 15:58:46 +02:00
gpio-creg-snps.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-cros-ec.c gpio: cros-ec: provide ID table for avoiding fallback match 2024-04-02 10:58:21 +02:00
gpio-crystalcove.c gpio: crystalcove: Use -ENOTSUPP consistently 2024-04-05 20:12:39 +03:00
gpio-cs5535.c
gpio-da9052.c gpio: da9052: Remove unused header(s) 2022-10-19 17:03:55 +03:00
gpio-da9055.c
gpio-davinci.c gpio: Use device_get_match_data() 2023-10-09 09:08:08 +02:00
gpio-dln2.c gpio: dln2: Convert to platform remove callback returning void 2023-10-02 08:54:31 +02:00
gpio-ds4520.c gpio: ds4520: Add ADI DS4520 GPIO Expander Support 2023-07-29 15:56:33 +02:00
gpio-dwapb.c gpio: dwapb: Use generic request, free and set_config 2024-01-02 14:16:17 +01:00
gpio-eic-sprd.c Linux 6.8-rc4 2024-02-12 10:12:41 +01:00
gpio-elkhartlake.c gpio: elkhartlake: reuse pm_ops from Intel Tangier driver 2023-11-13 17:59:48 +02:00
gpio-em.c pinctrl: em: drop the wrapper around pinctrl_gpio_request() 2023-11-04 10:23:23 +01:00
gpio-en7523.c gpio: EN7523: fix kernel-doc warnings 2024-01-15 23:15:35 +01:00
gpio-ep93xx.c gpio: ep93xx: remove unused variable 2023-01-27 14:05:38 +01:00
gpio-exar.c gpio: exar: remove unneeded platform_set_drvdata() call 2023-07-29 16:04:38 +02:00
gpio-f7188x.c gpio-f7188x: fix base values conflicts with other gpio pins 2023-09-11 09:03:44 +02:00
gpio-ftgpio010.c gpio: ftgpio010: Convert to platform remove callback returning void 2023-10-02 08:54:36 +02:00
gpio-fxl6408.c gpio: fx6408: Convert to use maple tree register cache 2023-10-02 08:58:01 +02:00
gpio-ge.c gpio: ge: Replace GPLv2 boilerplate with SPDX 2023-07-27 09:33:07 +02:00
gpio-gpio-mm.c gpio: gpio-mm: Migrate to regmap API 2023-01-30 15:55:28 +01:00
gpio-graniterapids.c gpio: Add Intel Granite Rapids-D vGPIO driver 2024-04-25 14:57:28 +03:00
gpio-grgpio.c gpio: grgpio: Convert to platform remove callback returning void 2023-10-02 08:54:41 +02:00
gpio-gw-pld.c gpio: Switch i2c drivers back to use .probe() 2023-05-23 10:09:11 +02:00
gpio-hisi.c gpio: hisi: Fix format specifier 2023-10-13 08:39:30 +02:00
gpio-hlwd.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-htc-egpio.c
gpio-i8255.c gpio: i8255: Remove unused legacy interface 2023-01-30 15:55:28 +01:00
gpio-i8255.h gpio: i8255: Remove unused legacy interface 2023-01-30 15:55:28 +01:00
gpio-ich.c gpio: ich: Use devm_gpiochip_add_data() to simplify remove path 2023-03-09 16:08:39 +02:00
gpio-idio-16.c gpio: idio-16: Remove unused legacy interface 2023-08-11 14:23:32 +02:00
gpio-idio-16.h gpio: idio-16: Remove unused legacy interface 2023-08-11 14:23:32 +02:00
gpio-idt3243x.c gpio: idt3243x: Convert to immutable irq_chip 2023-03-10 16:17:30 +01:00
gpio-imx-scu.c gpio: imx-scu: Use ARRAY_SIZE for array length 2023-08-11 16:20:02 +02:00
gpio-it87.c
gpio-ixp4xx.c gpio: ixp4xx: Handle clock output on pin 14 and 15 2023-12-01 10:48:32 +01:00
gpio-janz-ttl.c
gpio-kempld.c
gpio-latch.c gpio: Add gpio latch driver 2022-10-26 14:52:01 +02:00
gpio-ljca.c gpio: update Intel LJCA USB GPIO driver 2023-10-11 11:33:38 +02:00
gpio-logicvc.c gpio: logicvc: remove unneeded platform_set_drvdata() call 2023-07-29 16:05:50 +02:00
gpio-loongson1.c gpio: loongson1: Add DT support 2023-03-23 14:31:18 +01:00
gpio-loongson-64bit.c gpio: loongson: add more gpio chip support 2023-09-27 09:06:50 +02:00
gpio-loongson.c
gpio-lp873x.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_319.RULE 2022-06-10 14:51:36 +02:00
gpio-lp3943.c gpio: lp3943: remove unneeded platform_set_drvdata() call 2023-08-01 21:14:48 +02:00
gpio-lp87565.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_319.RULE 2022-06-10 14:51:36 +02:00
gpio-lpc18xx.c gpio: lpc18xx: Convert to platform remove callback returning void 2023-10-02 08:54:50 +02:00
gpio-lpc32xx.c gpio: lpc32xx: fix module autoloading 2024-04-12 21:30:58 +02:00
gpio-madera.c
gpio-max730x.c gpio: max730x: don't use kernel-doc marker for regular comment 2023-12-07 09:24:08 +01:00
gpio-max732x.c gpio: max732x: remove redundant CONFIG_OF and of_match_ptr() 2023-08-03 15:56:30 +02:00
gpio-max3191x.c gpio: max3191x: remove redundant of_match_ptr() 2023-08-03 15:58:50 +02:00
gpio-max7300.c gpio: Switch i2c drivers back to use .probe() 2023-05-23 10:09:11 +02:00
gpio-max7301.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
gpio-max77620.c gpio: max77620: remove unneeded platform_set_drvdata() call 2023-08-01 21:15:23 +02:00
gpio-max77650.c
gpio-mb86s7x.c gpio: mb86s7x: Convert to platform remove callback returning void 2023-10-02 08:54:55 +02:00
gpio-mc33880.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
gpio-menz127.c gpio: use raw spinlock for gpio chip shadowed data 2022-04-25 12:10:02 +02:00
gpio-merrifield.c gpio: merrifield: Utilise temporary variable for struct device 2023-03-06 17:10:46 +02:00
gpio-ml-ioh.c gpio: ml-ioh: Convert to use managed functions pcim* and devm_* 2022-05-20 19:20:35 +02:00
gpio-mlxbf2.c gpio: mlxbf2: Convert to immutable irq_chip 2023-03-10 16:17:32 +01:00
gpio-mlxbf3.c gpio: mlxbf3: add an error code check in mlxbf3_gpio_probe 2024-01-15 11:11:29 +01:00
gpio-mlxbf.c
gpio-mm-lantiq.c gpio: mm-lantiq: Convert to platform remove callback returning void 2023-10-02 08:55:00 +02:00
gpio-mmio.c gpio: mmio: Clean up headers 2023-12-18 13:43:06 +01:00
gpio-mockup.c gpio: mockup: initialize a managed pointer in place 2023-11-20 14:24:50 +01:00
gpio-moxtet.c
gpio-mpc8xxx.c gpio: mpc8xxx: Convert to platform remove callback returning void 2023-10-02 08:55:09 +02:00
gpio-mpc5200.c gpio: mpc5200: Convert to platform remove callback returning void 2023-10-02 08:55:04 +02:00
gpio-msc313.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-mt7621.c gpio updates for v6.1-rc1 2022-10-08 09:46:29 -07:00
gpio-mvebu.c gpio: mvebu: Make use of devm_pwmchip_alloc() function 2024-02-22 14:39:28 +01:00
gpio-mxc.c gpio: mxc: Use helper function devm_clk_get_optional_enabled() 2023-08-21 14:11:16 +02:00
gpio-mxs.c gpio: mxs: fix Wvoid-pointer-to-enum-cast warning 2023-08-11 16:21:46 +02:00
gpio-nomadik.c drivers/gpio/nomadik: move dummy nmk_gpio_dbg_show_one() to header 2024-03-12 12:53:35 +01:00
gpio-npcm-sgpio.c gpio: nuvoton: Fix sgpio irq handle error 2024-05-07 09:44:33 +02:00
gpio-octeon.c
gpio-omap.c OMAP/gpio: drop MPUIO static base 2023-10-04 11:37:25 +02:00
gpio-palmas.c gpio: palmas: remove unnecessary call to platform_set_drvdata() 2023-08-01 21:22:38 +02:00
gpio-pca953x.c gpiolib: acpi: Pass con_id instead of property into acpi_dev_gpio_irq_get_by() 2024-04-15 16:12:18 +03:00
gpio-pca9570.c gpio: pca9570: fix kerneldoc 2023-08-21 10:39:58 +02:00
gpio-pcf857x.c gpio: pcf857x: Extend match data support for OF tables 2023-08-22 11:41:17 +02:00
gpio-pch.c gpio: pch: Change PCI device macros 2022-06-21 18:01:11 +03:00
gpio-pci-idio-16.c gpio: pci-idio-16: Migrate to the regmap API 2023-08-11 14:23:31 +02:00
gpio-pcie-idio-24.c gpio: pcie-idio-24: Use -ENOTSUPP consistently 2024-04-12 21:36:18 +02:00
gpio-pisosr.c gpio: pisosr: Use devm_gpiochip_add_data() to simplify remove path 2023-07-20 17:22:10 +02:00
gpio-pl061.c gpio: pl061: Add missing header(s) 2022-10-24 12:29:26 +03:00
gpio-pmic-eic-sprd.c gpio: pmic-eic-sprd: Configure the bit corresponding to the EIC through offset 2024-01-03 09:50:47 +01:00
gpio-pxa.c treewide: rename pinctrl_gpio_direction_output_new() 2023-11-04 10:23:22 +01:00
gpio-raspberrypi-exp.c gpio: raspberrypi-exp: remove redundant of_match_ptr() 2023-08-03 15:58:52 +02:00
gpio-rc5t583.c gpio: rc5t583: remove unneeded call to platform_set_drvdata() 2023-08-01 21:26:48 +02:00
gpio-rcar.c treewide: rename pinctrl_gpio_free_new() 2023-11-04 10:23:21 +01:00
gpio-rda.c gpio: rda: Convert to immutable irq_chip 2023-03-23 14:31:18 +01:00
gpio-rdc321x.c
gpio-realtek-otto.c gpio: realtek-otto: switch to 32-bit I/O 2022-08-31 17:46:30 +02:00
gpio-reg.c gpio: reg: Add missing header(s) 2023-03-06 12:33:02 +02:00
gpio-regmap.c gpio: regmap: Use -ENOTSUPP consistently 2024-04-12 21:36:40 +02:00
gpio-rockchip.c treewide: rename pinctrl_gpio_direction_output_new() 2023-11-04 10:23:22 +01:00
gpio-rtd.c gpio: rtd: Fix signedness bug in probe 2024-01-15 11:07:46 +01:00
gpio-sa1100.c gpio: sa1100: include <mach/generic.h> 2023-05-17 11:56:24 +02:00
gpio-sama5d2-piobu.c gpio: sama5d2-piobu: remove unneeded call to platform_set_drvdata() 2023-08-01 21:27:38 +02:00
gpio-sch311x.c gpio: sch311x: Use devm_gpiochip_add_data() to simplify remove path 2023-05-17 11:52:14 +02:00
gpio-sch.c gpio: sch: Utilise temporary variable for struct device 2024-04-15 16:12:18 +03:00
gpio-sifive.c gpio: sifive: remove unneeded call to platform_set_drvdata() 2023-11-15 15:39:40 +01:00
gpio-sim.c gpio: sim: use for_each_hwgpio() 2024-02-26 16:43:51 +01:00
gpio-siox.c gpio: siox: Convert to immutable irq_chip 2023-03-23 14:31:18 +01:00
gpio-sl28cpld.c gpio: sl28cpld: Replace irqchip mask_invert with unmask_base 2022-11-15 15:41:45 +01:00
gpio-sodaville.c
gpio-spear-spics.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
gpio-sprd.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-stmpe.c gpio: stmpe: use gpiochip_dup_line_label() 2023-12-08 09:26:28 +01:00
gpio-stp-xway.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-syscon.c gpio: syscon: remove unneeded call to platform_set_drvdata() 2023-08-03 15:44:49 +02:00
gpio-tangier.c gpio: tangier: Use correct type for the IRQ chip data 2024-04-12 23:41:05 +03:00
gpio-tangier.h gpio: tangier: unexport suspend/resume handles 2023-11-13 17:59:48 +02:00
gpio-tb10x.c gpio updates for v6.7-rc1 2023-10-31 17:21:54 -10:00
gpio-tc3589x.c gpio: tc3589x: Make irqchip immutable 2022-10-03 20:56:46 +02:00
gpio-tegra186.c gpio: tegra186: Fix tegra186_gpio_is_accessible() check 2024-04-24 15:31:41 +02:00
gpio-tegra.c pinctrl: tegra: drop the wrapper around pinctrl_gpio_request() 2023-11-04 10:23:23 +01:00
gpio-thunderx.c gpio: thunderx: Convert to immutable irq_chip 2023-03-23 14:31:18 +01:00
gpio-timberdale.c gpio: timberdale: Fix potential deadlock on &tgpio->lock 2023-09-27 08:51:28 +02:00
gpio-tn48m.c gpio: Add Delta TN48M CPLD GPIO driver 2022-02-25 09:59:35 +01:00
gpio-tpic2810.c gpio: Switch i2c drivers back to use .probe() 2023-05-23 10:09:11 +02:00
gpio-tps6586x.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-tps65086.c gpio: tps65086: Use devm_gpiochip_add_data() to simplify remove path 2023-05-17 11:40:40 +02:00
gpio-tps65218.c gpio: tps65218: remove redundant of_match_ptr() 2023-08-03 15:55:34 +02:00
gpio-tps65219.c gpio: tps65219: don't use CONFIG_DEBUG_GPIO 2023-12-27 15:56:48 +01:00
gpio-tps65910.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-tps65912.c
gpio-tps68470.c gpio: tps68470: Make tps68470_gpio_output() always set the initial value 2023-07-19 13:22:13 +02:00
gpio-tqmx86.c gpio: tqmx86: introduce shadow register for GPIO output value 2024-06-03 14:13:13 +02:00
gpio-ts4800.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-ts4900.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-ts5500.c gpio: ts5500: Convert to platform remove callback returning void 2023-10-02 08:55:27 +02:00
gpio-twl4030.c This removes all usage of global GPIO numbers from 2023-05-31 17:01:34 +02:00
gpio-twl6040.c
gpio-uniphier.c gpio: uniphier: Convert to platform remove callback returning void 2023-10-02 08:55:32 +02:00
gpio-vf610.c treewide: rename pinctrl_gpio_direction_output_new() 2023-11-04 10:23:22 +01:00
gpio-viperboard.c
gpio-virtio.c gpio: virtio: drop owner assignment 2024-05-22 08:31:17 -04:00
gpio-visconti.c gpio: visconti: Convert to immutable irq_chip 2023-03-23 14:31:18 +01:00
gpio-vx855.c gpio: vx855: remove unneeded call to platform_set_drvdata() 2023-08-03 15:48:15 +02:00
gpio-wcd934x.c gpio: Explicitly include correct DT includes 2023-07-19 13:24:01 +02:00
gpio-wcove.c gpio: wcove: Use -ENOTSUPP consistently 2024-04-05 20:12:03 +03:00
gpio-winbond.c gpio: winbond: Fix error code in winbond_gpio_get() 2022-06-23 16:29:55 +02:00
gpio-wm831x.c gpio: wm831x: use gpiochip_dup_line_label() 2023-12-08 09:26:20 +01:00
gpio-wm8350.c gpio: wm8350: Remove unused header(s) 2022-10-24 12:29:41 +03:00
gpio-wm8994.c gpio: wm8994: use gpiochip_dup_line_label() 2023-12-08 09:26:25 +01:00
gpio-ws16c48.c gpio updates for v6.6 2023-08-29 10:21:56 -07:00
gpio-xgene-sb.c gpio: xgene-sb: Convert to platform remove callback returning void 2023-10-02 08:55:38 +02:00
gpio-xgene.c
gpio-xgs-iproc.c gpio: xgs-iproc: Convert to platform remove callback returning void 2023-10-02 08:55:42 +02:00
gpio-xilinx.c gpio: xilinx: remove excess kernel doc 2023-12-18 09:56:21 +01:00
gpio-xlp.c gpio: xlp: Convert to immutable irq_chip 2023-03-23 14:31:19 +01:00
gpio-xra1403.c gpio: xra1403: remove redundant of_match_ptr() 2023-08-03 15:58:54 +02:00
gpio-xtensa.c
gpio-zevio.c gpio: zevio: remove unneeded call to platform_set_drvdata() 2023-08-03 15:48:27 +02:00
gpio-zynq.c gpio: zynq: Convert to platform remove callback returning void 2023-10-02 08:55:50 +02:00
gpio-zynqmp-modepin.c
gpiolib-acpi.c gpiolib: acpi: Fix failed in acpi_gpiochip_find() by adding parent node match 2024-05-21 18:46:45 +03:00
gpiolib-acpi.h gpio: acpi: Make acpi_gpio_count() take firmware node as a parameter 2024-03-01 09:08:34 +01:00
gpiolib-cdev.c gpiolib: cdev: fix uninitialised kfifo 2024-05-10 16:38:27 +02:00
gpiolib-cdev.h
gpiolib-devres.c gpiolib: Pass consumer device through to core in devm_fwnode_gpiod_get_index() 2024-02-27 14:17:38 +01:00
gpiolib-legacy.c gpiolib: Get rid of never false gpio_is_valid() calls 2024-04-17 22:46:44 +02:00
gpiolib-of.c gpio: of: support gpio-ranges for multiple gpiochip devices 2024-04-26 09:32:54 +02:00
gpiolib-of.h gpio: of: Make of_gpio_get_count() take firmware node as a parameter 2024-03-01 09:07:21 +01:00
gpiolib-swnode.c gpio: swnode: Add ability to specify native chip selects for SPI 2024-04-16 20:00:27 +09:00
gpiolib-swnode.h gpiolib: add support for software nodes 2022-11-15 11:21:43 +01:00
gpiolib-sysfs.c gpiolib: Get rid of never false gpio_is_valid() calls 2024-04-17 22:46:44 +02:00
gpiolib-sysfs.h gpiolib: revert the attempt to protect the GPIO device list with an rwsem 2024-01-17 09:52:37 +01:00
gpiolib.c gpio updates for v6.10-rc1 2024-05-14 15:07:07 -07:00
gpiolib.h gpio updates for v6.10-rc1 2024-05-14 15:07:07 -07:00
Kconfig gpio: tqmx86: fix typo in Kconfig label 2024-06-03 14:13:13 +02:00
Makefile gpio: Add Intel Granite Rapids-D vGPIO driver 2024-04-25 14:57:28 +03:00
TODO gpiolib: split of_mm_gpio_chip out of linux/of_gpio.h 2023-03-06 12:33:01 +02:00