# 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_BCMBCA || COMPILE_TEST)
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	select GENERIC_PINMUX_FUNCTIONS
	default ARCH_BCMBCA
	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.
