# 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
	tristate "Broadcom BCM2835 GPIO (with PINCONF) driver"
	depends on OF && (ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST)
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	default ARCH_BCM2835 || ARCH_BRCMSTB
	help
	   Say Y here to enable the Broadcom BCM2835 GPIO driver.

config PINCTRL_BCM4908
	tristate "Broadcom BCM4908 pinmux driver"
	depends on OF && (ARCH_BCM4908 || COMPILE_TEST)
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	default ARCH_BCM4908
	help
	  Driver for BCM4908 family SoCs with integrated pin controller.

	  If compiled as module it will be called pinctrl-bcm4908.

config PINCTRL_BCM63XX
	bool
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB
	select REGMAP
	select GPIO_REGMAP

config PINCTRL_BCM6318
	bool "Broadcom BCM6318 GPIO driver"
	depends on (BMIPS_GENERIC || COMPILE_TEST)
	depends on OF
	select PINCTRL_BCM63XX
	default BMIPS_GENERIC
	help
	   Say Y here to enable the Broadcom BCM6318 GPIO driver.

config PINCTRL_BCM6328
	bool "Broadcom BCM6328 GPIO driver"
	depends on (BMIPS_GENERIC || COMPILE_TEST)
	depends on OF
	select PINCTRL_BCM63XX
	default BMIPS_GENERIC
	help
	   Say Y here to enable the Broadcom BCM6328 GPIO driver.

config PINCTRL_BCM6358
	bool "Broadcom BCM6358 GPIO driver"
	depends on (BMIPS_GENERIC || COMPILE_TEST)
	depends on OF
	select PINCTRL_BCM63XX
	default BMIPS_GENERIC
	help
	   Say Y here to enable the Broadcom BCM6358 GPIO driver.

config PINCTRL_BCM6362
	bool "Broadcom BCM6362 GPIO driver"
	depends on (BMIPS_GENERIC || COMPILE_TEST)
	depends on OF
	select PINCTRL_BCM63XX
	default BMIPS_GENERIC
	help
	   Say Y here to enable the Broadcom BCM6362 GPIO driver.

config PINCTRL_BCM6368
	bool "Broadcom BCM6368 GPIO driver"
	depends on (BMIPS_GENERIC || COMPILE_TEST)
	depends on OF
	select PINCTRL_BCM63XX
	default BMIPS_GENERIC
	help
	   Say Y here to enable the Broadcom BCM6368 GPIO driver.

config PINCTRL_BCM63268
	bool "Broadcom BCM63268 GPIO driver"
	depends on (BMIPS_GENERIC || COMPILE_TEST)
	depends on OF
	select PINCTRL_BCM63XX
	default BMIPS_GENERIC
	help
	   Say Y here to enable the Broadcom BCM63268 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
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	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.
