#
# PINCTRL infrastructure and drivers
#

menu "Pin controllers"

config PINCTRL
	bool "Support pin controllers"
	depends on DM
	help
	  This enables the basic support for pinctrl framework.  You may want
	  to enable some more options depending on what you want to do.

config PINCTRL_FULL
	bool "Support full pin controllers"
	depends on PINCTRL && OF_CONTROL
	default y
	help
	  This provides Linux-compatible device tree interface for the pinctrl
	  subsystem.  This feature depends on device tree configuration because
	  it parses a device tree to look for the pinctrl device which the
	  peripheral device is associated with.

	  If this option is disabled (it is the only possible choice for non-DT
	  boards), the pinctrl core provides no systematic mechanism for
	  identifying peripheral devices, applying needed pinctrl settings.
	  It is totally up to the implementation of each low-level driver.
	  You can save memory footprint in return for some limitations.

config PINCTRL_GENERIC
	bool "Support generic pin controllers"
	depends on PINCTRL_FULL
	default y
	help
	  Say Y here if you want to use the pinctrl subsystem through the
	  generic DT interface.  If enabled, some functions become available
	  to parse common properties such as "pins", "groups", "functions" and
	  some pin configuration parameters.  It would be easier if you only
	  need the generic DT interface for pin muxing and pin configuration.
	  If you need to handle vendor-specific DT properties, you can disable
	  this option and implement your own set_state callback in the pinctrl
	  operations.

config PINMUX
	bool "Support pin multiplexing controllers"
	depends on PINCTRL_GENERIC
	default y
	help
	  This option enables pin multiplexing through the generic pinctrl
	  framework. Most SoCs have their own multiplexing arrangement where
	  a single pin can be used for several functions. An SoC pinctrl driver
	  allows the required function to be selected for each pin.
	  The driver is typically controlled by the device tree.

config PINCONF
	bool "Support pin configuration controllers"
	depends on PINCTRL_GENERIC
	help
	  This option enables pin configuration through the generic pinctrl
	  framework.

config PINCONF_RECURSIVE
	bool "Support recursive binding for pin configuration nodes"
	depends on PINCTRL_FULL
	default n if ARCH_STM32MP
	default y
	help
	  In the Linux pinctrl binding, the pin configuration nodes need not be
	  direct children of the pin controller device (may be grandchildren for
	  example). It is define is each individual pin controller device.
	  Say Y here if you want to keep this behavior with the pinconfig
	  u-class: all sub are recursively bounded.
	  If the option is disabled, this behavior is deactivated and only
	  the direct children of pin controller will be assumed as pin
	  configuration; you can save memory footprint when this feature is
	  no needed.

config SPL_PINCTRL
	bool "Support pin controllers in SPL"
	depends on SPL && SPL_DM
	help
	  This option is an SPL-variant of the PINCTRL option.
	  See the help of PINCTRL for details.

config TPL_PINCTRL
	bool "Support pin controllers in TPL"
	depends on TPL && TPL_DM
	help
	  This option is an TPL variant of the PINCTRL option.
	  See the help of PINCTRL for details.

config SPL_PINCTRL_FULL
	bool "Support full pin controllers in SPL"
	depends on SPL_PINCTRL && SPL_OF_CONTROL
	default n if TARGET_STM32F746_DISCO
	default y
	help
	  This option is an SPL-variant of the PINCTRL_FULL option.
	  See the help of PINCTRL_FULL for details.

config TPL_PINCTRL_FULL
	bool "Support full pin controllers in TPL"
	depends on TPL_PINCTRL && TPL_OF_CONTROL
	help
	  This option is an TPL-variant of the PINCTRL_FULL option.
	  See the help of PINCTRL_FULL for details.

config SPL_PINCTRL_GENERIC
	bool "Support generic pin controllers in SPL"
	depends on SPL_PINCTRL_FULL
	default y
	help
	  This option is an SPL-variant of the PINCTRL_GENERIC option.
	  See the help of PINCTRL_GENERIC for details.

config SPL_PINMUX
	bool "Support pin multiplexing controllers in SPL"
	depends on SPL_PINCTRL_GENERIC
	default y
	help
	  This option is an SPL-variant of the PINMUX option.
	  See the help of PINMUX for details.
	  The pinctrl subsystem can add a substantial overhead to the SPL
	  image since it typically requires quite a few tables either in the
	  driver or in the device tree. If this is acceptable and you need
	  to adjust pin multiplexing in SPL in order to boot into U-Boot,
	  enable this option. You will need to enable device tree in SPL
	  for this to work.

config SPL_PINCONF
	bool "Support pin configuration controllers in SPL"
	depends on SPL_PINCTRL_GENERIC
	help
	  This option is an SPL-variant of the PINCONF option.
	  See the help of PINCONF for details.

config SPL_PINCONF_RECURSIVE
	bool "Support recursive binding for pin configuration nodes in SPL"
	depends on SPL_PINCTRL_FULL
	default n if ARCH_STM32MP
	default y
	help
	  This option is an SPL-variant of the PINCONF_RECURSIVE option.
	  See the help of PINCONF_RECURSIVE for details.

if PINCTRL || SPL_PINCTRL

config PINCTRL_AR933X
	bool "QCA/Athores ar933x pin control driver"
	depends on DM && SOC_AR933X
	help
	  Support pin multiplexing control on QCA/Athores ar933x SoCs.
	  The driver is controlled by a device tree node which contains
	  both the GPIO definitions and pin control functions for each
	  available multiplex function.

config PINCTRL_AT91
	bool "AT91 pinctrl driver"
	depends on DM
	help
	  This option is to enable the AT91 pinctrl driver for AT91 PIO
	  controller.

	  AT91 PIO controller is a combined gpio-controller, pin-mux and
	  pin-config module. Each I/O pin may be dedicated as a general-purpose
	  I/O or be assigned to a function of an embedded peripheral. Each I/O
	  pin has a glitch filter providing rejection of glitches lower than
	  one-half of peripheral clock cycle and a debouncing filter providing
	  rejection of unwanted pulses from key or push button operations. You
	  can also control the multi-driver capability, pull-up and pull-down
	  feature on each I/O pin.

config PINCTRL_AT91PIO4
	bool "AT91 PIO4 pinctrl driver"
	depends on DM
	help
	  This option is to enable the AT91 pinctrl driver for AT91 PIO4
	  controller which is available on SAMA5D2 SoC.

config PINCTRL_INTEL
	bool "Standard Intel pin-control and pin-mux driver"
	help
	  Recent Intel chips such as Apollo Lake (APL) use a common pin control
	  and GPIO scheme. The settings for this come from an SoC-specific
	  driver which must be separately enabled. The driver supports setting
	  pins on start-up and changing the GPIO attributes.

config PINCTRL_PIC32
	bool "Microchip PIC32 pin-control and pin-mux driver"
	depends on DM && MACH_PIC32
	default y
	help
	  Supports individual pin selection and configuration for each
	  remappable peripheral available on Microchip PIC32
	  SoCs. This driver is controlled by a device tree node which
	  contains both GPIO definition and pin control functions.

config PINCTRL_QCA953X
	bool "QCA/Athores qca953x pin control driver"
	depends on DM && SOC_QCA953X
	help
	  Support pin multiplexing control on QCA/Athores qca953x SoCs.

	  The driver is controlled by a device tree node which contains both
	  the GPIO definitions and pin control functions for each available
	  multiplex function.

config PINCTRL_QE
	bool "QE based pinctrl driver, like on mpc83xx"
	depends on DM
	help
	  This option is to enable the QE pinctrl driver for QE based io
	  controller.

config PINCTRL_ROCKCHIP_RV1108
	bool "Rockchip rv1108 pin control driver"
	depends on DM
	help
	  Support pin multiplexing control on Rockchip rv1108 SoC.

	  The driver is controlled by a device tree node which contains
	  both the GPIO definitions and pin control functions for each
	  available multiplex function.

config PINCTRL_SANDBOX
	bool "Sandbox pinctrl driver"
	depends on SANDBOX
	help
	  This enables pinctrl driver for sandbox.

	  Currently, this driver actually does nothing but print debug
	  messages when pinctrl operations are invoked.

config PINCTRL_SINGLE
	bool "Single register pin-control and pin-multiplex driver"
	depends on DM
	help
	  This enables pinctrl driver for systems using a single register for
	  pin configuration and multiplexing. TI's AM335X SoCs are examples of
	  such systems.

	  Depending on the platform make sure to also enable OF_TRANSLATE and
	  eventually SPL_OF_TRANSLATE to get correct address translations.

config PINCTRL_STI
	bool "STMicroelectronics STi pin-control and pin-mux driver"
	depends on DM && ARCH_STI
	default y
	help
	  Support pin multiplexing control on STMicrolectronics STi SoCs.

	  The driver is controlled by a device tree node which contains both
	  the GPIO definitions and pin control functions for each available
	  multiplex function.

config PINCTRL_STM32
	bool "ST STM32 pin control driver"
	depends on DM
	help
	  Supports pin multiplexing control on stm32 SoCs.

	  The driver is controlled by a device tree node which contains both
	  the GPIO definitions and pin control functions for each available
	  multiplex function.

config PINCTRL_STMFX
	bool "STMicroelectronics STMFX I2C GPIO expander pinctrl driver"
	depends on DM && PINCTRL_FULL
	help
	  I2C driver for STMicroelectronics Multi-Function eXpander (STMFX)
	  GPIO expander.
	  Supports pin multiplexing control on stm32 SoCs.

	  The driver is controlled by a device tree node which contains both
	  the GPIO definitions and pin control functions for each available
	  multiplex function.

config SPL_PINCTRL_STMFX
	bool "STMicroelectronics STMFX I2C GPIO expander pinctrl driver in SPL"
	depends on SPL_PINCTRL_FULL
	help
	  This option is an SPL-variant of the SPL_PINCTRL_STMFX option.
	  See the help of PINCTRL_STMFX for details.

config ASPEED_AST2500_PINCTRL
	bool "Aspeed AST2500 pin control driver"
	depends on DM && PINCTRL_GENERIC && ASPEED_AST2500
	default y
	help
	  Support pin multiplexing control on Aspeed ast2500 SoC. The driver
	  uses Generic Pinctrl framework and is compatible with the Linux
	  driver, i.e. it uses the same device tree configuration.

config PINCTRL_K210
	bool "Kendryte K210 Fully-Programmable Input/Output Array driver"
	depends on DM && PINCTRL_GENERIC
	help
	  Support pin multiplexing on the K210. The "FPIOA" can remap any
	  supported function to any multifunctional IO pin. It can also perform
	  basic GPIO functions, such as reading the current value of a pin.
endif

source "drivers/pinctrl/broadcom/Kconfig"
source "drivers/pinctrl/exynos/Kconfig"
source "drivers/pinctrl/intel/Kconfig"
source "drivers/pinctrl/mediatek/Kconfig"
source "drivers/pinctrl/meson/Kconfig"
source "drivers/pinctrl/mscc/Kconfig"
source "drivers/pinctrl/mtmips/Kconfig"
source "drivers/pinctrl/mvebu/Kconfig"
source "drivers/pinctrl/nexell/Kconfig"
source "drivers/pinctrl/nxp/Kconfig"
source "drivers/pinctrl/renesas/Kconfig"
source "drivers/pinctrl/rockchip/Kconfig"
source "drivers/pinctrl/uniphier/Kconfig"

endmenu
