#
# 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 VPL_PINCTRL
	bool "Support pin controllers in VPL"
	depends on VPL && VPL_DM
	help
	  This option is an VPL 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 a TPL variant of the PINCTRL_FULL option.
	  See the help of PINCTRL_FULL for details.

config VPL_PINCTRL_FULL
	bool "Support full pin controllers in VPL"
	depends on VPL_PINCTRL && VPL_OF_CONTROL
	help
	  This option is a VPL 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_APPLE
	bool "Apple pinctrl driver"
	depends on DM && PINCTRL_GENERIC && ARCH_APPLE
	default y
	help
	  Support pin multiplexing on Apple 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_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 STMicroelectronics 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 ASPEED_AST2600_PINCTRL
	bool "Aspeed AST2600 pin control driver"
	depends on DM && PINCTRL_GENERIC && ASPEED_AST2600
	default y
	help
	  Support pin multiplexing control on Aspeed ast2600 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.

config PINCTRL_ZYNQMP
	bool "Xilinx ZynqMP pin control driver"
	depends on DM && PINCTRL_GENERIC && ARCH_ZYNQMP
	default y
	help
	  Support pin multiplexing control on Xilinx ZynqMP. The driver uses
	  Generic Pinctrl framework and is compatible with the Linux driver,
	  i.e. it uses the same device tree configuration.

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/nuvoton/Kconfig"
source "drivers/pinctrl/nxp/Kconfig"
source "drivers/pinctrl/renesas/Kconfig"
source "drivers/pinctrl/rockchip/Kconfig"
source "drivers/pinctrl/sunxi/Kconfig"
source "drivers/pinctrl/uniphier/Kconfig"

endmenu
