# 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_BRCMSTB
        tristate "Broadcom STB product line pin controller driver"
        depends on OF && (ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST)
        select PINMUX
        select PINCONF
        select GENERIC_PINCONF
        help
          Enable pin muxing and configuration functionality
          for Broadcom STB product line chipsets.

source "drivers/pinctrl/bcm/Kconfig.stb"

config PINCTRL_IPROC_GPIO
	bool "Broadcom iProc GPIO (with PINCONF) driver"
	depends on 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 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.
