# SPDX-License-Identifier: GPL-2.0-only
#
# GPIO infrastructure and drivers
#

menuconfig GPIOLIB
	bool "GPIO Support"
	help
	  This enables GPIO support through the generic GPIO library.
	  You only need to enable this if you also want to enable
	  one or more of the GPIO drivers below.

	  If unsure, say N.

if GPIOLIB

config GPIOLIB_FASTPATH_LIMIT
	int "Maximum number of GPIOs for fast path"
	range 32 512
	default 512
	help
	  This adjusts the point at which certain APIs will switch from
	  using a stack allocated buffer to a dynamically allocated buffer.

	  You shouldn't need to change this unless you really need to
	  optimize either stack space or performance. Change this carefully
	  since setting an incorrect value could cause stack corruption.

config OF_GPIO
	def_bool y
	depends on OF
	depends on HAS_IOMEM

config GPIO_ACPI
	def_bool y
	depends on ACPI

config GPIOLIB_IRQCHIP
	select IRQ_DOMAIN
	bool

config OF_GPIO_MM_GPIOCHIP
	bool
	help
	  This adds support for the legacy 'struct of_mm_gpio_chip' interface
	  from PowerPC. Existing drivers using this interface need to select
	  this symbol, but new drivers should use the generic gpio-regmap
	  infrastructure instead.

config DEBUG_GPIO
	bool "Debug GPIO calls"
	depends on DEBUG_KERNEL
	help
	  Say Y here to add some extra checks and diagnostics to GPIO calls.
	  These checks help ensure that GPIOs have been properly initialized
	  before they are used, and that sleeping calls are not made from
	  non-sleeping contexts.  They can make bitbanged serial protocols
	  slower.  The diagnostics help catch the type of setup errors
	  that are most common when setting up new platforms or boards.

config GPIO_SYSFS
	bool "/sys/class/gpio/... (sysfs interface)" if EXPERT
	depends on SYSFS
	select GPIO_CDEV # We need to encourage the new ABI
	help
	  Say Y here to add the legacy sysfs interface for GPIOs.

	  This ABI is deprecated. If you want to use GPIO from userspace,
	  use the character device /dev/gpiochipN with the appropriate
	  ioctl() operations instead.

config GPIO_CDEV
	bool
	prompt "Character device (/dev/gpiochipN) support" if EXPERT
	default y
	help
	  Say Y here to add the character device /dev/gpiochipN interface
	  for GPIOs. The character device allows userspace to control GPIOs
	  using ioctl() operations.

	  Only say N if you are sure that the GPIO character device is not
	  required.

	  If unsure, say Y.

config GPIO_CDEV_V1
	bool "Support GPIO ABI Version 1"
	default y
	depends on GPIO_CDEV
	help
	  Say Y here to support version 1 of the GPIO CDEV ABI.

	  This ABI version is deprecated.
	  Please use the latest ABI for new developments.

	  If unsure, say Y.

config GPIO_GENERIC
	depends on HAS_IOMEM # Only for IOMEM drivers
	tristate

config GPIO_REGMAP
	select REGMAP
	tristate

# put drivers in the right section, in alphabetical order

# This symbol is selected by both I2C and SPI expanders
config GPIO_MAX730X
	tristate

config GPIO_IDIO_16
	tristate
	select REGMAP_IRQ
	select GPIOLIB_IRQCHIP
	select GPIO_REGMAP
	help
	  Enables support for the idio-16 library functions. The idio-16 library
	  provides functions to facilitate communication with devices within the
	  ACCES IDIO-16 family such as the 104-IDIO-16 and the PCI-IDIO-16.

	  If built as a module its name will be gpio-idio-16.

menu "Memory mapped GPIO drivers"
	depends on HAS_IOMEM

config GPIO_74XX_MMIO
	tristate "GPIO driver for 74xx-ICs with MMIO access"
	depends on OF_GPIO
	select GPIO_GENERIC
	help
	  Say yes here to support GPIO functionality for 74xx-compatible ICs
	  with MMIO access. Compatible models include:
	    1 bit:	741G125 (Input), 741G74 (Output)
	    2 bits:	742G125 (Input), 7474 (Output)
	    4 bits:	74125 (Input), 74175 (Output)
	    6 bits:	74365 (Input), 74174 (Output)
	    8 bits:	74244 (Input), 74273 (Output)
	    16 bits:	741624 (Input), 7416374 (Output)

config GPIO_ALTERA
	tristate "Altera GPIO"
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	select OF_GPIO_MM_GPIOCHIP
	help
	  Say Y or M here to build support for the Altera PIO device.

	  If driver is built as a module it will be called gpio-altera.

config GPIO_AMDPT
	tristate "AMD Promontory GPIO support"
	depends on ACPI
	select GPIO_GENERIC
	help
	  Driver for GPIO functionality on Promontory IOHub.
	  Requires ACPI ASL code to enumerate as a platform device.

config GPIO_ASPEED
	tristate "Aspeed GPIO support"
	depends on (ARCH_ASPEED || COMPILE_TEST) && OF_GPIO
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to support Aspeed AST2400 and AST2500 GPIO controllers.

config GPIO_ASPEED_SGPIO
	bool "Aspeed SGPIO support"
	depends on (ARCH_ASPEED || COMPILE_TEST) && OF_GPIO
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to support Aspeed AST2500 SGPIO functionality.

config GPIO_ATH79
	tristate "Atheros AR71XX/AR724X/AR913X GPIO support"
	default y if ATH79
	depends on ATH79 || COMPILE_TEST
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Select this option to enable GPIO driver for
	  Atheros AR71XX/AR724X/AR913X SoC devices.

config GPIO_RASPBERRYPI_EXP
	tristate "Raspberry Pi 3 GPIO Expander"
	default RASPBERRYPI_FIRMWARE
	depends on OF_GPIO
	# Make sure not 'y' when RASPBERRYPI_FIRMWARE is 'm'. This can only
	# happen when COMPILE_TEST=y, hence the added !RASPBERRYPI_FIRMWARE.
	depends on (ARCH_BCM2835 && RASPBERRYPI_FIRMWARE) || (COMPILE_TEST && !RASPBERRYPI_FIRMWARE)
	help
	  Turn on GPIO support for the expander on Raspberry Pi 3 boards, using
	  the firmware mailbox to communicate with VideoCore on BCM283x chips.

config GPIO_BCM_KONA
	bool "Broadcom Kona GPIO"
	depends on ARCH_BCM_MOBILE || COMPILE_TEST
	help
	  Turn on GPIO support for Broadcom "Kona" chips.

config GPIO_BCM_XGS_IPROC
	tristate "BRCM XGS iProc GPIO support"
	depends on OF_GPIO && (ARCH_BCM_IPROC || COMPILE_TEST)
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	default ARCH_BCM_IPROC
	help
	  Say yes here to enable GPIO support for Broadcom XGS iProc SoCs.

config GPIO_BRCMSTB
	tristate "BRCMSTB GPIO support"
	default y if (ARCH_BRCMSTB || BMIPS_GENERIC)
	depends on OF_GPIO && (ARCH_BRCMSTB || BMIPS_GENERIC || COMPILE_TEST)
	select GPIO_GENERIC
	select IRQ_DOMAIN
	help
	  Say yes here to enable GPIO support for Broadcom STB (BCM7XXX) SoCs.

config GPIO_CADENCE
	tristate "Cadence GPIO support"
	depends on OF_GPIO
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to enable support for Cadence GPIO controller.

config GPIO_CLPS711X
	tristate "CLPS711X GPIO support"
	depends on ARCH_CLPS711X || COMPILE_TEST
	select GPIO_GENERIC
	help
	  Say yes here to support GPIO on CLPS711X SoCs.

config GPIO_DAVINCI
	tristate "TI Davinci/Keystone GPIO support"
	default y if ARCH_DAVINCI
	depends on (ARM || ARM64) && (ARCH_DAVINCI || ARCH_KEYSTONE || ARCH_K3)
	help
	  Say yes here to enable GPIO support for TI Davinci/Keystone SoCs.

config GPIO_DWAPB
	tristate "Synopsys DesignWare APB GPIO driver"
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say Y or M here to build support for the Synopsys DesignWare APB
	  GPIO block.

config GPIO_EIC_SPRD
	tristate "Spreadtrum EIC support"
	depends on ARCH_SPRD || COMPILE_TEST
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Spreadtrum EIC device.

config GPIO_EM
	tristate "Emma Mobile GPIO"
	depends on (ARCH_EMEV2 || COMPILE_TEST) && OF_GPIO
	help
	  Say yes here to support GPIO on Renesas Emma Mobile SoCs.

config GPIO_EN7523
	tristate "Airoha GPIO support"
	depends on ARCH_AIROHA
	default ARCH_AIROHA
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say Y or M here to support the GPIO controller block on the
	  Airoha EN7523 SoC. It supports two banks of 32 GPIOs.

config GPIO_EP93XX
	def_bool y
	depends on ARCH_EP93XX
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP

config GPIO_EXAR
	tristate "Support for GPIO pins on XR17V352/354/358"
	depends on SERIAL_8250_EXAR
	select REGMAP_MMIO
	help
	  Selecting this option will enable handling of GPIO pins present
	  on Exar XR17V352/354/358 chips.

config GPIO_GE_FPGA
	bool "GE FPGA based GPIO"
	depends on GE_FPGA || COMPILE_TEST
	select GPIO_GENERIC
	help
	  Support for common GPIO functionality provided on some GE Single Board
	  Computers.

	  This driver provides basic support (configure as input or output, read
	  and write pin state) for GPIO implemented in a number of GE single
	  board computers.

config GPIO_FTGPIO010
	bool "Faraday FTGPIO010 GPIO"
	depends on OF_GPIO
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	default (ARCH_GEMINI || ARCH_MOXART)
	help
	  Support for common GPIOs from the Faraday FTGPIO010 IP core, found in
	  Cortina systems Gemini platforms, Moxa ART and others.

config GPIO_GENERIC_PLATFORM
	tristate "Generic memory-mapped GPIO controller support (MMIO platform device)"
	select GPIO_GENERIC
	help
	  Say yes here to support basic platform_device memory-mapped GPIO controllers.

config GPIO_GRGPIO
	tristate "Aeroflex Gaisler GRGPIO support"
	depends on OF_GPIO
	select GPIO_GENERIC
	select IRQ_DOMAIN
	help
	  Select this to support Aeroflex Gaisler GRGPIO cores from the GRLIB
	  VHDL IP core library.

config GPIO_HISI
	tristate "HiSilicon GPIO controller driver"
	depends on ARM64 || COMPILE_TEST
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say Y or M here to build support for the HiSilicon GPIO controller
	  driver GPIO block.
	  This GPIO controller supports double-edge interrupt and multi-core
	  concurrent access.

config GPIO_HLWD
	tristate "Nintendo Wii (Hollywood) GPIO"
	depends on OF_GPIO
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Select this to support the GPIO controller of the Nintendo Wii.

	  If unsure, say N.

config GPIO_ICH
	tristate "Intel ICH GPIO"
	depends on X86
	depends on LPC_ICH
	help
	  Say yes here to support the GPIO functionality of a number of Intel
	  ICH-based chipsets.  Currently supported devices: ICH6, ICH7, ICH8
	  ICH9, ICH10, Series 5/3400 (e.g. Ibex Peak), Series 6/C200 (e.g.
	  Cougar Point), NM10 (Tiger Point), and 3100 (Whitmore Lake).

	  If unsure, say N.

config GPIO_IMX_SCU
       def_bool y
       depends on IMX_SCU

config GPIO_IXP4XX
	bool "Intel IXP4xx GPIO"
	depends on ARCH_IXP4XX
	depends on OF
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say yes here to support the GPIO functionality of a number of Intel
	  IXP4xx series of chips.

	  If unsure, say N.

config GPIO_LOGICVC
	tristate "Xylon LogiCVC GPIO support"
	depends on MFD_SYSCON && OF
	help
	  Say yes here to support GPIO functionality of the Xylon LogiCVC
	  programmable logic block.

config GPIO_LOONGSON
	bool "Loongson-2/3 GPIO support"
	depends on CPU_LOONGSON2EF || CPU_LOONGSON64
	help
	  Driver for GPIO functionality on Loongson-2F/3A/3B processors.

config GPIO_LOONGSON_64BIT
	tristate "Loongson 64 bit GPIO support"
	depends on LOONGARCH || COMPILE_TEST
	depends on OF_GPIO
	select GPIO_GENERIC
	help
	  Say yes here to support the GPIO functionality of a number of
	  Loongson series of chips. The Loongson GPIO controller supports
	  up to 60 GPIOS in total, 4 of which are dedicated GPIO pins, and
	  the remaining 56 are reused with other functions, with edge or
	  level triggered interrupts.

config GPIO_LPC18XX
	tristate "NXP LPC18XX/43XX GPIO support"
	default y if ARCH_LPC18XX
	depends on OF_GPIO && (ARCH_LPC18XX || COMPILE_TEST)
	select IRQ_DOMAIN_HIERARCHY
	help
	  Select this option to enable GPIO driver for
	  NXP LPC18XX/43XX devices.

config GPIO_LPC32XX
	tristate "NXP LPC32XX GPIO support"
	depends on OF_GPIO && (ARCH_LPC32XX || COMPILE_TEST)
	help
	  Select this option to enable GPIO driver for
	  NXP LPC32XX devices.

config GPIO_MB86S7X
	tristate "GPIO support for Fujitsu MB86S7x Platforms"
	help
	  Say yes here to support the GPIO controller in Fujitsu MB86S70 SoCs.

config GPIO_MENZ127
	tristate "MEN 16Z127 GPIO support"
	depends on MCB
	select GPIO_GENERIC
	help
	  Say yes here to support the MEN 16Z127 GPIO Controller.

config GPIO_MM_LANTIQ
	bool "Lantiq Memory mapped GPIOs"
	depends on LANTIQ && SOC_XWAY
	select OF_GPIO_MM_GPIOCHIP
	help
	  This enables support for memory mapped GPIOs on the External Bus Unit
	  (EBU) found on Lantiq SoCs. The GPIOs are output only as they are
	  created by attaching a 16-bit latch to the bus.

config GPIO_MPC5200
	def_bool y
	depends on PPC_MPC52xx
	select OF_GPIO_MM_GPIOCHIP

config GPIO_MPC8XXX
	bool "MPC512x/MPC8xxx/QorIQ GPIO support"
	depends on PPC_MPC512x || PPC_MPC831x || PPC_MPC834x || PPC_MPC837x || \
		   FSL_SOC_BOOKE || PPC_86xx || ARCH_LAYERSCAPE || ARM || \
		   COMPILE_TEST
	select GPIO_GENERIC
	select IRQ_DOMAIN
	help
	  Say Y here if you're going to use hardware that connects to the
	  MPC512x/831x/834x/837x/8572/8610/QorIQ GPIOs.

config GPIO_MT7621
	bool "Mediatek MT7621 GPIO Support"
	depends on SOC_MT7620 || SOC_MT7621 || COMPILE_TEST
	depends on OF_GPIO
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support the Mediatek MT7621 SoC GPIO device.

config GPIO_MVEBU
	def_bool y
	depends on PLAT_ORION || ARCH_MVEBU
	depends on OF_GPIO
	select GENERIC_IRQ_CHIP
	select REGMAP_MMIO

config GPIO_MXC
	tristate "i.MX GPIO support"
	depends on ARCH_MXC || COMPILE_TEST
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP

config GPIO_MXS
	bool "Freescale MXS GPIO support" if COMPILE_TEST
	depends on ARCH_MXS || COMPILE_TEST
	default y if ARCH_MXS
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP

config GPIO_NOMADIK
	bool "Nomadik GPIO driver"
	depends on ARCH_U8500 || ARCH_NOMADIK || MACH_EYEQ5 || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support the Nomadik SoC GPIO block. This block is also
	  used by the Mobileye EyeQ5 SoC.

	  It handles up to 32 GPIOs per bank, that can all be interrupt sources.
	  It is deeply interconnected with the associated pinctrl driver as GPIO
	  registers handle muxing ("alternate functions") as well.

config GPIO_NPCM_SGPIO
	bool "Nuvoton SGPIO support"
	depends on ARCH_NPCM || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to support Nuvoton NPCM7XX/NPCM8XX SGPIO functionality.

config GPIO_OCTEON
	tristate "Cavium OCTEON GPIO"
	depends on CAVIUM_OCTEON_SOC
	default y
	help
	  Say yes here to support the on-chip GPIO lines on the OCTEON
	  family of SOCs.

config GPIO_OMAP
	tristate "TI OMAP GPIO support" if ARCH_OMAP2PLUS || COMPILE_TEST
	default y if ARCH_OMAP
	depends on ARM
	select GENERIC_IRQ_CHIP
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to enable GPIO support for TI OMAP SoCs.

config GPIO_PL061
	tristate "PrimeCell PL061 GPIO support"
	depends on ARM_AMBA
	select IRQ_DOMAIN
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support the PrimeCell PL061 GPIO device.

config GPIO_PXA
	bool "PXA GPIO support"
	depends on ARCH_PXA || ARCH_MMP || COMPILE_TEST
	help
	  Say yes here to support the PXA GPIO device.

config GPIO_RCAR
	tristate "Renesas R-Car and RZ/G GPIO support"
	depends on ARCH_RENESAS || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support GPIO on Renesas R-Car or RZ/G SoCs.

config GPIO_RDA
	bool "RDA Micro GPIO controller support"
	depends on ARCH_RDA || COMPILE_TEST
	depends on OF_GPIO
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to support RDA Micro GPIO controller.

config GPIO_REALTEK_OTTO
	tristate "Realtek Otto GPIO support"
	depends on MACH_REALTEK_RTL
	default MACH_REALTEK_RTL
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  The GPIO controller on the Otto MIPS platform supports up to two
	  banks of 32 GPIOs, with edge triggered interrupts. The 32 GPIOs
	  are grouped in four 8-bit wide ports.

	  When built as a module, the module will be called realtek_otto_gpio.

config GPIO_REG
	bool
	help
	  A 32-bit single register GPIO fixed in/out implementation.  This
	  can be used to represent any register as a set of GPIO signals.

config GPIO_ROCKCHIP
	tristate "Rockchip GPIO support"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	select GENERIC_IRQ_CHIP
	select GPIOLIB_IRQCHIP
	default ARCH_ROCKCHIP
	help
	  Say yes here to support GPIO on Rockchip SoCs.

config GPIO_RTD
	tristate "Realtek DHC GPIO support"
	depends on ARCH_REALTEK
	default y
	select GPIOLIB_IRQCHIP
	help
	  This option enables support for GPIOs found on Realtek DHC(Digital
	  Home Center) SoCs family, including RTD1295, RTD1315E, RTD1319,
	  RTD1319D, RTD1395, RTD1619 and RTD1619B.

	  Say yes here to support GPIO functionality and GPIO interrupt on
	  Realtek DHC SoCs.

config GPIO_SAMA5D2_PIOBU
	tristate "SAMA5D2 PIOBU GPIO support"
	depends on MFD_SYSCON
	depends on OF_GPIO
	depends on ARCH_AT91 || COMPILE_TEST
	select GPIO_SYSCON
	help
	  Say yes here to use the PIOBU pins as GPIOs.

	  PIOBU pins on the SAMA5D2 can be used as GPIOs.
	  The difference from regular GPIOs is that they
	  maintain their value during backup/self-refresh.

config GPIO_SIFIVE
	tristate "SiFive GPIO support"
	depends on OF_GPIO
	select IRQ_DOMAIN_HIERARCHY
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	select REGMAP_MMIO
	help
	  Say yes here to support the GPIO device on SiFive SoCs.

config GPIO_SIOX
	tristate "SIOX GPIO support"
	depends on SIOX
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support SIOX I/O devices. These are units connected
	  via a SIOX bus and have a number of fixed-direction I/O lines.

config GPIO_SNPS_CREG
	bool "Synopsys GPIO via CREG (Control REGisters) driver"
	depends on ARC || COMPILE_TEST
	depends on OF_GPIO
	help
	  This driver supports GPIOs via CREG on various Synopsys SoCs.
	  This is a single-register MMIO GPIO driver for complex cases
	  where only several fields in register belong to GPIO lines and
	  each GPIO line owns a field with different length and on/off value.

config GPIO_SPEAR_SPICS
	bool "ST SPEAr13xx SPI Chip Select as GPIO support"
	depends on PLAT_SPEAR
	select GENERIC_IRQ_CHIP
	help
	  Say yes here to support ST SPEAr SPI Chip Select as GPIO device.

config GPIO_SPRD
	tristate "Spreadtrum GPIO support"
	depends on ARCH_SPRD || COMPILE_TEST
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Spreadtrum GPIO device.

config GPIO_STP_XWAY
	bool "XWAY STP GPIOs"
	depends on SOC_XWAY || COMPILE_TEST
	depends on OF_GPIO
	help
	  This enables support for the Serial To Parallel (STP) unit found on
	  XWAY SoC. The STP allows the SoC to drive a shift registers cascade,
	  that can be up to 24 bits. This peripheral is aimed at driving LEDs.
	  Some of the GPIOs/LEDs can be auto updated by the SoC with DSL and
	  phy status.

config GPIO_SYSCON
	tristate "GPIO based on SYSCON"
	depends on MFD_SYSCON && OF
	help
	  Say yes here to support GPIO functionality though SYSCON driver.

config GPIO_TANGIER
	tristate
	select GPIOLIB_IRQCHIP
	help
	  GPIO support for Intel Tangier and compatible platforms.
	  Currently supported:
	   - Elkhart Lake
	   - Merrifield

	  If built as a module its name will be gpio-tangier.

config GPIO_TB10X
	bool
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP
	select OF_GPIO

config GPIO_TEGRA
	tristate "NVIDIA Tegra GPIO support"
	default ARCH_TEGRA
	depends on ARCH_TEGRA || COMPILE_TEST
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say yes here to support GPIO pins on NVIDIA Tegra SoCs.

config GPIO_TEGRA186
	tristate "NVIDIA Tegra186 GPIO support"
	default ARCH_TEGRA_186_SOC || ARCH_TEGRA_194_SOC
	depends on ARCH_TEGRA_186_SOC || ARCH_TEGRA_194_SOC || COMPILE_TEST
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say yes here to support GPIO pins on NVIDIA Tegra186 SoCs.

config GPIO_TS4800
	tristate "TS-4800 DIO blocks and compatibles"
	depends on OF_GPIO
	depends on SOC_IMX51 || COMPILE_TEST
	select GPIO_GENERIC
	help
	  This driver support TS-4800 FPGA GPIO controllers.

config GPIO_THUNDERX
	tristate "Cavium ThunderX/OCTEON-TX GPIO"
	depends on ARCH_THUNDER || (64BIT && COMPILE_TEST)
	depends on PCI_MSI
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	select IRQ_FASTEOI_HIERARCHY_HANDLERS
	help
	  Say yes here to support the on-chip GPIO lines on the ThunderX
	  and OCTEON-TX families of SoCs.

config GPIO_UNIPHIER
	tristate "UniPhier GPIO support"
	depends on ARCH_UNIPHIER || COMPILE_TEST
	depends on OF_GPIO
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say yes here to support UniPhier GPIOs.

config GPIO_VF610
	bool "VF610 GPIO support"
	default y if SOC_VF610
	depends on ARCH_MXC || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support i.MX or Vybrid vf610 GPIOs.

config GPIO_VISCONTI
	tristate "Toshiba Visconti GPIO support"
	depends on ARCH_VISCONTI || COMPILE_TEST
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	select GPIO_GENERIC
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say yes here to support GPIO on Tohisba Visconti.

config GPIO_WCD934X
	tristate "Qualcomm Technologies Inc WCD9340/WCD9341 GPIO controller driver"
	depends on MFD_WCD934X && OF_GPIO
	help
         This driver is to support GPIO block found on the Qualcomm Technologies
	 Inc WCD9340/WCD9341 Audio Codec.

config GPIO_XGENE
	bool "APM X-Gene GPIO controller support"
	depends on ARM64 && OF_GPIO
	help
	  This driver is to support the GPIO block within the APM X-Gene SoC
	  platform's generic flash controller. The GPIO pins are muxed with
	  the generic flash controller's address and data pins. Say yes
	  here to enable the GFC GPIO functionality.

config GPIO_XGENE_SB
	tristate "APM X-Gene GPIO standby controller support"
	depends on (ARCH_XGENE || COMPILE_TEST)
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	help
	  This driver supports the GPIO block within the APM X-Gene
	  Standby Domain. Say yes here to enable the GPIO functionality.

config GPIO_XILINX
	tristate "Xilinx GPIO support"
	select GPIOLIB_IRQCHIP
	depends on OF_GPIO
	help
	  Say yes here to support the Xilinx FPGA GPIO device.

config GPIO_XLP
	tristate "Cavium ThunderX2 GPIO support"
	depends on ARCH_THUNDER2 || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	help
	  This driver provides support for GPIO interface on Cavium's ThunderX2
	  CN99XX SoCs (Originally from Netlogic XLP).

	  If unsure, say N.

config GPIO_XTENSA
	bool "Xtensa GPIO32 support"
	depends on XTENSA
	depends on HAVE_XTENSA_GPIO32
	depends on !SMP
	help
	  Say yes here to support the Xtensa internal GPIO32 IMPWIRE (input)
	  and EXPSTATE (output) ports.

config GPIO_ZEVIO
	bool "LSI ZEVIO SoC memory mapped GPIOs"
	depends on ARM
	help
	  Say yes here to support the GPIO controller in LSI ZEVIO SoCs.

config GPIO_ZYNQ
	tristate "Xilinx Zynq GPIO support"
	depends on ARCH_ZYNQ || ARCH_ZYNQMP
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Xilinx Zynq GPIO controller.

config GPIO_ZYNQMP_MODEPIN
	tristate "ZynqMP ps-mode pin GPIO configuration driver"
	depends on ZYNQMP_FIRMWARE
	default ZYNQMP_FIRMWARE
	help
	  Say yes here to support the ZynqMP ps-mode pin GPIO configuration
	  driver.

	  This ps-mode pin GPIO driver is based on GPIO framework. PS_MODE
	  is 4-bits boot mode pins. It sets and gets the status of
	  the ps-mode pin. Every pin can be configured as input/output.

config GPIO_LOONGSON1
	tristate "Loongson1 GPIO support"
	depends on MACH_LOONGSON32
	select GPIO_GENERIC
	help
	  Say Y or M here to support GPIO on Loongson1 SoCs.

config GPIO_AMD_FCH
	tristate "GPIO support for AMD Fusion Controller Hub (G-series SOCs)"
	help
	  This option enables driver for GPIO on AMD's Fusion Controller Hub,
	  as found on G-series SOCs (e.g. GX-412TC).

	  Note: This driver doesn't register itself automatically, as it
	  needs to be provided with platform-specific configuration.
	  (See e.g. CONFIG_PCENGINES_APU2.)

config GPIO_MSC313
	bool "MStar MSC313 GPIO support"
	depends on ARCH_MSTARV7
	default ARCH_MSTARV7
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say Y here to support the main GPIO block on MStar/SigmaStar
	  ARMv7-based SoCs.

config GPIO_IDT3243X
	tristate "IDT 79RC3243X GPIO support"
	depends on MIKROTIK_RB532 || COMPILE_TEST
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Select this option to enable GPIO driver for
	  IDT 79RC3243X-based devices like Mikrotik RB532.

	  To compile this driver as a module, choose M here: the module will
	  be called gpio-idt3243x.

endmenu

menu "Port-mapped I/O GPIO drivers"
	depends on X86 && HAS_IOPORT # I/O space access

config GPIO_VX855
	tristate "VIA VX855/VX875 GPIO"
	depends on PCI
	select MFD_CORE
	select MFD_VX855
	help
	  Support access to the VX855/VX875 GPIO lines through the GPIO library.

	  This driver provides common support for accessing the device.
	  Additional drivers must be enabled in order to use the
	  functionality of the device.

config GPIO_I8255
	tristate
	select GPIO_REGMAP
	help
	  Enables support for the i8255 interface library functions. The i8255
	  interface library provides functions to facilitate communication with
	  interfaces compatible with the venerable Intel 8255 Programmable
	  Peripheral Interface (PPI). The Intel 8255 PPI chip was first released
	  in the early 1970s but compatible interfaces are nowadays typically
	  found embedded in larger VLSI processing chips and FPGA components.

	  If built as a module its name will be gpio-i8255.

config GPIO_104_DIO_48E
	tristate "ACCES 104-DIO-48E GPIO support"
	depends on PC104
	select ISA_BUS_API
	select REGMAP_MMIO
	select REGMAP_IRQ
	select GPIOLIB_IRQCHIP
	select GPIO_I8255
	select I8254
	help
	  Enables GPIO support for the ACCES 104-DIO-48E series (104-DIO-48E,
	  104-DIO-24E). The base port addresses for the devices may be
	  configured via the base module parameter. The interrupt line numbers
	  for the devices may be configured via the irq module parameter.

config GPIO_104_IDIO_16
	tristate "ACCES 104-IDIO-16 GPIO support"
	depends on PC104
	select ISA_BUS_API
	select REGMAP_MMIO
	select GPIO_IDIO_16
	help
	  Enables GPIO support for the ACCES 104-IDIO-16 family (104-IDIO-16,
	  104-IDIO-16E, 104-IDO-16, 104-IDIO-8, 104-IDIO-8E, 104-IDO-8). The
	  base port addresses for the devices may be configured via the base
	  module parameter. The interrupt line numbers for the devices may be
	  configured via the irq module parameter.

config GPIO_104_IDI_48
	tristate "ACCES 104-IDI-48 GPIO support"
	depends on PC104
	select ISA_BUS_API
	select REGMAP_MMIO
	select REGMAP_IRQ
	select GPIOLIB_IRQCHIP
	select GPIO_REGMAP
	help
	  Enables GPIO support for the ACCES 104-IDI-48 family (104-IDI-48A,
	  104-IDI-48AC, 104-IDI-48B, 104-IDI-48BC). The base port addresses for
	  the devices may be configured via the base module parameter. The
	  interrupt line numbers for the devices may be configured via the irq
	  module parameter.

config GPIO_F7188X
	tristate "Fintek and Nuvoton Super-I/O GPIO support"
	help
	  This option enables support for GPIOs found on Fintek Super-I/O
	  chips F71869, F71869A, F71882FG, F71889F and F81866.
	  As well as Nuvoton Super-I/O chip NCT6126D.

	  To compile this driver as a module, choose M here: the module will
	  be called f7188x-gpio.

config GPIO_GPIO_MM
	tristate "Diamond Systems GPIO-MM GPIO support"
	depends on PC104
	select ISA_BUS_API
	select REGMAP_MMIO
	select GPIO_I8255
	help
	  Enables GPIO support for the Diamond Systems GPIO-MM and GPIO-MM-12.

	  The Diamond Systems GPIO-MM device features 48 lines of digital I/O
	  via the emulation of dual 82C55A PPI chips. This driver provides GPIO
	  support for these 48 channels of digital I/O.

	  The base port addresses for the devices may be configured via the base
	  array module parameter.

config GPIO_IT87
	tristate "IT87xx GPIO support"
	help
	  Say yes here to support GPIO functionality of IT87xx Super I/O chips.

	  This driver is tested with ITE IT8728 and IT8732 Super I/O chips, and
	  supports the IT8761E, IT8613, IT8620E, and IT8628E Super I/O chips as
	  well.

	  To compile this driver as a module, choose M here: the module will
	  be called gpio_it87.

config GPIO_SCH
	tristate "Intel SCH/TunnelCreek/Centerton/Quark X1000 GPIO"
	depends on (X86 || COMPILE_TEST) && ACPI
	depends on LPC_SCH
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support GPIO interface on Intel Poulsbo SCH,
	  Intel Tunnel Creek processor, Intel Centerton processor or
	  Intel Quark X1000 SoC.

	  The Intel SCH contains a total of 14 GPIO pins. Ten GPIOs are
	  powered by the core power rail and are turned off during sleep
	  modes (S3 and higher). The remaining four GPIOs are powered by
	  the Intel SCH suspend power supply. These GPIOs remain
	  active during S3. The suspend-powered GPIOs can be used to wake the
	  system from the Suspend-to-RAM state.

	  The Intel Tunnel Creek processor has 5 GPIOs powered by the
	  core power rail and 9 from suspend power supply.

	  The Intel Centerton processor has a total of 30 GPIO pins.
	  Twenty-one are powered by the core power rail and 9 from the
	  suspend power supply.

	  The Intel Quark X1000 SoC has 2 GPIOs powered by the core
	  power well and 6 from the suspend power well.

config GPIO_SCH311X
	tristate "SMSC SCH311x SuperI/O GPIO"
	help
	  Driver to enable the GPIOs found on SMSC SMSC SCH3112, SCH3114 and
	  SCH3116 "Super I/O" chipsets.

	  To compile this driver as a module, choose M here: the module will
	  be called gpio-sch311x.

config GPIO_TS5500
	tristate "TS-5500 DIO blocks and compatibles"
	depends on TS5500 || COMPILE_TEST
	help
	  This driver supports Digital I/O exposed by pin blocks found on some
	  Technologic Systems platforms. It includes, but is not limited to, 3
	  blocks of the TS-5500: DIO1, DIO2 and the LCD port, and the TS-5600
	  LCD port.

config GPIO_WINBOND
	tristate "Winbond Super I/O GPIO support"
	select ISA_BUS_API
	help
	  This option enables support for GPIOs found on Winbond Super I/O
	  chips.
	  Currently, only W83627UHG (also known as Nuvoton NCT6627UD) is
	  supported.

	  You will need to provide a module parameter "gpios", or a
	  boot-time parameter "gpio_winbond.gpios" with a bitmask of GPIO
	  ports to enable (bit 0 is GPIO1, bit 1 is GPIO2, etc.).

	  To compile this driver as a module, choose M here: the module will
	  be called gpio-winbond.

config GPIO_WS16C48
	tristate "WinSystems WS16C48 GPIO support"
	select ISA_BUS_API
	select REGMAP_IRQ
	select REGMAP_MMIO
	select GPIOLIB_IRQCHIP
	select GPIO_REGMAP
	help
	  Enables GPIO support for the WinSystems WS16C48. The base port
	  addresses for the devices may be configured via the base module
	  parameter. The interrupt line numbers for the devices may be
	  configured via the irq module parameter.

endmenu

menu "I2C GPIO expanders"
	depends on I2C

config GPIO_ADNP
	tristate "Avionic Design N-bit GPIO expander"
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	help
	  This option enables support for N GPIOs found on Avionic Design
	  I2C GPIO expanders. The register space will be extended by powers
	  of two, so the controller will need to accommodate for that. For
	  example: if a controller provides 48 pins, 6 registers will be
	  enough to represent all pins, but the driver will assume a
	  register layout for 64 pins (8 registers).

config GPIO_FXL6408
	tristate "FXL6408 I2C GPIO expander"
	select GPIO_REGMAP
	select REGMAP_I2C
	help
	  GPIO driver for Fairchild Semiconductor FXL6408 GPIO expander.

	  To compile this driver as a module, choose M here: the module will
	  be called gpio-fxl6408.

config GPIO_DS4520
	tristate "DS4520 I2C GPIO expander"
	select REGMAP_I2C
	select GPIO_REGMAP
	help
	  GPIO driver for ADI DS4520 I2C-based GPIO expander.
	  Say yes here to enable the GPIO driver for the ADI DS4520 chip.

	  To compile this driver as a module, choose M here: the module will
	  be called gpio-ds4520.

config GPIO_GW_PLD
	tristate "Gateworks PLD GPIO Expander"
	depends on OF_GPIO
	help
	  Say yes here to provide access to the Gateworks I2C PLD GPIO
	  Expander. This is used at least on the Cambria GW2358-4.

config GPIO_MAX7300
	tristate "Maxim MAX7300 GPIO expander"
	select GPIO_MAX730X
	help
	  GPIO driver for Maxim MAX7300 I2C-based GPIO expander.

config GPIO_MAX732X
	tristate "MAX7319, MAX7320-7327 I2C Port Expanders"
	help
	  Say yes here to support the MAX7319, MAX7320-7327 series of I2C
	  Port Expanders. Each IO port on these chips has a fixed role of
	  Input (designated by 'I'), Push-Pull Output ('O'), or Open-Drain
	  Input and Output (designed by 'P'). The combinations are listed
	  below:

	  8 bits:       max7319 (8I), max7320 (8O), max7321 (8P),
	                max7322 (4I4O), max7323 (4P4O)

	  16 bits:      max7324 (8I8O), max7325 (8P8O),
	                max7326 (4I12O), max7327 (4P12O)

	  Board setup code must specify the model to use, and the start
	  number for these GPIOs.

config GPIO_MAX732X_IRQ
	bool "Interrupt controller support for MAX732x"
	depends on GPIO_MAX732X=y
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to enable the max732x to be used as an interrupt
	  controller. It requires the driver to be built in the kernel.

config GPIO_PCA953X
	tristate "PCA95[357]x, PCA9698, TCA64xx, and MAX7310 I/O ports"
	select REGMAP_I2C
	help
	  Say yes here to provide access to several register-oriented
	  SMBus I/O expanders, made mostly by NXP or TI.  Compatible
	  models include:

	  4 bits:       pca9536, pca9537

	  8 bits:       max7310, max7315, pca6107, pca9534, pca9538, pca9554,
	                pca9556, pca9557, pca9574, tca6408, tca9554, xra1202

	  16 bits:      max7312, max7313, pca9535, pca9539, pca9555, pca9575,
	                tca6416

	  24 bits:      tca6424

	  40 bits:      pca9505, pca9698

config GPIO_PCA953X_IRQ
	bool "Interrupt controller support for PCA953x"
	depends on GPIO_PCA953X
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to enable the pca953x to be used as an interrupt
	  controller.

config GPIO_PCA9570
	tristate "PCA9570 4-Bit I2C GPO expander"
	help
	  Say yes here to enable the GPO driver for the NXP PCA9570 chip.

	  To compile this driver as a module, choose M here: the module will
	  be called gpio-pca9570.

config GPIO_PCF857X
	tristate "PCF857x, PCA{85,96}7x, and MAX732[89] I2C GPIO expanders"
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN
	help
	  Say yes here to provide access to most "quasi-bidirectional" I2C
	  GPIO expanders used for additional digital outputs or inputs.
	  Most of these parts are from NXP, though TI is a second source for
	  some of them.  Compatible models include:

	  8 bits:   pcf8574, pcf8574a, pca8574, pca8574a,
	            pca9670, pca9672, pca9674, pca9674a,
	            max7328, max7329

	  16 bits:  pcf8575, pcf8575c, pca8575,
	            pca9671, pca9673, pca9675

	  Your board setup code will need to declare the expanders in
	  use, and assign numbers to the GPIOs they expose.  Those GPIOs
	  can then be used from drivers and other kernel code, just like
	  other GPIOs, but only accessible from task contexts.

	  This driver provides an in-kernel interface to those GPIOs using
	  platform-neutral GPIO calls.

config GPIO_TPIC2810
	tristate "TPIC2810 8-Bit I2C GPO expander"
	help
	  Say yes here to enable the GPO driver for the TI TPIC2810 chip.

	  To compile this driver as a module, choose M here: the module will
	  be called gpio-tpic2810.

config GPIO_TS4900
	tristate "Technologic Systems FPGA I2C GPIO"
	depends on SOC_IMX6 || COMPILE_TEST
	select REGMAP_I2C
	help
	  Say yes here to enabled the GPIO driver for Technologic's FPGA core.
	  Series supported include TS-4100, TS-4900, TS-7970 and TS-7990.

endmenu

menu "MFD GPIO expanders"

config GPIO_ADP5520
	tristate "GPIO Support for ADP5520 PMIC"
	depends on PMIC_ADP5520
	help
	  This option enables support for on-chip GPIO found
	  on Analog Devices ADP5520 PMICs.

config GPIO_ALTERA_A10SR
	tristate "Altera Arria10 System Resource GPIO"
	depends on MFD_ALTERA_A10SR
	help
	  Driver for Arria10 Development Kit GPIO expansion which
	  includes reads of pushbuttons and DIP switches as well
	  as writes to LEDs.

config GPIO_ARIZONA
	tristate "Wolfson Microelectronics Arizona class devices"
	depends on MFD_ARIZONA
	help
	  Support for GPIOs on Wolfson Arizona class devices.

config GPIO_BD71815
	tristate "ROHM BD71815 PMIC GPIO support"
	depends on MFD_ROHM_BD71828
	help
	  Support for GPO(s) on ROHM BD71815 PMIC. There are two GPOs
	  available on the ROHM PMIC.

	  This driver can also be built as a module. If so, the module
	  will be called gpio-bd71815.

config GPIO_BD71828
	tristate "ROHM BD71828 GPIO support"
	depends on MFD_ROHM_BD71828
	help
	  Support for GPIOs on ROHM BD71828 PMIC. There are three GPIOs
	  available on the ROHM PMIC in total. The GPIOs are limited to
	  outputs only and pins must be configured to GPIO outputs by
	  OTP. Enable this only if you want to use these pins as outputs.

	  This driver can also be built as a module. If so, the module
	  will be called gpio-bd71828.

config GPIO_BD9571MWV
	tristate "ROHM BD9571 GPIO support"
	depends on MFD_BD9571MWV
	help
	  Support for GPIOs on ROHM BD9571 PMIC. There are two GPIOs
	  available on the ROHM PMIC in total, both of which can also
	  generate interrupts.

	  This driver can also be built as a module. If so, the module
	  will be called gpio-bd9571mwv.

config GPIO_CROS_EC
	tristate "ChromeOS EC GPIO support"
	depends on CROS_EC
	help
	  GPIO driver for the ChromeOS Embedded Controller (EC). GPIOs
	  cannot be set unless the system is unlocked.

	  This driver can also be built as a module. If so, the module
	  will be called gpio-cros-ec.

config GPIO_CRYSTAL_COVE
	tristate "GPIO support for Crystal Cove PMIC"
	depends on (X86 || COMPILE_TEST) && INTEL_SOC_PMIC
	select GPIOLIB_IRQCHIP
	help
	  Support for GPIO pins on Crystal Cove PMIC.

	  Say Yes if you have a Intel SoC-based tablet with Crystal Cove PMIC
	  inside.

	  This driver can also be built as a module. If so, the module will be
	  called gpio-crystalcove.

config GPIO_CS5535
	tristate "AMD CS5535/CS5536 GPIO support"
	depends on X86 || MIPS || COMPILE_TEST
	depends on MFD_CS5535
	help
	  The AMD CS5535 and CS5536 southbridges support 28 GPIO pins that
	  can be used for quite a number of things.  The CS5535/6 is found on
	  AMD Geode and Lemote Yeeloong devices.

	  If unsure, say N.

config GPIO_DA9052
	tristate "Dialog DA9052 GPIO"
	depends on PMIC_DA9052
	help
	  Say yes here to enable the GPIO driver for the DA9052 chip.

config GPIO_DA9055
	tristate "Dialog Semiconductor DA9055 GPIO"
	depends on MFD_DA9055
	help
	  Say yes here to enable the GPIO driver for the DA9055 chip.

	  The Dialog DA9055 PMIC chip has 3 GPIO pins that can be
	  be controlled by this driver.

	  If driver is built as a module it will be called gpio-da9055.

config GPIO_DLN2
	tristate "Diolan DLN2 GPIO support"
	depends on MFD_DLN2
	select GPIOLIB_IRQCHIP

	help
	  Select this option to enable GPIO driver for the Diolan DLN2
	  board.

	  This driver can also be built as a module. If so, the module
	  will be called gpio-dln2.

config HTC_EGPIO
	bool "HTC EGPIO support"
	depends on ARM
	help
	  This driver supports the CPLD egpio chip present on
	  several HTC phones.  It provides basic support for input
	  pins, output pins, and IRQs.

config GPIO_ELKHARTLAKE
	tristate "Intel Elkhart Lake PSE GPIO support"
	depends on X86 || COMPILE_TEST
	select GPIO_TANGIER
	help
	  Select this option to enable GPIO support for Intel Elkhart Lake
	  PSE GPIO IP.

	  To compile this driver as a module, choose M here: the module will
	  be called gpio-elkhartlake.

config GPIO_JANZ_TTL
	tristate "Janz VMOD-TTL Digital IO Module"
	depends on MFD_JANZ_CMODIO
	help
	  This enables support for the Janz VMOD-TTL Digital IO module.
	  This driver provides support for driving the pins in output
	  mode only. Input mode is not supported.

config GPIO_KEMPLD
	tristate "Kontron ETX / COMexpress GPIO"
	depends on MFD_KEMPLD
	help
	  This enables support for the PLD GPIO interface on some Kontron ETX
	  and COMexpress (ETXexpress) modules.

	  This driver can also be built as a module. If so, the module will be
	  called gpio-kempld.

config GPIO_LJCA
	tristate "INTEL La Jolla Cove Adapter GPIO support"
	depends on USB_LJCA
	select GPIOLIB_IRQCHIP
	default USB_LJCA
	help
	  Select this option to enable GPIO driver for the INTEL
	  La Jolla Cove Adapter (LJCA) board.

	  This driver can also be built as a module. If so, the module
	  will be called gpio-ljca.

config GPIO_LP3943
	tristate "TI/National Semiconductor LP3943 GPIO expander"
	depends on MFD_LP3943
	help
	  GPIO driver for LP3943 MFD.
	  LP3943 can be used as a GPIO expander which provides up to 16 GPIOs.
	  Open drain outputs are required for this usage.

config GPIO_LP873X
	tristate "TI LP873X GPO"
	depends on MFD_TI_LP873X
	help
	  This driver supports the GPO on TI Lp873x PMICs. 2 GPOs are present
	  on LP873X PMICs.

	  This driver can also be built as a module. If so, the module will be
	  called gpio-lp873x.

config GPIO_LP87565
	tristate "TI LP87565 GPIO"
	depends on MFD_TI_LP87565
	help
	  This driver supports the GPIO on TI Lp873565 PMICs. 3 GPIOs are present
	  on LP87565 PMICs.

	  This driver can also be built as a module. If so, the module will be
	  called gpio-lp87565.

config GPIO_MADERA
	tristate "Cirrus Logic Madera class codecs"
	depends on PINCTRL_MADERA
	help
	  Support for GPIOs on Cirrus Logic Madera class codecs.

config GPIO_MAX77620
	tristate "GPIO support for PMIC MAX77620 and MAX20024"
	depends on MFD_MAX77620
	select GPIOLIB_IRQCHIP
	help
	  GPIO driver for MAX77620 and MAX20024 PMIC from Maxim Semiconductor.
	  MAX77620 PMIC has 8 pins that can be configured as GPIOs. The
	  driver also provides interrupt support for each of the GPIOs.
	  Say yes here to enable the max77620 to be used as GPIO controller.

config GPIO_MAX77650
	tristate "Maxim MAX77650/77651 GPIO support"
	depends on MFD_MAX77650
	help
	  GPIO driver for MAX77650/77651 PMIC from Maxim Semiconductor.
	  These chips have a single pin that can be configured as GPIO.

config GPIO_PALMAS
	bool "TI PALMAS series PMICs GPIO"
	depends on MFD_PALMAS
	help
	  Select this option to enable GPIO driver for the TI PALMAS
	  series chip family.

config GPIO_PMIC_EIC_SPRD
	tristate "Spreadtrum PMIC EIC support"
	depends on MFD_SC27XX_PMIC || COMPILE_TEST
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Spreadtrum PMIC EIC device.

config GPIO_RC5T583
	bool "RICOH RC5T583 GPIO"
	depends on MFD_RC5T583
	help
	  Select this option to enable GPIO driver for the Ricoh RC5T583
	  chip family.
	  This driver provides the support for driving/reading the GPIO pins
	  of RC5T583 device through standard GPIO library.

config GPIO_SL28CPLD
	tristate "Kontron sl28cpld GPIO support"
	depends on MFD_SL28CPLD || COMPILE_TEST
	select GPIO_REGMAP
	select GPIOLIB_IRQCHIP
	select REGMAP_IRQ
	help
	  This enables support for the GPIOs found on the Kontron sl28 CPLD.

	  This driver can also be built as a module. If so, the module will be
	  called gpio-sl28cpld.

config GPIO_STMPE
	bool "STMPE GPIOs"
	depends on MFD_STMPE
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	help
	  This enables support for the GPIOs found on the STMPE I/O
	  Expanders.

config GPIO_TC3589X
	bool "TC3589X GPIOs"
	depends on MFD_TC3589X
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	help
	  This enables support for the GPIOs found on the TC3589X
	  I/O Expander.

config GPIO_TIMBERDALE
	bool "Support for timberdale GPIO IP"
	depends on MFD_TIMBERDALE
	help
	Add support for the GPIO IP in the timberdale FPGA.

config GPIO_TN48M_CPLD
	tristate "Delta Networks TN48M switch CPLD GPIO driver"
	depends on MFD_TN48M_CPLD
	select GPIO_REGMAP
	help
	  This enables support for the GPIOs found on the Delta
	  Networks TN48M switch Lattice CPLD. It provides 12 pins in total,
	  they are input-only or output-only type.

	  This driver can also be built as a module. If so, the
	  module will be called gpio-tn48m.

config GPIO_TPS65086
	tristate "TI TPS65086 GPO"
	depends on MFD_TPS65086
	help
	  This driver supports the GPO on TI TPS65086x PMICs.

config GPIO_TPS65218
	tristate "TPS65218 GPIO"
	depends on MFD_TPS65218
	help
	  Select this option to enable GPIO driver for the TPS65218
	  chip family.

config GPIO_TPS65219
	tristate "TPS65219 GPIO"
	depends on MFD_TPS65219
	default MFD_TPS65219
	help
	  Select this option to enable GPIO driver for the TPS65219 chip
	  family.
	  GPIO0 is statically configured as either input or output prior to
	  Linux boot. It is used for MULTI_DEVICE_ENABLE function. This setting
	  is statically configured by NVM. GPIO0 can't be used as a generic
	  GPIO. It's either a GPO when MULTI_DEVICE_EN=0 or a GPI when
	  MULTI_DEVICE_EN=1.

	  This driver can also be built as a module. If so, the module will be
	  called gpio_tps65219.

config GPIO_TPS6586X
	bool "TPS6586X GPIO"
	depends on MFD_TPS6586X
	help
	  Select this option to enable GPIO driver for the TPS6586X
	  chip family.

config GPIO_TPS65910
	bool "TPS65910 GPIO"
	depends on MFD_TPS65910
	help
	  Select this option to enable GPIO driver for the TPS65910
	  chip family.

config GPIO_TPS65912
	tristate "TI TPS65912 GPIO"
	depends on MFD_TPS65912
	help
	  This driver supports TPS65912 GPIO chip.

config GPIO_TPS68470
	tristate "TPS68470 GPIO"
	depends on INTEL_SKL_INT3472
	help
	  Select this option to enable GPIO driver for the TPS68470
	  chip family.
	  There are 7 GPIOs and few sensor-related GPIOs supported
	  by the TPS68470. While the 7 GPIOs can be configured as
	  input or output as appropriate, the sensor related GPIOs
	  are "output only" GPIOs.

config GPIO_TQMX86
	tristate "TQ-Systems QTMX86 GPIO"
	depends on MFD_TQMX86 || COMPILE_TEST
	depends on HAS_IOPORT_MAP
	select GPIOLIB_IRQCHIP
	help
	  This driver supports GPIO on the TQMX86 IO controller.

config GPIO_TWL4030
	tristate "TWL4030, TWL5030, and TPS659x0 GPIOs"
	depends on TWL4030_CORE
	help
	  Say yes here to access the GPIO signals of various multi-function
	  power management chips from Texas Instruments.

config GPIO_TWL6040
	tristate "TWL6040 GPO"
	depends on TWL6040_CORE
	help
	  Say yes here to access the GPO signals of twl6040
	  audio chip from Texas Instruments.

config GPIO_WHISKEY_COVE
	tristate "GPIO support for Whiskey Cove PMIC"
	depends on (X86 || COMPILE_TEST) && INTEL_SOC_PMIC_BXTWC
	select GPIOLIB_IRQCHIP
	help
	  Support for GPIO pins on Whiskey Cove PMIC.

	  Say Yes if you have an Intel SoC-based tablet with Whiskey Cove PMIC
	  inside.

	  This driver can also be built as a module. If so, the module will be
	  called gpio-wcove.

config GPIO_WM831X
	tristate "WM831x GPIOs"
	depends on MFD_WM831X
	help
	  Say yes here to access the GPIO signals of WM831x power management
	  chips from Wolfson Microelectronics.

config GPIO_WM8350
	tristate "WM8350 GPIOs"
	depends on MFD_WM8350
	help
	  Say yes here to access the GPIO signals of WM8350 power management
	  chips from Wolfson Microelectronics.

config GPIO_WM8994
	tristate "WM8994 GPIOs"
	depends on MFD_WM8994
	help
	  Say yes here to access the GPIO signals of WM8994 audio hub
	  CODECs from Wolfson Microelectronics.

endmenu

menu "PCI GPIO expanders"
	depends on PCI

config GPIO_AMD8111
	tristate "AMD 8111 GPIO driver"
	depends on X86 || COMPILE_TEST
	depends on HAS_IOPORT_MAP
	help
	  The AMD 8111 southbridge contains 32 GPIO pins which can be used.

	  Note that usually system firmware/ACPI handles GPIO pins on their
	  own and users might easily break their systems with uncareful usage
	  of this driver!

	  If unsure, say N

config GPIO_BT8XX
	tristate "BT8XX GPIO abuser"
	depends on VIDEO_BT848=n
	help
	  The BT8xx frame grabber chip has 24 GPIO pins that can be abused
	  as a cheap PCI GPIO card.

	  This chip can be found on Miro, Hauppauge and STB TV-cards.

	  The card needs to be physically altered for using it as a
	  GPIO card. For more information on how to build a GPIO card
	  from a BT8xx TV card, see the documentation file at
	  Documentation/driver-api/gpio/bt8xxgpio.rst

	  If unsure, say N.

config GPIO_MERRIFIELD
	tristate "Intel Merrifield GPIO support"
	depends on X86_INTEL_MID
	select GPIO_TANGIER
	help
	  Say Y here to support Intel Merrifield GPIO.

config GPIO_MLXBF
	tristate "Mellanox BlueField SoC GPIO"
	depends on (MELLANOX_PLATFORM && ARM64 && ACPI) || (64BIT && COMPILE_TEST)
	select GPIO_GENERIC
	help
	  Say Y here if you want GPIO support on Mellanox BlueField SoC.

config GPIO_MLXBF2
	tristate "Mellanox BlueField 2 SoC GPIO"
	depends on (MELLANOX_PLATFORM && ARM64 && ACPI) || (64BIT && COMPILE_TEST)
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say Y here if you want GPIO support on Mellanox BlueField 2 SoC.

config GPIO_MLXBF3
	tristate "Mellanox BlueField 3 SoC GPIO"
	depends on (MELLANOX_PLATFORM && ARM64) || COMPILE_TEST
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say Y if you want GPIO support on Mellanox BlueField 3 SoC.
	  This GPIO controller supports interrupt handling and enables the
	  manipulation of certain GPIO pins.
	  This controller should be used in parallel with pinctrl-mlxbf3 to
	  control the desired GPIOs.
	  This driver can also be built as a module called mlxbf3-gpio.

config GPIO_ML_IOH
	tristate "OKI SEMICONDUCTOR ML7213 IOH GPIO support"
	depends on X86 || COMPILE_TEST
	select GENERIC_IRQ_CHIP
	help
	  ML7213 is companion chip for Intel Atom E6xx series.
	  This driver can be used for OKI SEMICONDUCTOR ML7213 IOH (Input/Output
	  Hub) which is for IVI (In-Vehicle Infotainment) use.
	  This driver can access the IOH's GPIO device.

config GPIO_PCH
	tristate "Intel EG20T PCH/LAPIS Semiconductor IOH (ML7223/ML7831) GPIO"
	depends on X86_32 || MIPS || COMPILE_TEST
	select GENERIC_IRQ_CHIP
	help
	  This driver is for PCH (Platform Controller Hub) GPIO of Intel Topcliff,
	  which is an IOH (Input/Output Hub) for x86 embedded processor.
	  This driver can access PCH GPIO device.

	  This driver also can be used for LAPIS Semiconductor IOH (Input/
	  Output Hub), ML7223 and ML7831.
	  ML7223 IOH is for MP (Media Phone) use.
	  ML7831 IOH is for general purpose use.
	  ML7223/ML7831 is companion chip for Intel Atom E6xx series.
	  ML7223/ML7831 is completely compatible for Intel EG20T PCH.

config GPIO_PCI_IDIO_16
	tristate "ACCES PCI-IDIO-16 GPIO support"
	select REGMAP_MMIO
	select GPIO_IDIO_16
	help
	  Enables GPIO support for the ACCES PCI-IDIO-16. An interrupt is
	  generated when any of the inputs change state (low to high or high to
	  low). Input filter control is not supported by this driver, and the
	  input filters are deactivated by this driver.

config GPIO_PCIE_IDIO_24
	tristate "ACCES PCIe-IDIO-24 GPIO support"
	select REGMAP_IRQ
	select REGMAP_MMIO
	select GPIOLIB_IRQCHIP
	select GPIO_REGMAP
	help
	  Enables GPIO support for the ACCES PCIe-IDIO-24 family (PCIe-IDIO-24,
	  PCIe-IDI-24, PCIe-IDO-24, PCIe-IDIO-12). An interrupt is generated
	  when any of the inputs change state (low to high or high to low).
	  Input filter control is not supported by this driver, and the input
	  filters are deactivated by this driver.

config GPIO_RDC321X
	tristate "RDC R-321x GPIO support"
	select MFD_CORE
	select MFD_RDC321X
	help
	  Support for the RDC R321x SoC GPIOs over southbridge
	  PCI configuration space.

config GPIO_SODAVILLE
	bool "Intel Sodaville GPIO support"
	depends on X86 && OF
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP
	help
	  Say Y here to support Intel Sodaville GPIO.

endmenu

menu "SPI GPIO expanders"
	depends on SPI_MASTER

config GPIO_74X164
	tristate "74x164 serial-in/parallel-out 8-bits shift register"
	depends on OF_GPIO
	help
	  Driver for 74x164 compatible serial-in/parallel-out 8-outputs
	  shift registers. This driver can be used to provide access
	  to more GPIO outputs.

config GPIO_MAX3191X
	tristate "Maxim MAX3191x industrial serializer"
	select CRC8
	help
	  GPIO driver for Maxim MAX31910, MAX31911, MAX31912, MAX31913,
	  MAX31953 and MAX31963 industrial serializer, a daisy-chainable
	  chip to make 8 digital 24V inputs available via SPI.  Supports
	  CRC checksums to guard against electromagnetic interference,
	  as well as undervoltage and overtemperature detection.

config GPIO_MAX7301
	tristate "Maxim MAX7301 GPIO expander"
	select GPIO_MAX730X
	help
	  GPIO driver for Maxim MAX7301 SPI-based GPIO expander.

config GPIO_MC33880
	tristate "Freescale MC33880 high-side/low-side switch"
	help
	  SPI driver for Freescale MC33880 high-side/low-side switch.
	  This provides GPIO interface supporting inputs and outputs.

config GPIO_PISOSR
	tristate "Generic parallel-in/serial-out shift register"
	help
	  GPIO driver for SPI compatible parallel-in/serial-out shift
	  registers. These are input only devices.

config GPIO_XRA1403
	tristate "EXAR XRA1403 16-bit GPIO expander"
	select REGMAP_SPI
	help
	  GPIO driver for EXAR XRA1403 16-bit SPI-based GPIO expander.

config GPIO_MOXTET
	tristate "Turris Mox Moxtet bus GPIO expander"
	depends on MOXTET
	help
	  Say yes here if you are building for the Turris Mox router.
	  This is the driver needed for configuring the GPIOs via the Moxtet
	  bus. For example the Mox module with SFP cage needs this driver
	  so that phylink can use corresponding GPIOs.

endmenu

menu "USB GPIO expanders"
	depends on USB

config GPIO_VIPERBOARD
	tristate "Viperboard GPIO a & b support"
	depends on MFD_VIPERBOARD
	help
	  Say yes here to access the GPIO signals of Nano River
	  Technologies Viperboard. There are two GPIO chips on the
	  board: gpioa and gpiob.
	  See viperboard API specification and Nano
	  River Tech's viperboard.h for detailed meaning
	  of the module parameters.

endmenu

menu "Virtual GPIO drivers"

config GPIO_AGGREGATOR
	tristate "GPIO Aggregator"
	help
	  Say yes here to enable the GPIO Aggregator, which provides a way to
	  aggregate existing GPIO lines into a new virtual GPIO chip.
	  This can serve the following purposes:
	    - Assign permissions for a collection of GPIO lines to a user,
	    - Export a collection of GPIO lines to a virtual machine,
	    - Provide a generic driver for a GPIO-operated device in an
	      industrial control context, to be operated from userspace using
	      the GPIO chardev interface.

config GPIO_LATCH
	tristate "GPIO latch driver"
	help
	  Say yes here to enable a driver for GPIO multiplexers based on latches
	  connected to other GPIOs.

config GPIO_MOCKUP
	tristate "GPIO Testing Driver (DEPRECATED)"
	select IRQ_SIM
	help
	  This module is DEPRECATED. Please consider using gpio-sim instead.

	  This enables GPIO Testing driver, which provides a way to test GPIO
	  subsystem through sysfs (or char device) and debugfs.
	  User could use it through the script in
	  tools/testing/selftests/gpio/gpio-mockup.sh. Reference the usage in
	  it.

config GPIO_VIRTIO
	tristate "VirtIO GPIO support"
	depends on VIRTIO
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to enable guest support for virtio-based GPIO controllers.

	  These virtual GPIOs can be routed to real GPIOs or attached to
	  simulators on the host (like QEMU).

config GPIO_SIM
	tristate "GPIO Simulator Module"
	select IRQ_SIM
	select CONFIGFS_FS
	help
	  This enables the GPIO simulator - a configfs-based GPIO testing
	  driver.

endmenu

endif
