This patch series adds support for basic GPIO operations(set, get, direction_output/input, set_config). There are two SIUL2 hardware modules: SIUL2_0 and SIUL2_1. However, this driver exports both as a single GPIO driver. This is because the interrupt registers are located only in SIUL2_1, even for GPIOs that are part of SIUL2_0. There are two gaps in the GPIO ranges: - 102-111(inclusive) are invalid - 123-143(inclusive) are invalid These will be excluded via the `gpio-reserved-ranges` property. Writing and reading GPIO values is done via the PGPDO/PGPDI registers(Parallel GPIO Pad Data Output/Input) which are 16 bit registers, each bit corresponding to a GPIO. Note that the PGPDO order is similar to a big-endian grouping of two registers: PGPDO1, PGPDO0, PGPDO3, PGPDO2, PGPDO5, PGPDO4, gap, PGPDO6. I have other patches for this driver: - interrupt support - power management callbacks which I plan to upstream after this series gets merged in order to simplify the review process. v5 -> v4 - fixed di_div error - fixed dt-bindings error - added Co-developed-by tags - added new MFD driver nxp-siul2.c - made the old pinctrl driver an MFD cell - added the GPIO driver in the existing SIUL2 pinctrl one - Switch from "devm_pinctrl_register" to "devm_pinctrl_register_and_init" v4 -> v3 - removed useless parentheses - added S32G3 fallback compatible - fixed comment alignment - fixed dt-bindings license - fixed modpost: "__udivdi3" - moved MAINTAINERS entry to have the new GPIO driver together with other files related to S32G v3 -> v2 - fix dt-bindings schema id - add maxItems to gpio-ranges - removed gpio label from dt-bindings example - added changelog for the MAINTAINERS commit and added separate entry for the SIUL2 GPIO driver - added guard(raw_spinlock_irqsave) in 'siul2_gpio_set_direction' - updated the description for 'devm_platform_get_and_ioremap_resource_byname' v2 -> v1 dt-bindings: - changed filename to match compatible - fixed commit messages - removed dt-bindings unnecessary properties descriptions - added minItems for the interrupts property driver: - added depends on ARCH_S32 || COMPILE_TEST to Kconfig - added select REGMAP_MMIO to Kconfig - remove unnecessary include - add of_node_put after `siul2_get_gpio_pinspec` - removed inline from function definitions - removed match data and moved the previous platdata definition to the top of the file to be visible - replace bitmap_set/clear with __clear_bit/set_bit and devm_bitmap_zalloc with devm_kzalloc - switched to gpiochip_generic_request/free/config - fixed dev_err format for size_t reported by kernel test robot - add platform_get_and_ioremap_resource_byname wrapper Andrei Stefanescu (7): dt-bindings: mfd: add support for the NXP SIUL2 module mfd: nxp-siul2: add support for NXP SIUL2 arm64: dts: s32g: make pinctrl part of mfd node pinctrl: s32: convert the driver into an mfd cell pinctrl: s32cc: change to "devm_pinctrl_register_and_init" pinctrl: s32cc: add driver for GPIO functionality MAINTAINERS: add MAINTAINER for NXP SIUL2 MFD driver .../devicetree/bindings/mfd/nxp,siul2.yaml | 191 +++++++ MAINTAINERS | 2 + arch/arm64/boot/dts/freescale/s32g2.dtsi | 26 +- arch/arm64/boot/dts/freescale/s32g3.dtsi | 26 +- drivers/mfd/Kconfig | 12 + drivers/mfd/Makefile | 1 + drivers/mfd/nxp-siul2.c | 411 +++++++++++++++ drivers/pinctrl/nxp/pinctrl-s32.h | 1 + drivers/pinctrl/nxp/pinctrl-s32cc.c | 498 ++++++++++++++---- drivers/pinctrl/nxp/pinctrl-s32g2.c | 23 +- include/linux/mfd/nxp-siul2.h | 55 ++ 11 files changed, 1086 insertions(+), 160 deletions(-) create mode 100644 Documentation/devicetree/bindings/mfd/nxp,siul2.yaml create mode 100644 drivers/mfd/nxp-siul2.c create mode 100644 include/linux/mfd/nxp-siul2.h -- 2.45.2