# SPDX-License-Identifier: GPL-2.0-only
#
# Broadcom pinctrl drivers
#

config PINCTRL_BCM281XX
	bool "Broadcom BCM281xx pinctrl driver"
	depends on OF && (ARCH_BCM_MOBILE || COMPILE_TEST)
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select REGMAP_MMIO
	default ARCH_BCM_MOBILE
	help
	  Say Y here to support Broadcom BCM281xx pinctrl driver, which is used
	  for the BCM281xx SoC family, including BCM11130, BCM11140, BCM11351,
	  BCM28145, and BCM28155 SoCs.  This driver requires the pinctrl
	  framework.  GPIO is provided by a separate GPIO driver.

config PINCTRL_BCM2835
	bool "Broadcom BCM2835 GPIO (with PINCONF) driver"
	depends on OF && (ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST)
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB_IRQCHIP
	default ARCH_BCM2835 || ARCH_BRCMSTB
	help
	   Say Y here to enable the Broadcom BCM2835 GPIO driver.

config PINCTRL_IPROC_GPIO
	bool "Broadcom iProc GPIO (with PINCONF) driver"
	depends on OF_GPIO && (ARCH_BCM_IPROC || COMPILE_TEST)
	select GPIOLIB_IRQCHIP
	select PINCONF
	select GENERIC_PINCONF
	default ARCH_BCM_IPROC
	help
	  Say yes here to enable the Broadcom iProc GPIO driver.

	  The Broadcom iProc based SoCs- Cygnus, NS2, NSP and Stingray, use
	  same GPIO Controller IP hence this driver could be used for all.

	  The Broadcom Cygnus SoC has 3 GPIO controllers including the ASIU
	  GPIO controller (ASIU), the chipCommonG GPIO controller (CCM), and
	  the always-ON GPIO controller (CRMU/AON). All 3 GPIO controllers are
	  supported by this driver.

	  The Broadcom NSP has two GPIO controllers including the ChipcommonA
	  GPIO, the ChipcommonB GPIO. Later controller is supported by this
	  driver.

	  The Broadcom NS2 has two GPIO controller including the CRMU GPIO,
	  the ChipcommonG GPIO. Both controllers are supported by this driver.

	  The Broadcom Stingray GPIO controllers are supported by this driver.

	  All above SoCs GPIO controllers support basic PINCONF functions such
	  as bias pull up, pull down, and drive strength configurations, when
	  these pins are muxed to GPIO.

	  It provides the framework where pins from the individual GPIO can be
	  individually muxed to GPIO function, through interaction with the
	  SoCs IOMUX controller. This features could be used only on SoCs which
	  support individual pin muxing.

config PINCTRL_CYGNUS_MUX
	bool "Broadcom Cygnus IOMUX driver"
	depends on (ARCH_BCM_CYGNUS || COMPILE_TEST)
	depends on OF
	select PINMUX
	select GENERIC_PINCONF
	default ARCH_BCM_CYGNUS
	help
	  Say yes here to enable the Broadcom Cygnus IOMUX driver.

	  The Broadcom Cygnus IOMUX driver supports group based IOMUX
	  configuration, with the exception that certain individual pins
	  can be overridden to GPIO function

config PINCTRL_NS
	bool "Broadcom Northstar pins driver"
	depends on OF && (ARCH_BCM_5301X || COMPILE_TEST)
	select PINMUX
	select GENERIC_PINCONF
	default ARCH_BCM_5301X
	help
	  Say yes here to enable the Broadcom NS SoC pins driver.

	  The Broadcom Northstar pins driver supports muxing multi-purpose pins
	  that can be used for various functions (e.g. SPI, I2C, UART) as well
	  as GPIOs.

config PINCTRL_NSP_GPIO
	bool "Broadcom NSP GPIO (with PINCONF) driver"
	depends on OF_GPIO && (ARCH_BCM_NSP || COMPILE_TEST)
	select GPIOLIB_IRQCHIP
	select PINCONF
	select GENERIC_PINCONF
	default ARCH_BCM_NSP
	help
	  Say yes here to enable the Broadcom NSP GPIO driver.

	  The Broadcom Northstar Plus SoC ChipcommonA GPIO controller is
	  supported by this driver.

	  The ChipcommonA GPIO controller support basic PINCONF functions such
	  as bias pull up, pull down, and drive strength configurations, when
	  these pins are muxed to GPIO.

config PINCTRL_NS2_MUX
	bool "Broadcom Northstar2 pinmux driver"
	depends on OF
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	select PINMUX
	select GENERIC_PINCONF
	default ARM64 && ARCH_BCM_IPROC
	help
	  Say yes here to enable the Broadcom NS2 MUX driver.

	  The Broadcom Northstar2 IOMUX driver supports group based IOMUX
	  configuration.

config PINCTRL_NSP_MUX
	bool "Broadcom NSP IOMUX driver"
	depends on (ARCH_BCM_NSP || COMPILE_TEST)
	depends on OF
	select PINMUX
	select GENERIC_PINCONF
	default ARCH_BCM_NSP
	help
	  Say yes here to enable the Broadcom NSP SOC IOMUX driver.

	  The Broadcom Northstar Plus IOMUX driver supports pin based IOMUX
	  configuration, with certain individual pins can be overridden
	  to GPIO function.
