From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> Linus, Here's the majority of changes for this merge window from the GPIO subsystem. We have three new drivers, support for some new models in existing ones and lots of various tweaks and improvements across the board (switching to using recommended APIs, code shrink and simplification, etc.). We also have a new feature in the character device uAPI where we now notify the user-space about changes triggered by in-kernel users as well, not only when they were done by other user-space agents. Details are in the signed tag as usual. The merge commits you'll see here were done to pull Intel changes from Andy, MFD dependencies from Lee and to pull back upstream fixes to avoid conflicts. The non-gpio commits in this PR are either pulled from the MFD tree or were acked by relevant maintainers and concern the removal of a deprecated GPIO symbol from various drivers across the kernel tree. I will be picking up some more fixes over the course of this week so there'll be another small PR in the second week. Please pull. Best Regards, Bartosz Golaszewski The following changes since commit 59b723cd2adbac2a34fc8e12c74ae26ae45bf230: Linux 6.12-rc6 (2024-11-03 14:05:52 -1000) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git tags/gpio-updates-for-v6.13-rc1 for you to fetch changes up to bef29ca3a6458582ac13320d47bf2646e5734dc8: gpio: tegra186: Allow to enable driver on Tegra234 (2024-11-18 11:45:06 +0100) ---------------------------------------------------------------- gpio updates for v6.13-rc1 GPIOLIB core: - use the new mem_is_zero() instead of memchr_inv(s, 0, n) - don't store debounce period twice needlessly - clean-up debugfs handling - remove leftover comments referring to no longer used spinlocks - unduplicate some operations like SRCU locks and initializing GPIO descriptors - constify the sysfs class struct - use lock guards in GPIO sysfs code - update GPIO uAPI internal flags all at once atomically for consistency with other places - modify the behavior of the sysfs interface by no longer exporting lines that are named inside the driver code or board files with the sysfs links bearing the line names as this has for many years been largely unused due to the prevalence of DT, ACPI and firmware nodes over board files and made the API inconsistent - for GPIO interrupt providers: free irqs that are still requested by users when removing the chip GPIO uAPI: - notify user-space about changes to GPIO lines' state (requested, released, reconfigured) triggered from the kernel as well (until now we'd only do this for changes triggered from user-space) - to that end: modify the internal workings of the notification mechanism by switching to an atomic notifier which allows us to send events from atomic context - also to that end store the debounce period in the GPIO descriptor struct and not in the character device context struct - while at it, also cover the corner-case of users introducing changes over sysfs while others watch them via the character device - don't report GPIO lines requested as interrupts as "used" to user-space as it can still request them as GPIOs New drivers: - add a driver for the GPIO functionality of the MFD Congatec Board Controller - add a driver for the PolarFire GPIO controller - add a driver supporting the GPIOs on FTDI FT2232H Driver improvements: - use generic device property accessors instead of OF-specific ones across many GPIO drivers (mpc8xxx, vf610, eic-sprd, davinci, ts4900, xilinx, mvebu) - use devres helpers to simplify error paths and either shrink or entirely remove the driver's remove() callback (grgpio, amdpt, menz127, max730x, ftgpio010, 74x164, ljca) - use helper variables to store the address of pdev->dev and avoid some line-breaks - use device_for_each_child_node_scoped() to avoid having to put the fwnode on breaks or errors (gpio-sim, gpio-dwapb, gpiolib-acpi) - use a scoped bitmap to simplify the code and drop goto labels in gpio-aggregator - drop unneeded Kconfig dependencies on OF_GPIO (grgpio, mveby, xilinx) - add support for new models to gpio-aspeed, gpio-rockchip and gpio-dwapb - clean-up ACPI handling and some other bits in gpio-xgene-sb - replace deprecated PCI functions in pcie-idio-24 and pci-idio-16 - allow to build davinci and mvebu drivers with COMPILE_TEST=y - remove dead code in gpio-mb86s7x - switch back to using platform_driver::remove() (after the conversion to remove_new()) across the GPIO drivers - remove remaining uses of GPIOF_ACTIVE_LOW across the tree and drop this deprecated symbol - convert the gpio-altera driver to no longer pull in the deprecated legacy-of-mm-gpiochip.h header - use of_property_present() instead of of_property_read_bool() in gpiolib-of and gpio-rockchip - allow to build the tegra186 driver on Tegra234 platforms in Kconfig Late fixes: - add a missing return value check after devm_kasprintf() to gpio-grgpio DT bindings: - document the ngpios property of gpio-mmio - add support for a new aspeed model - fix the example for st,nomadik-gpio Other: - kernel doc and comments tweaks - fix typos in TODO - reorder headers alphabetically in some drivers - fix incorrect format specifiers in gpio tools ---------------------------------------------------------------- Andy Shevchenko (13): gpio: xgene-sb: Remove unneeded definitions for properties gpio: xgene-sb: Drop ACPI_PTR() and CONFIG_ACPI guards gpio: xgene-sb: Tidy up ACPI and OF ID tables gpio: xgene-sb: don't use "proxy" headers gpio: mpsse: Check for error code from devm_mutex_init() call gpio: altera: Drop legacy-of-mm-gpiochip.h header Input: gpio_keys - avoid using GPIOF_ACTIVE_LOW Input: gpio_keys_polled - avoid using GPIOF_ACTIVE_LOW leds: gpio: Avoid using GPIOF_ACTIVE_LOW pcmcia: soc_common: Avoid using GPIOF_ACTIVE_LOW USB: gadget: pxa27x_udc: Avoid using GPIOF_ACTIVE_LOW gpio: Get rid of GPIOF_ACTIVE_LOW gpiolib: cdev: use !mem_is_zero() instead of memchr_inv(s, 0, n) Arnd Bergmann (1): gpiolib: avoid format string weakness in workqueue interface Bartosz Golaszewski (52): gpio: free irqs that are still requested when the chip is being removed gpio: sysfs: make the sysfs export behavior consistent gpio: aggregator: simplify aggr_parse() with scoped bitmap gpio: mvebu: allow building the module with COMPILE_TEST=y gpio: mvebu: use generic device properties gpio: xilinx: drop dependency on GPIO_OF gpio: xilinx: use helper variable to store the address of pdev->dev gpio: xilinx: use generic device properties gpiolib: use v2 defines for line state change events gpiolib: unify two loops initializing GPIO descriptors gpio: cdev: update flags at once when reconfiguring from user-space Merge tag 'ib-mfd-gpio-i2c-watchdog-v6.13' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/lee/mfd into gpio/for-next Merge tag 'v6.12-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into gpio/for-next gpio: mvebu: drop dependency on OF_GPIO gpio: ts4900: use generic device properties gpio: davinci: allow building the module with COMPILE_TEST=y gpio: davinci: use generic device properties gpio: eic-sprd: use generic device_get_match_data() gpio: vf610: use generic device_get_match_data() gpio: mpc8xxx: use a helper variable to store the address of pdev->dev gpio: mpc8xxx: use generic device_is_compatible() gpio: ljca: use devm_mutex_init() to simplify the error path and remove() gpio: sysfs: constify gpio class gpio: fold the Kconfig prompt into the option type for GPIO CDEV gpio: amdpt: remove remove() gpio: menz127: simplify error path and remove remove() gpio: 74x164: shrink code gpio: ftgpio010: shrink code gpio: max730x: use devres to shrink and simplify code gpiolib: notify user-space when a driver requests its own desc gpiolib: unduplicate chip guard in set_config path gpio: cdev: go back to storing debounce period in the GPIO descriptor gpio: cdev: prepare gpio_desc_to_lineinfo() for being called from atomic gpiolib: add a per-gpio_device line state notification workqueue gpio: cdev: put emitting the line state events on a workqueue gpiolib: switch the line state notifier to atomic gpiolib: notify user-space about in-kernel line state changes gpio: grgpio: drop Kconfig dependency on OF_GPIO gpio: grgpio: order headers alphabetically gpio: grgpio: use a helper variable to store the address of ofdev->dev gpio: grgpio: remove remove() gpiolib: fix a NULL-pointer dereference when setting direction gpiolib: remove leftover spinlock bits gpio: sysfs: demote warning messages on invalid user input to debug Merge tag 'v6.12-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into gpio/for-next gpio: sysfs: use cleanup guards for gpiod_data::mutex gpio: sysfs: use cleanup guards for the sysfs_lock mutex gpio: sysfs: emit chardev line-state events on GPIO export gpio: sysfs: emit chardev line-state events on active-low changes gpio: sysfs: emit chardev line-state events on edge store gpio: cdev: don't report GPIOs requested as interrupts as used Merge tag 'intel-gpio-v6.13-1' of git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel into gpio/for-next Billy Tsai (5): gpio: aspeed: Change the macro to support deferred probe gpio: aspeed: Remove the name for bank array gpio: aspeed: Create llops to handle hardware access dt-bindings: gpio: aspeed,ast2400-gpio: Support ast2700 gpio: aspeed: Support G7 Aspeed gpio controller Charles Han (1): gpio: grgpio: Add NULL check in grgpio_probe Conor Dooley (2): MAINTAINERS: add gpio driver to PolarFire entry gpio: mpfs: add CoreGPIO support Dan Carpenter (1): gpio: mb86s7x: remove some dead code in mb86s70_gpio_to_irq() Javier Carrasco (3): gpio: acpi: switch to device_for_each_child_node_scoped() gpio: dwapb: switch to device_for_each_child_node_scoped() gpio: sim: switch to device_for_each_child_node_scoped() Johan Hovold (1): gpiolib: clean up debugfs separator handling Kent Gibson (2): gpiolib: cdev: Fix reference to linereq_set_config_unlocked() gpiolib: cdev: remove redundant store of debounce_period_us Lars-Peter Clausen (1): gpio: tegra186: Allow to enable driver on Tegra234 Lewis Hanly (1): gpio: mpfs: add polarfire soc gpio support Linus Walleij (1): dt-bindings: gpio-mmio: Add ngpios property Luo Yifan (1): tools: gpio: Fix several incorrect format specifiers Mary Strodl (1): gpio: add support for FTDI's MPSSE as GPIO Rob Herring (Arm) (2): dt-bindings: gpio: st,nomadik-gpio: Add missing "#interrupt-cells" to example gpio: Use of_property_present() for non-boolean properties Shivam Chaudhary (1): Fix typos in GPIO TODO document Srikar Dronamraju (1): gpio: sloppy-logic-analyzer remove reference to rcu_momentary_dyntick_idle() Thomas Richard (5): mfd: Add Congatec Board Controller driver gpio: Congatec Board Controller gpio driver i2c: Congatec Board Controller i2c bus driver watchdog: Congatec Board Controller watchdog timer driver MAINTAINERS: Add entry for Congatec Board Controller Uwe Kleine-König (1): gpio: Switch back to struct platform_driver::remove() William Breathitt Gray (2): gpio: pci-idio-16: Replace deprecated PCI functions gpio: pcie-idio-24: Replace deprecated PCI functions Ye Zhang (3): gpio: rockchip: explan the format of the GPIO version ID gpio: rockchip: change the GPIO version judgment logic gpio: rockchip: support new version GPIO Yoshihiro Furudera (1): gpio: dwapb: Add ACPI HID for DWAPB GPIO controller on Fujitsu MONAKA .../bindings/gpio/aspeed,ast2400-gpio.yaml | 19 +- .../devicetree/bindings/gpio/gpio-mmio.yaml | 13 +- .../devicetree/bindings/gpio/st,nomadik-gpio.yaml | 1 + MAINTAINERS | 10 + drivers/gpio/Kconfig | 41 +- drivers/gpio/Makefile | 3 + drivers/gpio/TODO | 4 +- drivers/gpio/gpio-74x164.c | 21 +- drivers/gpio/gpio-aggregator.c | 16 +- drivers/gpio/gpio-altera.c | 178 +++--- drivers/gpio/gpio-amdpt.c | 10 +- drivers/gpio/gpio-aspeed.c | 618 +++++++++++++-------- drivers/gpio/gpio-brcmstb.c | 2 +- drivers/gpio/gpio-cadence.c | 2 +- drivers/gpio/gpio-cgbc.c | 196 +++++++ drivers/gpio/gpio-davinci.c | 10 +- drivers/gpio/gpio-dln2.c | 2 +- drivers/gpio/gpio-dwapb.c | 5 +- drivers/gpio/gpio-eic-sprd.c | 4 +- drivers/gpio/gpio-ftgpio010.c | 45 +- drivers/gpio/gpio-grgpio.c | 75 +-- drivers/gpio/gpio-ljca.c | 17 +- drivers/gpio/gpio-lpc18xx.c | 2 +- drivers/gpio/gpio-max730x.c | 17 +- drivers/gpio/gpio-mb86s7x.c | 4 +- drivers/gpio/gpio-menz127.c | 58 +- drivers/gpio/gpio-mm-lantiq.c | 2 +- drivers/gpio/gpio-mpc5200.c | 4 +- drivers/gpio/gpio-mpc8xxx.c | 56 +- drivers/gpio/gpio-mpfs.c | 188 +++++++ drivers/gpio/gpio-mpsse.c | 527 ++++++++++++++++++ drivers/gpio/gpio-mvebu.c | 8 +- drivers/gpio/gpio-omap.c | 2 +- drivers/gpio/gpio-pci-idio-16.c | 17 +- drivers/gpio/gpio-pcie-idio-24.c | 19 +- drivers/gpio/gpio-rcar.c | 2 +- drivers/gpio/gpio-rockchip.c | 28 +- drivers/gpio/gpio-sim.c | 7 +- drivers/gpio/gpio-sloppy-logic-analyzer.c | 2 +- drivers/gpio/gpio-tb10x.c | 2 +- drivers/gpio/gpio-ts4900.c | 6 +- drivers/gpio/gpio-ts5500.c | 2 +- drivers/gpio/gpio-uniphier.c | 2 +- drivers/gpio/gpio-vf610.c | 7 +- drivers/gpio/gpio-xgene-sb.c | 39 +- drivers/gpio/gpio-xgs-iproc.c | 2 +- drivers/gpio/gpio-xilinx.c | 51 +- drivers/gpio/gpio-zynq.c | 2 +- drivers/gpio/gpiolib-acpi.c | 4 +- drivers/gpio/gpiolib-cdev.c | 384 ++++++------- drivers/gpio/gpiolib-legacy.c | 3 - drivers/gpio/gpiolib-of.c | 2 +- drivers/gpio/gpiolib-sysfs.c | 182 +++--- drivers/gpio/gpiolib.c | 202 +++++-- drivers/gpio/gpiolib.h | 14 +- drivers/i2c/busses/Kconfig | 10 + drivers/i2c/busses/Makefile | 1 + drivers/i2c/busses/i2c-cgbc.c | 406 ++++++++++++++ drivers/input/keyboard/gpio_keys.c | 10 +- drivers/input/keyboard/gpio_keys_polled.c | 12 +- drivers/leds/leds-gpio.c | 9 +- drivers/mfd/Kconfig | 12 + drivers/mfd/Makefile | 1 + drivers/mfd/cgbc-core.c | 411 ++++++++++++++ drivers/pcmcia/soc_common.c | 12 +- drivers/usb/gadget/udc/pxa27x_udc.c | 7 +- drivers/watchdog/Kconfig | 10 + drivers/watchdog/Makefile | 1 + drivers/watchdog/cgbc_wdt.c | 211 +++++++ include/linux/gpio.h | 3 - include/linux/mfd/cgbc.h | 44 ++ tools/gpio/gpio-event-mon.c | 8 +- tools/gpio/gpio-sloppy-logic-analyzer.sh | 2 +- 73 files changed, 3245 insertions(+), 1064 deletions(-) create mode 100644 drivers/gpio/gpio-cgbc.c create mode 100644 drivers/gpio/gpio-mpfs.c create mode 100644 drivers/gpio/gpio-mpsse.c create mode 100644 drivers/i2c/busses/i2c-cgbc.c create mode 100644 drivers/mfd/cgbc-core.c create mode 100644 drivers/watchdog/cgbc_wdt.c create mode 100644 include/linux/mfd/cgbc.h