# 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
	select GPIOLIB_IRQCHIP
	default ARCH_BCM2835 || ARCH_BRCMSTB
	help
	   Say Y here to enable the Broadcom BCM2835 GPIO driver.

config PINCTRL_BCM63XX
	bool
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB
	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
	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.
