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

config GPIOLIB_LEGACY
	def_bool y

config HAVE_SHARED_GPIOS
	bool

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 GPIO_SHARED
	def_bool y
	depends on HAVE_SHARED_GPIOS || COMPILE_TEST
	select AUXILIARY_BUS

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_SYSFS_LEGACY
	bool "Enable legacy functionalities of the sysfs interface"
	depends on GPIO_SYSFS
	default y if GPIO_SYSFS
	help
	  Say Y here if you want to enable the legacy, global GPIO
	  numberspace-based functionalities of the sysfs interface.

config GPIO_CDEV
	bool "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"
	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.

config GPIO_KUNIT
	tristate "Build GPIO Kunit test cases"
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  Say Y here to build the module containing Kunit test cases verifying
	  the functionality of the GPIO subsystem.

config GPIO_GENERIC
	depends on HAS_IOMEM # Only for IOMEM drivers
	tristate

config GPIO_REGMAP
	select REGMAP
	tristate

config GPIO_SWNODE_UNDEFINED
	bool
	help
	  This adds a special place holder for software nodes to contain an
	  undefined GPIO reference, this is primarily used by SPI to allow a
	  list of GPIO chip selects to mark a certain chip select as being
	  controlled the SPI device's internal chip select mechanism and not
	  a GPIO.

# put drivers in the right section, in alphabetical order

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

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

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

menu "Memory mapped GPIO drivers"
	depends on HAS_IOMEM

config GPIO_74XX_MMIO
	tristate "GPIO driver for 74xx-ICs with MMIO access"
	depends on OF
	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"
	select GPIO_GENERIC
	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.
	  Requires ACPI ASL code to enumerate as a platform device.

config GPIO_ASPEED
	tristate "Aspeed GPIO support"
	depends on ARCH_ASPEED || COMPILE_TEST
	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
	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
	# Make sure not 'y' when RASPBERRYPI_FIRMWARE is 'm'. This can only
	# happen when COMPILE_TEST=y, hence the added !RASPBERRYPI_FIRMWARE.
	depends on (ARCH_BCM2835 && RASPBERRYPI_FIRMWARE) || (COMPILE_TEST && !RASPBERRYPI_FIRMWARE)
	help
	  Turn on GPIO support for the expander on Raspberry Pi 3 boards, using
	  the firmware mailbox to communicate with VideoCore on BCM283x chips.

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

config GPIO_BCM_XGS_IPROC
	tristate "BRCM XGS iProc GPIO support"
	depends on 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_BLZP1600
	tristate "Blaize BLZP1600 GPIO support"
	default y if ARCH_BLAIZE
	depends on ARCH_BLAIZE || COMPILE_TEST
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say Y or M here to add support for the Blaize BLZP1600 GPIO device.
	  The controller is based on the Verisilicon Microelectronics GPIO APB v0.2
	  IP block.

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

config GPIO_BY_PINCTRL
	tristate "GPIO support based on a pure pin control backend"
	depends on GPIOLIB
	help
	  Support for generic GPIO handling based on top of pin control.
	  Traditionally, firmware creates a GPIO interface or a pin
	  controller interface and we have a driver to support it.  But
	  in SCMI, the pin control interface is generic and we can
	  create a simple GPIO device based on the pin control interface
	  without doing anything custom.

	  This driver is used to access GPIOs over the ARM SCMI protocol.

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

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

config GPIO_DAVINCI
	tristate "TI Davinci/Keystone GPIO support"
	default y if ARCH_DAVINCI
	depends on ((ARM || ARM64) && (ARCH_DAVINCI || ARCH_KEYSTONE || ARCH_K3)) || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	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
	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
	help
	  Say yes here to support GPIO on Renesas Emma Mobile SoCs.

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

config GPIO_EP93XX
	def_bool y
	depends on ARCH_EP93XX || COMPILE_TEST
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP

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

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

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

config GPIO_FTGPIO010
	bool "Faraday FTGPIO010 GPIO"
	depends on OF
	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_GRANITERAPIDS
	tristate "Intel Granite Rapids-D vGPIO support"
	depends on X86 || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	help
	  Select this to enable virtual GPIO support on platforms with the
	  following SoCs:

	  - Intel Granite Rapids-D

	  The driver enables basic GPIO functionality and implements interrupt
	  support. The virtual GPIO driver controls GPIO lines via a firmware
	  interface. The physical GPIO pins reside on device that is external
	  from the main SoC package, such as a BMC or a CPLD.

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

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

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

config GPIO_HLWD
	tristate "Nintendo Wii (Hollywood) GPIO"
	depends on OF
	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 && LPC_ICH) || (COMPILE_TEST && HAS_IOPORT)
	help
	  Say yes here to support the GPIO functionality of a number of Intel
	  ICH-based chipsets.  Currently supported devices: ICH6, ICH7, ICH8
	  ICH9, ICH10, Series 5/3400 (e.g. Ibex Peak), Series 6/C200 (e.g.
	  Cougar Point), NM10 (Tiger Point), and 3100 (Whitmore Lake).

	  If unsure, say N.

config GPIO_IMX_SCU
       def_bool y
       depends on IMX_SCU

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

	  If unsure, say N.

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

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

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

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

config GPIO_LPC32XX
	tristate "NXP LPC32XX GPIO support"
	depends on ARCH_LPC32XX || COMPILE_TEST
	depends on OF
	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 16-bit 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 GPIOLIB_IRQCHIP
	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
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support the Mediatek MT7621 SoC GPIO device.

config GPIO_MVEBU
	bool "Marvell Orion and EBU GPIO support" if COMPILE_TEST
	depends on PLAT_ORION || ARCH_MVEBU || COMPILE_TEST
	default PLAT_ORION || ARCH_MVEBU
	select GENERIC_IRQ_CHIP
	select REGMAP_MMIO

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

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

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

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

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

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

config GPIO_OMAP
	tristate "TI OMAP GPIO support"
	depends on ARCH_OMAP || COMPILE_TEST
	default y if ARCH_OMAP
	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 || COMPILE_TEST
	select IRQ_DOMAIN
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support the PrimeCell PL061 GPIO device.

config GPIO_POLARFIRE_SOC
	bool "Microchip FPGA GPIO support"
	select REGMAP_MMIO
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support the GPIO controllers on Microchip FPGAs.

config GPIO_PPC44X
	tristate "PPC44x GPIO support"
	depends on 44x || COMPILE_TEST
	select GPIO_GENERIC
	help
	  Enable gpiolib support for ppc440 based boards.

config GPIO_PXA
	bool "PXA GPIO support"
	depends on ARCH_PXA || ARCH_MMP || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	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
	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 || COMPILE_TEST
	default MACH_REALTEK_RTL
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  The GPIO controller on the Otto MIPS platform supports up to two
	  banks of 32 GPIOs, with edge triggered interrupts. The 32 GPIOs
	  are grouped in four 8-bit wide ports.

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

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

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

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

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

config GPIO_RTD1625
	tristate "Realtek DHC RTD1625 GPIO support"
	depends on ARCH_REALTEK || COMPILE_TEST
	default ARCH_REALTEK
	select GPIOLIB_IRQCHIP
	select GPIO_REGMAP
	select REGMAP_MMIO
	help
	  This option enables support for the GPIO controller on Realtek
	  DHC (Digital Home Center) RTD1625 SoC.

	  Say yes here to support both basic GPIO line functionality
	  and GPIO interrupt handling capabilities for this platform.

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

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

config GPIO_SIFIVE
	tristate "SiFive GPIO support"
	depends on OF
	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
	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_SPACEMIT_K1
	tristate "SPACEMIT K1 GPIO support"
	depends on ARCH_SPACEMIT || COMPILE_TEST
	depends on OF
	select GPIO_GENERIC
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support the SpacemiT's K1 GPIO device.

config GPIO_SPEAR_SPICS
	bool "ST SPEAr13xx SPI Chip Select as GPIO support"
	depends on PLAT_SPEAR || COMPILE_TEST
	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
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Spreadtrum GPIO device.

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

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

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

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

config GPIO_TB10X
	bool "Abilis Systems TB10x GPIO controller"
	depends on ARC_PLAT_TB10X || COMPILE_TEST
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP

config GPIO_TEGRA
	tristate "NVIDIA Tegra GPIO support"
	default ARCH_TEGRA
	depends on ARCH_TEGRA || COMPILE_TEST
	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 || ARCH_TEGRA_234_SOC
	depends on ARCH_TEGRA_186_SOC || ARCH_TEGRA_194_SOC || ARCH_TEGRA_234_SOC || COMPILE_TEST
	depends on OF
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say yes here to support GPIO pins on NVIDIA Tegra186, 194 and 234 SoCs.

config GPIO_TS4800
	tristate "TS-4800 DIO blocks and compatibles"
	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
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say yes here to support UniPhier GPIOs.

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

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

config GPIO_WAVESHARE_DSI_TOUCH
	tristate "Waveshare GPIO controller for DSI panels"
	depends on BACKLIGHT_CLASS_DEVICE
	depends on I2C
	select REGMAP_I2C
	help
	  Enable support for the GPIO and PWM controller found on Waveshare DSI
	  TOUCH panel kits. It provides GPIOs (used for regulator control and
          resets) and backlight support.

config GPIO_WCD934X
	tristate "Qualcomm WCD9340/WCD9341 GPIO controller driver"
	depends on MFD_WCD934X
	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 || COMPILE_TEST
	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
	help
	  Say yes here to support the Xilinx FPGA GPIO device.

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

	  If unsure, say N.

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

config GPIO_ZEVIO
	bool "LSI ZEVIO SoC memory mapped GPIOs"
	depends on ARM || COMPILE_TEST
	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 || COMPILE_TEST
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Xilinx Zynq GPIO controller.

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

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

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

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

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

config GPIO_MSC313
	bool "MStar MSC313 GPIO support"
	depends on ARCH_MSTARV7 || COMPILE_TEST
	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 || COMPILE_TEST
	depends on HAS_IOPORT # I/O space access

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

config GPIO_NOVALAKE
	tristate "Intel Nova Lake GPIO-signaled ACPI events support"
	depends on (X86 || COMPILE_TEST) && ACPI
	select GPIOLIB_IRQCHIP
	help
	  Select this to enable GPIO-signaled ACPI events support on platforms
	  with the following SoCs:

	  - Intel Nova Lake

	  This driver adds support for new mode of handling platform events,
	  through the use of GPIO-signaled ACPI events. Main purpose is to
	  handle platform IRQs that originate in PCH components, for example
	  interrupt triggered by Power Management Event (PME).

	  This driver, at this time, is not required to handle platform events.
	  Listed platform(s) will stay in legacy mode, handling ACPI events as
	  in previous generations. However, future platforms will eventually
	  switch to new handling mode, requiring this driver to run events
	  properly.

	  Driver supports up to 128 GPIO pins per GPE block.

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

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_WINBOND
	tristate "Winbond Super I/O GPIO support"
	select ISA_BUS_API
	help
	  This option enables support for GPIOs found on Winbond Super I/O
	  chips.
	  Currently, only W83627UHG (also known as Nuvoton NCT6627UD) is
	  supported.

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

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

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

endmenu

menu "I2C GPIO expanders"
	depends on I2C

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

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

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

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

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

config GPIO_GW_PLD
	tristate "Gateworks PLD GPIO Expander"
	depends on OF
	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,
			pcal6408, pcal9554b, tca9538, tcal6408

	  16 bits:      max7312, max7313, pca9535, pca9539, pca9555, pca9575,
	                tca6416, pca6416, pcal6416, pcal9535, pcal9555a, max7318,
			tca9539, tcal6416

	  18 bits:	tca6418

	  24 bits:      tca6424, pcal6524

	  40 bits:      pca9505, pca9698, pca9506

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

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

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

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

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

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

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

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

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

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

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

endmenu

menu "MFD GPIO expanders"

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

config GPIO_ADP5585
	tristate "GPIO Support for ADP5585"
	depends on MFD_ADP5585
	select GPIOLIB_IRQCHIP
	help
	  This option enables support for the GPIO function found in the Analog
	  Devices ADP5585.

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

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

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

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

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

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

config GPIO_BD72720
	tristate "ROHM BD72720 and BD73900 PMIC GPIO support"
	depends on MFD_ROHM_BD71828
	help
	  Support for GPIO on ROHM BD72720 and BD73900 PMICs. There are two
	  pins which can be configured to GPI or GPO, and three pins which can
	  be configured to GPO on the ROHM PMIC. The pin configuration is done
	  on OTP at manufacturing.

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_CGBC
	tristate "Congatec Board Controller GPIO support"
	depends on MFD_CGBC
	help
	  Select this option to enable GPIO support for the Congatec Board
	  Controller.

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

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

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

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

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

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

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

	  If unsure, say N.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

config GPIO_MACSMC
	tristate "Apple Mac SMC GPIO"
	depends on MFD_MACSMC
	help
	  Support for GPIOs controlled by the SMC microcontroller on Apple Mac
	  systems.

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

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_MAX7360
	tristate "MAX7360 GPIO support"
	depends on MFD_MAX7360
	select GPIO_REGMAP
	select REGMAP_IRQ
	help
	  Allows to use MAX7360 I/O Expander PWM lines as GPIO and keypad COL
	  lines as GPO.

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

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_MAX77759
	tristate "Maxim Integrated MAX77759 GPIO support"
	depends on MFD_MAX77759
	default MFD_MAX77759
	select GPIOLIB_IRQCHIP
	help
	  GPIO driver for MAX77759 PMIC from Maxim Integrated.
	  There are two GPIOs available on these chips 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-max77759.

config GPIO_NCT6694
	tristate "Nuvoton NCT6694 GPIO controller support"
	depends on MFD_NCT6694
	select GENERIC_IRQ_CHIP
	select GPIOLIB_IRQCHIP
	help
	  This driver supports 8 GPIO pins per bank that can all be interrupt
	  sources.

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

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

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

config GPIO_QIXIS_FPGA
	tristate "NXP QIXIS FPGA GPIO support"
	depends on MFD_SIMPLE_MFD_I2C || COMPILE_TEST
	select GPIO_REGMAP
	select REGMAP_MMIO
	help
	  This enables support for the GPIOs found in the QIXIS FPGA which is
	  integrated on some NXP Layerscape boards such as LX2160ARDB and
	  LS1046AQDS.

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
	tristate "STMPE GPIOs"
	depends on MFD_STMPE
	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
	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
	select GPIOLIB_IRQCHIP
	help
	Add support for the GPIO IP in the timberdale FPGA.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

endmenu

menu "Auxiliary Bus GPIO drivers"
	depends on AUXILIARY_BUS

config GPIO_LTC4283
	tristate "Analog Devices LTC4283 GPIO support"
	depends on SENSORS_LTC4283
	help
	  If you say yes here you want the GPIO function available in Analog
	  Devices LTC4283 Negative Voltage Hot Swap Controller.

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

endmenu

menu "PCI GPIO expanders"
	depends on PCI

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

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

	  If unsure, say N

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

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

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

	  If unsure, say N.

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

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

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

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

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

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

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

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

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

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

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

endmenu

menu "SPI GPIO expanders"
	depends on SPI_MASTER

config GPIO_74X164
	tristate "74x164 serial-in/parallel-out 8-bits shift register"
	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.

config GPIO_MPSSE
	tristate "FTDI MPSSE GPIO support"
	select GPIOLIB_IRQCHIP
	help
	  GPIO driver for FTDI's MPSSE interface. These can do input and
	  output. Each MPSSE provides 16 IO pins.

config GPIO_USBIO
	tristate "Intel USBIO GPIO support"
	depends on USB_USBIO
	default USB_USBIO
	help
	  Select this option to enable GPIO driver for the INTEL
	  USBIO driver stack.

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

endmenu

menu "Virtual GPIO drivers"

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

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

config GPIO_LINE_MUX
	tristate "GPIO line mux driver"
	depends on OF
	select MULTIPLEXER
	help
	  Say Y here to support the GPIO line mux, which can provide virtual
	  GPIOs backed by a shared real GPIO and a multiplexer in a 1-to-many
	  fashion.

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

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

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

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

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

config GPIO_SHARED_PROXY
	tristate "Proxy driver for non-exclusive GPIOs"
	default m
	depends on GPIO_SHARED || COMPILE_TEST
	select AUXILIARY_BUS
	help
	  This enables the GPIO shared proxy driver - an abstraction layer
	  for GPIO pins that are shared by multiple devices.

endmenu

menu "GPIO Debugging utilities"

config GPIO_SLOPPY_LOGIC_ANALYZER
	tristate "Sloppy GPIO logic analyzer"
	depends on (GPIOLIB || COMPILE_TEST) && CPUSETS && DEBUG_FS && EXPERT
	help
	  This option enables support for a sloppy logic analyzer using polled
	  GPIOs. Use the 'tools/gpio/gpio-sloppy-logic-analyzer' script with
	  this driver. The script will make it easier to use and will also
	  isolate a CPU for the polling task. Note that this is a last resort
	  analyzer which can be affected by latencies, non-deterministic code
	  paths, or NMIs. However, for e.g. remote development, it may be useful
	  to get a first view and aid further debugging.

	  If this driver is built as a module it will be called
	  'gpio-sloppy-logic-analyzer'.

config GPIO_VIRTUSER
	tristate "GPIO Virtual User Testing Module"
	select DEBUG_FS
	select CONFIGFS_FS
	select IRQ_WORK
	help
	  Say Y here to enable the configurable, configfs-based virtual GPIO
	  consumer testing driver.

	  This driver is aimed as a helper in spotting any regressions in
	  hot-unplug handling in GPIOLIB.

endmenu

endif
