# 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_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_MC9S08DZ60
	bool "MX35 3DS BOARD MC9S08DZ60 GPIO functions"
	depends on I2C=y && MACH_MX35_3DS
	help
	  Select this to enable the MC9S08DZ60 GPIO driver

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.

endmenu

endif
