# SPDX-License-Identifier: GPL-2.0-only
#
# PINCTRL infrastructure and drivers
#

menuconfig PINCTRL
	bool "Pin controllers"

if PINCTRL

config GENERIC_PINCTRL_GROUPS
	bool

config PINMUX
	bool "Support pin multiplexing controllers" if COMPILE_TEST

config GENERIC_PINMUX_FUNCTIONS
	bool
	select PINMUX

config PINCONF
	bool "Support pin configuration controllers" if COMPILE_TEST

config GENERIC_PINCONF
	bool
	select PINCONF

config GENERIC_PINCTRL
	bool
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS

config DEBUG_PINCTRL
	bool "Debug PINCTRL calls"
	depends on DEBUG_KERNEL
	help
	  Say Y here to add some extra checks and diagnostics to PINCTRL calls.

config PINCTRL_AMD
	bool "AMD GPIO pin control"
	depends on HAS_IOMEM
	depends on ACPI || COMPILE_TEST
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	help
	  The driver for memory mapped GPIO functionality on AMD platforms
	  (x86 or arm). Most of the pins are usually muxed to some other
	  functionality by firmware, so only a small amount is available
	  for GPIO use.

	  Requires ACPI/FDT device enumeration code to set up a platform
	  device.

config PINCTRL_AMDISP
	tristate "AMDISP GPIO pin control"
	depends on DRM_AMD_ISP || COMPILE_TEST
	depends on HAS_IOMEM
	select GPIOLIB
	select PINCONF
	select GENERIC_PINCONF
	help
	  The driver for memory mapped GPIO functionality on AMD platforms
	  with ISP support. All the pins are output controlled only

	  Requires AMDGPU to MFD add device for enumeration to set up as
	  platform device.

config PINCTRL_APPLE_GPIO
	tristate "Apple SoC GPIO pin controller driver"
	depends on ARCH_APPLE
	select PINMUX
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	help
	  This is the driver for the GPIO controller found on Apple ARM SoCs,
	  including M1.

	  This driver can also be built as a module. If so, the module
	  will be called pinctrl-apple-gpio.

config PINCTRL_ARTPEC6
	bool "Axis ARTPEC-6 pin controller driver"
	depends on MACH_ARTPEC6
	select PINMUX
	select GENERIC_PINCONF
	help
	  This is the driver for the Axis ARTPEC-6 pin controller. This driver
	  supports pin function multiplexing as well as pin bias and drive
	  strength configuration. Device tree integration instructions can be
	  found in Documentation/devicetree/bindings/pinctrl/axis,artpec6-pinctrl.txt

config PINCTRL_AS3722
	tristate "Pinctrl and GPIO driver for ams AS3722 PMIC"
	depends on MFD_AS3722 && GPIOLIB
	select PINMUX
	select GENERIC_PINCONF
	help
	  AS3722 device supports the configuration of GPIO pins for different
	  functionality. This driver supports the pinmux, push-pull and
	  open drain configuration for the GPIO pins of AS3722 devices. It also
	  supports the GPIO functionality through gpiolib.

config PINCTRL_AT91
	bool "AT91 pinctrl driver"
	depends on (OF && ARCH_AT91) || COMPILE_TEST
	select PINMUX
	select PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to enable the at91 pinctrl driver

config PINCTRL_AT91PIO4
	bool "AT91 PIO4 pinctrl driver"
	depends on OF
	depends on HAS_IOMEM
	depends on ARCH_AT91 || COMPILE_TEST
	select PINMUX
	select GENERIC_PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to enable the at91 pinctrl/gpio driver for Atmel PIO4
	  controller available on sama5d2 SoC.

config PINCTRL_AXP209
	tristate "X-Powers AXP209 PMIC pinctrl and GPIO Support"
	depends on MFD_AXP20X
	depends on OF
	select PINMUX
	select GENERIC_PINCONF
	select GPIOLIB
	help
	  AXP PMICs provides multiple GPIOs that can be muxed for different
	  functions. This driver bundles a pinctrl driver to select the function
	  muxing and a GPIO driver to handle the GPIO when the GPIO function is
	  selected.
	  Say Y to enable pinctrl and GPIO support for the AXP209 PMIC.

config PINCTRL_AW9523
	tristate "Awinic AW9523/AW9523B I2C GPIO expander pinctrl driver"
	depends on OF && I2C
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select REGMAP
	select REGMAP_I2C
	help
	  The Awinic AW9523/AW9523B is a multi-function I2C GPIO
	  expander with PWM functionality. This driver bundles a
	  pinctrl driver to select the function muxing and a GPIO
	  driver to handle GPIO, when the GPIO function is selected.

	  Say yes to enable pinctrl and GPIO support for the AW9523(B).

config PINCTRL_BM1880
	bool "Bitmain BM1880 Pinctrl driver"
	depends on OF && (ARCH_BITMAIN || COMPILE_TEST)
	default ARCH_BITMAIN
	select PINMUX
	select GENERIC_PINCONF
	help
	  Pinctrl driver for Bitmain BM1880 SoC.

config PINCTRL_CY8C95X0
	tristate "Cypress CY8C95X0 I2C pinctrl and GPIO driver"
	depends on I2C
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select REGMAP_I2C
	help
	  Support for 20/40/60 pin Cypress Cy8C95x0 pinctrl/gpio I2C expander.
	  This driver can also be built as a module. If so, the module will be
	  called pinctrl-cy8c95x0.

config PINCTRL_DA850_PUPD
	tristate "TI DA850/OMAP-L138/AM18XX pull-up and pull-down groups"
	depends on OF && (ARCH_DAVINCI_DA850 || COMPILE_TEST)
	select PINCONF
	select GENERIC_PINCONF
	help
	  Driver for TI DA850/OMAP-L138/AM18XX pinconf. Used to control
	  pull-up and pull-down pin groups.

config PINCTRL_DA9062
	tristate "Dialog Semiconductor DA9062 PMIC pinctrl and GPIO Support"
	depends on MFD_DA9062
	select GPIOLIB
	help
	  The Dialog DA9062 PMIC provides multiple GPIOs that can be muxed for
	  different functions. This driver bundles a pinctrl driver to select the
	  function muxing and a GPIO driver to handle the GPIO when the GPIO
	  function is selected.

	  Say Y to enable pinctrl and GPIO support for the DA9062 PMIC.

config PINCTRL_DIGICOLOR
	bool
	depends on ARCH_DIGICOLOR || COMPILE_TEST
	select PINMUX
	select GENERIC_PINCONF

config PINCTRL_EIC7700
	tristate "EIC7700 PINCTRL driver"
	depends on ARCH_ESWIN || COMPILE_TEST
	select PINMUX
	select GENERIC_PINCONF
	select REGULATOR
	select REGULATOR_FIXED_VOLTAGE
	help
	  This driver support for the pin controller in ESWIN's EIC7700 SoC,
	  which supports pin multiplexing, pin configuration,and rgmii voltage
	  control.
	  Say Y here to enable the eic7700 pinctrl driver

config PINCTRL_EP93XX
	bool
	depends on ARCH_EP93XX || COMPILE_TEST
	select PINMUX
	select GENERIC_PINCONF
	select MFD_SYSCON

config PINCTRL_EQUILIBRIUM
	tristate "Generic pinctrl and GPIO driver for Intel Lightning Mountain SoC"
	depends on OF && HAS_IOMEM
	depends on X86 || COMPILE_TEST
	select PINMUX
	select PINCONF
	select GPIOLIB
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	help
	  Equilibrium driver is a pinctrl and GPIO driver for Intel Lightning
	  Mountain network processor SoC that supports both the GPIO and pin
	  control frameworks. It provides interfaces to setup pin muxing, assign
	  desired pin functions, configure GPIO attributes for LGM SoC pins.
	  Pin muxing and pin config settings are retrieved from device tree.

config PINCTRL_EYEQ5
	bool "Mobileye EyeQ5 pinctrl driver"
	depends on OF
	depends on MACH_EYEQ5 || MACH_EYEQ6LPLUS || COMPILE_TEST
	select PINMUX
	select GENERIC_PINCONF
	select AUXILIARY_BUS
	default MACH_EYEQ5 || MACH_EYEQ6LPLUS
	help
	  Pin controller driver for the Mobileye EyeQ5 platform. It does both
	  pin config & pin muxing. It does not handle GPIO.

	  Pin muxing supports two functions for each pin: first is GPIO, second
	  is pin-dependent. Pin config is about bias & drive strength.

config PINCTRL_GEMINI
	bool
	depends on ARCH_GEMINI
	default ARCH_GEMINI
	select PINMUX
	select GENERIC_PINCONF
	select MFD_SYSCON

config PINCTRL_GENERIC_MUX
	tristate "Generic Pinctrl driver by using multiplexer"
	depends on OF
	select MULTIPLEXER
	select PINMUX
	select GENERIC_PINCTRL
	help
          Generic pinctrl driver by MULTIPLEXER framework to control on
          board pin selection.

config PINCTRL_INGENIC
	bool "Pinctrl driver for the Ingenic JZ47xx SoCs"
	default MACH_INGENIC
	depends on OF
	depends on MIPS || COMPILE_TEST
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select REGMAP_MMIO

config PINCTRL_K210
	bool "Pinctrl driver for the Canaan Kendryte K210 SoC"
	depends on RISCV && SOC_CANAAN_K210 || COMPILE_TEST
	depends on OF
	select GENERIC_PINMUX_FUNCTIONS
	select GENERIC_PINCONF
	select GPIOLIB
	select REGMAP_MMIO
	default SOC_CANAAN_K210
	help
	  Add support for the Canaan Kendryte K210 RISC-V SOC Field
	  Programmable IO Array (FPIOA) controller.

config PINCTRL_K230
	bool "Pinctrl driver for the Canaan Kendryte K230 SoC"
	depends on OF
	depends on ARCH_CANAAN || COMPILE_TEST
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	select GENERIC_PINCONF
	select REGMAP_MMIO
	help
	  Add support for the Canaan Kendryte K230 RISC-V SOC pin controller.

config PINCTRL_KEEMBAY
	tristate "Pinctrl driver for Intel Keem Bay SoC"
	depends on ARCH_KEEMBAY || (ARM64 && COMPILE_TEST)
	depends on HAS_IOMEM
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select GPIO_GENERIC
	help
	  This selects pin control driver for the Intel Keem Bay SoC.
	  It provides pin config functions such as pull-up, pull-down,
	  interrupt, drive strength, sec lock, Schmitt trigger, slew
	  rate control and direction control. This module will be
	  called as pinctrl-keembay.

config PINCTRL_LANTIQ
	bool
	depends on LANTIQ
	select PINMUX
	select PINCONF

config PINCTRL_FALCON
	bool
	depends on SOC_FALCON
	depends on PINCTRL_LANTIQ

config PINCTRL_LOONGSON2
	tristate "Pinctrl driver for the Loongson-2 SoC"
	depends on OF && (LOONGARCH || COMPILE_TEST)
	select PINMUX
	select GENERIC_PINCONF
	help
	 This selects pin control driver for the Loongson-2 SoC. It
	 provides pin config functions multiplexing.  GPIO pin pull-up,
	 pull-down functions are not supported. Say yes to enable
	 pinctrl for Loongson-2 SoC.

config PINCTRL_XWAY
	bool
	depends on SOC_TYPE_XWAY
	depends on PINCTRL_LANTIQ

config PINCTRL_LPC18XX
	bool "NXP LPC18XX/43XX SCU pinctrl driver"
	depends on OF && (ARCH_LPC18XX || COMPILE_TEST)
	default ARCH_LPC18XX
	select PINMUX
	select GENERIC_PINCONF
	help
	  Pinctrl driver for NXP LPC18xx/43xx System Control Unit (SCU).

config PINCTRL_MAX7360
	tristate "MAX7360 Pincontrol support"
	depends on MFD_MAX7360
	select PINMUX
	select GENERIC_PINCONF
	help
	  Say Y here to enable pin control support for Maxim MAX7360 keypad
	  controller.
	  This keypad controller has 8 GPIO pins that may work as GPIO, or PWM,
	  or rotary encoder alternate modes.

config PINCTRL_MAX77620
	tristate "MAX77620/MAX20024 Pincontrol support"
	depends on MFD_MAX77620 && OF
	select PINMUX
	select GENERIC_PINCONF
	help
	  Say Y here to enable Pin control support for Maxim MAX77620 PMIC.
	  This PMIC has 8 GPIO pins that work as GPIO as well as special
	  function in alternate mode. This driver also configure push-pull,
	  open drain, FPS slots etc.

config PINCTRL_MCP23S08_I2C
	tristate
	select REGMAP_I2C

config PINCTRL_MCP23S08_SPI
	tristate
	select REGMAP_SPI

config PINCTRL_MCP23S08
	tristate "Microchip MCP23xxx I/O expander"
	depends on SPI_MASTER || I2C
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select GENERIC_PINCONF
	select PINCTRL_MCP23S08_I2C if I2C
	select PINCTRL_MCP23S08_SPI if SPI_MASTER
	help
	  SPI/I2C driver for Microchip MCP23S08 / MCP23S17 / MCP23S18 /
	  MCP23008 / MCP23017 / MCP23018 I/O expanders.
	  This provides a GPIO interface supporting inputs and outputs and a
	  corresponding interrupt-controller.

config PINCTRL_MICROCHIP_SGPIO
	tristate "Pinctrl driver for Microsemi/Microchip Serial GPIO"
	depends on OF
	depends on HAS_IOMEM
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	select REGMAP_MMIO
	help
	  Support for the serial GPIO interface used on Microsemi and
	  Microchip SoCs. By using a serial interface, the SIO
	  controller significantly extends the number of available
	  GPIOs with a minimum number of additional pins on the
	  device. The primary purpose of the SIO controller is to
	  connect control signals from SFP modules and to act as an
	  LED controller.

	  If compiled as a module, the module name will be
	  pinctrl-microchip-sgpio.

config PINCTRL_OCELOT
	tristate "Pinctrl driver for the Microsemi Ocelot and Jaguar2 SoCs"
	depends on OF
	depends on HAS_IOMEM
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	select REGMAP_MMIO
	help
	  Support for the internal GPIO interfaces on Microsemi Ocelot and
	  Jaguar2 SoCs.

	  If conpiled as a module, the module name will be pinctrl-ocelot.

config PINCTRL_PALMAS
	tristate "Pinctrl driver for the PALMAS Series MFD devices"
	depends on OF && MFD_PALMAS
	select PINMUX
	select GENERIC_PINCONF
	help
	  Palmas device supports the configuration of pins for different
	  functionality. This driver supports the pinmux, push-pull and
	  open drain configuration for the Palmas series devices like
	  TPS65913, TPS80036 etc.

config PINCTRL_PEF2256
	tristate "Lantiq PEF2256 (FALC56) pin controller driver"
	depends on OF && FRAMER_PEF2256
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	help
	  This option enables the pin controller support for the Lantiq PEF2256
	  framer, also known as FALC56.

	  If unsure, say N.

	  To compile this driver as a module, choose M here: the
	  module will be called pinctrl-pef2256.

config PINCTRL_PIC32
	bool "Microchip PIC32 pin controller driver"
	depends on OF
	depends on MACH_PIC32 || COMPILE_TEST
	select PINMUX
	select GENERIC_PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	help
	  This is the pin controller and gpio driver for Microchip PIC32
	  microcontrollers. This option is selected automatically when specific
	  machine and arch are selected to build.

config PINCTRL_PIC32MZDA
	def_bool y if PIC32MZDA
	select PINCTRL_PIC32

config PINCTRL_PISTACHIO
	bool "IMG Pistachio SoC pinctrl driver"
	depends on OF && (MIPS || COMPILE_TEST)
	depends on GPIOLIB
	select PINMUX
	select GENERIC_PINCONF
	select GPIOLIB_IRQCHIP
	help
	  This support pinctrl and GPIO driver for IMG Pistachio SoC.

config PINCTRL_RK805
	tristate "Pinctrl and GPIO driver for RK805 PMIC"
	depends on MFD_RK8XX
	select GPIOLIB
	select PINMUX
	select GENERIC_PINCONF
	help
	  This selects the pinctrl driver for RK805.

config PINCTRL_ROCKCHIP
	tristate "Rockchip gpio and pinctrl driver"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on OF
	select GPIOLIB
	select PINMUX
	select GENERIC_PINCONF
	select GENERIC_IRQ_CHIP
	select MFD_SYSCON
	default ARCH_ROCKCHIP
	help
          This support pinctrl and GPIO driver for Rockchip SoCs.

config PINCTRL_SCMI
	tristate "Pinctrl driver using SCMI protocol interface"
	depends on ARM_SCMI_PROTOCOL || COMPILE_TEST
	select PINMUX
	select GENERIC_PINCONF
	help
	  This driver provides support for pinctrl which is controlled
	  by firmware that implements the SCMI interface.
	  It uses SCMI Message Protocol to interact with the
	  firmware providing all the pinctrl controls.

config PINCTRL_SINGLE
	tristate "One-register-per-pin type device tree based pinctrl driver"
	depends on OF
	depends on HAS_IOMEM
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	select GENERIC_PINCONF
	help
	  This selects the device tree based generic pinctrl driver.

config PINCTRL_ST
	bool
	depends on OF
	select PINMUX
	select PINCONF
	select GPIOLIB_IRQCHIP

config PINCTRL_STMFX
	tristate "STMicroelectronics STMFX GPIO expander pinctrl driver"
	depends on OF
	depends on I2C
	depends on HAS_IOMEM
	select GENERIC_PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select MFD_STMFX
	help
	  Driver for STMicroelectronics Multi-Function eXpander (STMFX)
	  GPIO expander.
	  This provides a GPIO interface supporting inputs and outputs,
	  and configuring push-pull, open-drain, and can also be used as
	  interrupt-controller.

config PINCTRL_SX150X
	tristate "Semtech SX150x I2C GPIO expander pinctrl driver"
	depends on I2C
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select REGMAP
	help
	  Say Y here to provide support for Semtech SX150x-series I2C
	  GPIO expanders as pinctrl module.
	  Compatible models include:
	  - 8 bits:  sx1508q, sx1502q
	  - 16 bits: sx1509q, sx1506q

config PINCTRL_TB10X
	bool "Pinctrl for TB10X" if COMPILE_TEST
	depends on OF && ARC_PLAT_TB10X || COMPILE_TEST
	select GPIOLIB

config PINCTRL_TPS6594
	tristate "Pinctrl and GPIO driver for TI TPS6594 PMIC"
	depends on OF && MFD_TPS6594
	default MFD_TPS6594
	select PINMUX
	select GPIOLIB
	select REGMAP
	select GPIO_REGMAP
	select GENERIC_PINCONF
	help
	  Say Y to select the pinmuxing and GPIOs driver for the TPS6594
	  PMICs chip family.

	  This driver can also be built as a module
	  called tps6594-pinctrl.

config PINCTRL_TH1520
	tristate "Pinctrl driver for the T-Head TH1520 SoC"
	depends on ARCH_THEAD || COMPILE_TEST
	depends on OF
	select GENERIC_PINMUX_FUNCTIONS
	select GENERIC_PINCONF
	select PINMUX
	help
	  This is the driver for the pin controller blocks on the
	  T-Head TH1520 SoC.

	  This driver is needed for RISC-V development boards like
	  the BeagleV Ahead and the LicheePi 4A.

config PINCTRL_UPBOARD
	tristate "AAeon UP board FPGA pin controller"
	depends on MFD_UPBOARD_FPGA
	select PINMUX
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	select GPIOLIB
	select GPIO_AGGREGATOR
	help
	  Pin controller for the FPGA GPIO lines on UP boards. Due to the
	  hardware layout, the driver controls the FPGA pins in tandem with
	  their corresponding Intel SoC GPIOs.

	  Currently supported:
	  - UP Squared

	  To compile this driver as a module, choose M here: the module
	  will be called pinctrl-upboard.

config PINCTRL_ZYNQ
	bool "Pinctrl driver for Xilinx Zynq"
	depends on ARCH_ZYNQ || COMPILE_TEST
	depends on OF
	select PINMUX
	select GENERIC_PINCONF
	help
	  This selects the pinctrl driver for Xilinx Zynq.

config PINCTRL_ZYNQMP
	tristate "Pinctrl driver for Xilinx ZynqMP"
	depends on ZYNQMP_FIRMWARE
	select PINMUX
	select GENERIC_PINCONF
	default ZYNQMP_FIRMWARE
	help
	  This selects the pinctrl driver for Xilinx ZynqMP platform.
	  This driver will query the pin information from the firmware
	  and allow configuring the pins.
	  Configuration can include the mux function to select on those
	  pin(s)/group(s), and various pin configuration parameters
	  such as pull-up, slew rate, etc.
	  This driver can also be built as a module. If so, the module
	  will be called pinctrl-zynqmp.

config PINCTRL_MLXBF3
	tristate "NVIDIA BlueField-3 SoC Pinctrl driver"
	depends on (MELLANOX_PLATFORM && ARM64) || COMPILE_TEST
	select PINMUX
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	help
	  Say Y to select the pinctrl driver for BlueField-3 SoCs.
	  This pin controller allows selecting the mux function for
	  each pin. This driver can also be built as a module called
	  pinctrl-mlxbf3.

config PINCTRL_RP1
	tristate "Pinctrl driver for RP1"
	depends on MISC_RP1
	default MISC_RP1
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	help
	  Enable the gpio and pinctrl/mux driver for RaspberryPi RP1
	  multi function device.

source "drivers/pinctrl/actions/Kconfig"
source "drivers/pinctrl/airoha/Kconfig"
source "drivers/pinctrl/aspeed/Kconfig"
source "drivers/pinctrl/bcm/Kconfig"
source "drivers/pinctrl/berlin/Kconfig"
source "drivers/pinctrl/cirrus/Kconfig"
source "drivers/pinctrl/cix/Kconfig"
source "drivers/pinctrl/freescale/Kconfig"
source "drivers/pinctrl/intel/Kconfig"
source "drivers/pinctrl/mediatek/Kconfig"
source "drivers/pinctrl/meson/Kconfig"
source "drivers/pinctrl/microchip/Kconfig"
source "drivers/pinctrl/mvebu/Kconfig"
source "drivers/pinctrl/nomadik/Kconfig"
source "drivers/pinctrl/nuvoton/Kconfig"
source "drivers/pinctrl/nxp/Kconfig"
source "drivers/pinctrl/pxa/Kconfig"
source "drivers/pinctrl/qcom/Kconfig"
source "drivers/pinctrl/realtek/Kconfig"
source "drivers/pinctrl/renesas/Kconfig"
source "drivers/pinctrl/samsung/Kconfig"
source "drivers/pinctrl/sophgo/Kconfig"
source "drivers/pinctrl/spacemit/Kconfig"
source "drivers/pinctrl/spear/Kconfig"
source "drivers/pinctrl/sprd/Kconfig"
source "drivers/pinctrl/starfive/Kconfig"
source "drivers/pinctrl/stm32/Kconfig"
source "drivers/pinctrl/sunplus/Kconfig"
source "drivers/pinctrl/sunxi/Kconfig"
source "drivers/pinctrl/tegra/Kconfig"
source "drivers/pinctrl/ti/Kconfig"
source "drivers/pinctrl/ultrarisc/Kconfig"
source "drivers/pinctrl/uniphier/Kconfig"
source "drivers/pinctrl/visconti/Kconfig"
source "drivers/pinctrl/vt8500/Kconfig"

endif
