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

config ARCH_HAVE_CUSTOM_GPIO_H
	bool
	help
	  Selecting this config option from the architecture Kconfig allows
	  the architecture to provide a custom asm/gpio.h implementation
	  overriding the default implementations.  New uses of this are
	  strongly discouraged.

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 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
	depends on 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

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
	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
	  Require 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 OF_GPIO && (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
	bool "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_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
	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 && ACPI) || 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 support 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 (eg Ibex Peak), Series 6/C200 (eg
	  Cougar Point), NM10 (Tiger Point), and 3100 (Whitmore Lake).

	  If unsure, say N.

config GPIO_IOP
	tristate "Intel IOP GPIO"
	depends on ARCH_IOP32X || COMPILE_TEST
	select GPIO_GENERIC
	help
	  Say yes here to support the GPIO functionality of a number of Intel
	  IOP32X or IOP33X.

	  If unsure, say N.

config GPIO_IXP4XX
	bool "Intel IXP4xx GPIO"
	depends on ARM # For <asm/mach-types.h>
	depends on ARCH_IXP4XX
	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_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
	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 16bit latch to the bus.

config GPIO_MPC5200
	def_bool y
	depends on PPC_MPC52xx

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_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_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_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 GPIOLIB_IRQCHIP
	default ARCH_ROCKCHIP
	help
	  Say yes here to support GPIO on Rockchip SoCs.

config GPIO_SAMA5D2_PIOBU
	tristate "SAMA5D2 PIOBU GPIO support"
	depends on MFD_SYSCON
	depends on OF_GPIO
	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
	bool "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_STA2X11
	bool "STA2x11/ConneXt GPIO support"
	depends on MFD_STA2X11
	select GENERIC_IRQ_CHIP
	help
	  Say yes here to support the STA2x11/ConneXt GPIO device.
	  The GPIO module has 128 GPIO pins with alternate functions.

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 bit. 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_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
	def_bool y
	depends on ARCH_MXC && SOC_VF610
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support 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_VR41XX
	tristate "NEC VR4100 series General-purpose I/O Uint support"
	depends on CPU_VR41XX
	help
	  Say yes here to support the NEC VR4100 series General-purpose I/O Uint

config GPIO_VX855
	tristate "VIA VX855/VX875 GPIO"
	depends on (X86 || COMPILE_TEST) && 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_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 "Netlogic XLP GPIO support"
	depends on OF_GPIO && (CPU_XLP || ARCH_THUNDER2 || COMPILE_TEST)
	select GPIOLIB_IRQCHIP
	help
	  This driver provides support for GPIO interface on Netlogic XLP MIPS64
	  SoCs. Currently supported XLP variants are XLP8XX, XLP3XX, XLP2XX,
	  XLP9XX and XLP5XX. The same GPIO controller block is also present in
	  Cavium's ThunderX2 CN99XX SoCs.

	  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 && OF_GPIO
	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_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 AMDs Fusion Controller Hub,
	  as found on G-series SOCs (eg. GX-412TC)

	  Note: This driver doesn't registers itself automatically, as it
	  needs to be provided with platform specific configuration.
	  (See eg. 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 # Unconditional I/O space access

config GPIO_104_DIO_48E
	tristate "ACCES 104-DIO-48E GPIO support"
	depends on PC104
	select ISA_BUS_API
	select GPIOLIB_IRQCHIP
	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 GPIOLIB_IRQCHIP
	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 GPIOLIB_IRQCHIP
	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 "F71869, F71869A, F71882FG, F71889F and F81866 GPIO support"
	help
	  This option enables support for GPIOs found on Fintek Super-I/O
	  chips F71869, F71869A, F71882FG, F71889F and F81866.

	  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
	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 GPIOLIB_IRQCHIP
	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_ADP5588
	tristate "ADP5588 I2C GPIO expander"
	help
	  This option enables support for 18 GPIOs found
	  on Analog Devices ADP5588 GPIO Expanders.

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

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_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. It requires the driver to be built in the kernel.

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_BD70528
	tristate "ROHM BD70528 GPIO support"
	depends on MFD_ROHM_BD70528
	help
	  Support for GPIOs on ROHM BD70528 PMIC. There are four GPIOs
	  available on the ROHM PMIC in total. The GPIOs can also
	  generate interrupts.

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

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_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 controller 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_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_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_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_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_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
	bool "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.

	  This driver config is bool, as the GPIO functionality
	  of the TPS68470 must be available before dependent
	  drivers are loaded.

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_UCB1400
	tristate "Philips UCB1400 GPIO"
	depends on UCB1400_CORE
	help
	  This enables support for the Philips UCB1400 GPIO pins.
	  The UCB1400 is an AC97 audio codec.

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 a 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 south bridge 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 uncarefull 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 GPIOLIB_IRQCHIP
	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
	help
	  Say Y here if you want GPIO support on Mellanox BlueField 2 SoC.

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 GPIOLIB_IRQCHIP
	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 GPIOLIB_IRQCHIP
	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_MOCKUP
	tristate "GPIO Testing Driver"
	select IRQ_SIM
	help
	  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
	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).

endmenu

endif
