From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> Linus, Here's the main pull-request for this merge window from the GPIO subsystem. We have two new drivers, an assortment of updates and cleanups to many others, and first part of the big rework of the core GPIOLIB that's currently underway. Add to that some code shrink in the character device module and updates to DT bindings and that's pretty much it. There's a pull from Greg's branch for a new device property accessor that's used by one of the GPIO driver and another from Andy's Intel tree. The pinctrl commits in this PR have been Acked by Linus Walleij. Details are in the signed tag. Please pull, Bartosz Golaszewski The following changes since commit 861deac3b092f37b2c5e6871732f3e11486f7082: Linux 6.7-rc7 (2023-12-23 16:25:56 -0800) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git tags/gpio-updates-for-v6.8-rc1 for you to fetch changes up to 1979a28075470ef82472a5656ecc969f901e0d3b: gpiolib: replace the GPIO device mutex with a read-write semaphore (2024-01-04 10:29:16 +0100) ---------------------------------------------------------------- gpio updates for v6.8 Core GPIOLIB: - protect the global list of GPIO devices with a read-write semaphore as it is rarely modified but can be traversed by multiple readers at once - remove GPIO devices from the global list when they are *unregistered* and not when they are *released* (which only happens when the last reference is dropped) as this may lead to a successful lookup of an unregistered device - remove the unnecessary "extra_checks" switch - rename functions that are called with a lock taken - remove duplicate includes Character device handling: - use locking guards to reduce the code size - allocate the big linereq structure using the more suitable kvzalloc() - redulce the size of critical sections - improve documentation - move the debounce_period_us field out of struct gpio_desc New drivers: - Nuvoton NPCM SGPIO driver for BMC NPCM7xx/NPCM8xx - Realtek DHC (Digital Home Center) SoC GPIO driver Driver improvements: - replace gpiochip_is_requested() with a safer alternative in the form of gpiochip_dup_line_label() as the former returns a pointer to a string that can be deleted - implement the dbg_show() callback in gpio-sim - improve the coding style for local variables by removing unnecessary tabs - use generic device properties instead of OF variants in gpio-mmio - use the preferred coding style for __free() in gpio-mockup - reuse PM ops from the gpio-tangier in gpio-elkhartlake - rework PM and use cleanup helpers in gpio-tangier - fix the EIC configuration in gpio-pmic-eic-sprd - remove the unneeded call to platform_set_drvdata() in gpio-sifive - use generic GPIO helpers for driver callbacks in gpio-dwapb - add clock support on certain pins of gpio-ixp4xx - don't use the core-specific DEBUG_GPIO switch in drivers - kerneldoc improvements DT bindings: - add bindings for the new Realtek and Nuvoton devices - allow gpio-ranges in gpio-dwapb - support GPIO hogs in gpio-rockchip - describe the label property in gpio-zynqmp-modepin Other: - header cleanups - forward declarations cleanups ---------------------------------------------------------------- Andrei Coardos (1): gpio: sifive: remove unneeded call to platform_set_drvdata() Andy Shevchenko (4): Merge patch series "Use the standard _PM_OPS() export macro in Intel Tangier GPIO driver" device property: Implement device_is_big_endian() gpio: mmio: Make use of device properties gpio: mmio: Clean up headers Bartosz Golaszewski (30): gpio: mockup: initialize a managed pointer in place gpiolib: provide gpio_device_get_label() Merge branch 'gpio/device_get_label_for_pinctrl' into gpio/for-next gpio: sysfs: fix forward declaration of struct gpio_device gpio: sim: fix the email address in MODULE_AUTHOR() gpiolib: provide gpiochip_dup_line_label() gpio: wm831x: use gpiochip_dup_line_label() gpio: wm8994: use gpiochip_dup_line_label() gpio: stmpe: use gpiochip_dup_line_label() pinctrl: abx500: use gpiochip_dup_line_label() pinctrl: nomadik: use gpiochip_dup_line_label() pinctrl: baytrail: use gpiochip_dup_line_label() pinctrl: sppctl: use gpiochip_dup_line_label() gpiolib: use gpiochip_dup_line_label() in for_each helpers gpiolib: remove gpiochip_is_requested() Merge tag 'gpio-remove-gpiochip_is_requested-for-v6.8-rc1' into gpio/for-next gpio: sim: implement the dbg_show() callback gpiolib: allocate memory atomically with a spinlock held gpio: xilinx: remove excess kernel doc gpiolib: rename static functions that are called with the lock taken gpiolib: use a mutex to protect the list of GPIO devices Merge tag 'device_is_big_endian-6.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core into gpio/for-next Merge tag 'intel-gpio-v6.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel into gpio/for-next Merge tag 'v6.7-rc7' into gpio/for-next gpio: tps65219: don't use CONFIG_DEBUG_GPIO gpiolib: remove extra_checks gpiolib: drop tabs from local variable declarations gpio: sysfs: drop tabs from local variable declarations gpiolib: remove the GPIO device from the list when it's unregistered gpiolib: replace the GPIO device mutex with a read-write semaphore Emil Renner Berthing (2): dt-bindings: gpio: dwapb: allow gpio-ranges gpio: dwapb: Use generic request, free and set_config Heiko Stuebner (1): dt-bindings: gpio: rockchip: add a pattern for gpio hogs Jim Liu (2): dt-bindings: gpio: add NPCM sgpio driver bindings gpio: nuvoton: Add Nuvoton NPCM sgpio driver Kent Gibson (9): gpiolib: cdev: relocate debounce_period_us from struct gpio_desc gpiolib: remove debounce_period_us from struct gpio_desc gpiolib: cdev: fully adopt guard() and scoped_guard() gpiolib: cdev: improve documentation of get/set values gpiolib: cdev: reduce locking in gpio_desc_to_lineinfo() gpiolib: cdev: include overflow.h gpiolib: cdev: allocate linereq using kvzalloc() gpiolib: cdev: replace locking wrappers for config_mutex with guards gpiolib: cdev: replace locking wrappers for gpio_device with guards Linus Walleij (1): gpio: ixp4xx: Handle clock output on pin 14 and 15 Michal Simek (1): dt-bindings: gpio: modepin: Describe label property Raag Jadav (4): gpio: tangier: use EXPORT_NS_GPL_SIMPLE_DEV_PM_OPS() helper gpio: elkhartlake: reuse pm_ops from Intel Tangier driver gpio: tangier: unexport suspend/resume handles gpio: tangier: simplify locking using cleanup helpers Randy Dunlap (1): gpio: max730x: don't use kernel-doc marker for regular comment Rob Herring (1): dt-bindings: gpio: brcmstb: drop unneeded quotes Tzuyi Chang (2): dt-bindings: gpio: realtek: Add realtek,rtd-gpio gpio: rtd: Add support for Realtek DHC(Digital Home Center) RTD SoCs Wang Jinchao (1): gpiolib: remove duplicate inclusions Wenhua Lin (1): gpio: pmic-eic-sprd: Configure the bit corresponding to the EIC through offset .../bindings/gpio/brcm,brcmstb-gpio.yaml | 2 +- .../devicetree/bindings/gpio/nuvoton,sgpio.yaml | 87 +++ .../devicetree/bindings/gpio/realtek,rtd-gpio.yaml | 69 +++ .../bindings/gpio/rockchip,gpio-bank.yaml | 7 + .../devicetree/bindings/gpio/snps,dw-apb-gpio.yaml | 2 + .../bindings/gpio/xlnx,zynqmp-gpio-modepin.yaml | 3 + drivers/gpio/Kconfig | 20 + drivers/gpio/Makefile | 2 + drivers/gpio/gpio-dwapb.c | 13 +- drivers/gpio/gpio-elkhartlake.c | 14 +- drivers/gpio/gpio-ixp4xx.c | 51 +- drivers/gpio/gpio-max730x.c | 2 +- drivers/gpio/gpio-mmio.c | 53 +- drivers/gpio/gpio-mockup.c | 3 +- drivers/gpio/gpio-npcm-sgpio.c | 619 +++++++++++++++++++ drivers/gpio/gpio-pmic-eic-sprd.c | 19 +- drivers/gpio/gpio-rtd.c | 604 +++++++++++++++++++ drivers/gpio/gpio-sifive.c | 1 - drivers/gpio/gpio-sim.c | 24 +- drivers/gpio/gpio-stmpe.c | 6 +- drivers/gpio/gpio-tangier.c | 63 +- drivers/gpio/gpio-tangier.h | 4 +- drivers/gpio/gpio-tps65219.c | 18 +- drivers/gpio/gpio-wm831x.c | 14 +- drivers/gpio/gpio-wm8994.c | 13 +- drivers/gpio/gpio-xilinx.c | 1 - drivers/gpio/gpiolib-cdev.c | 667 ++++++++++----------- drivers/gpio/gpiolib-sysfs.c | 110 ++-- drivers/gpio/gpiolib-sysfs.h | 10 +- drivers/gpio/gpiolib.c | 274 +++++---- drivers/gpio/gpiolib.h | 7 +- drivers/pinctrl/intel/pinctrl-baytrail.c | 11 +- drivers/pinctrl/nomadik/pinctrl-abx500.c | 9 +- drivers/pinctrl/nomadik/pinctrl-nomadik.c | 6 +- drivers/pinctrl/sunplus/sppctl.c | 10 +- include/linux/gpio/driver.h | 43 +- include/linux/property.h | 26 + 37 files changed, 2185 insertions(+), 702 deletions(-) create mode 100644 Documentation/devicetree/bindings/gpio/nuvoton,sgpio.yaml create mode 100644 Documentation/devicetree/bindings/gpio/realtek,rtd-gpio.yaml create mode 100644 drivers/gpio/gpio-npcm-sgpio.c create mode 100644 drivers/gpio/gpio-rtd.c