# 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"
	default y
	depends on GPIO_CDEV
	help
	  Say Y here to support version 1 of the GPIO CDEV ABI.

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

	  If unsure, say Y.

config GPIO_GENERIC
	depends on HAS_IOMEM # Only for IOMEM drivers
	tristate

config GPIO_REGMAP
	select REGMAP
	tristate

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_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"
	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) && OF_GPIO
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to support Aspeed AST2400 and AST2500 GPIO controllers.

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

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

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

config GPIO_BCM_KONA
	bool "Broadcom Kona GPIO"
	depends on ARCH_BCM_MOBILE || COMPILE_TEST
	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 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_BLZP1600
	tristate "Blaize BLZP1600 GPIO support"
	default y if ARCH_BLAIZE
	depends on ARCH_BLAIZE || COMPILE_TEST
	depends on OF_GPIO
	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 OF_GPIO && (ARCH_BRCMSTB || ARCH_BCM2835 || BMIPS_GENERIC || COMPILE_TEST)
	select GPIO_GENERIC
	select IRQ_DOMAIN
	help
	  Say yes here to enable GPIO support for Broadcom STB (BCM7XXX) SoCs.

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

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

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

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

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

config GPIO_EP93XX
	def_bool y
	depends on ARCH_EP93XX || 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_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_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_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 && 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
	depends on OF_GPIO
	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 OF_GPIO && (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 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 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_GPIO
	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
	help
	  Say yes here to support the GPIO controllers on Microchip FPGAs.

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
	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 || 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 y
	select GPIOLIB_IRQCHIP
	help
	  This option enables support for GPIOs found on Realtek DHC(Digital
	  Home Center) SoCs family, including RTD1295, RTD1315E, RTD1319,
	  RTD1319D, RTD1395, RTD1619 and RTD1619B.

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

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

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

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

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

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

config GPIO_SPACEMIT_K1
	tristate "SPACEMIT K1 GPIO support"
	depends on ARCH_SPACEMIT || COMPILE_TEST
	depends on OF_GPIO
	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
	select GENERIC_IRQ_CHIP
	help
	  Say yes here to support ST SPEAr SPI Chip Select as GPIO device.

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

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

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

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

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

config GPIO_TB10X
	bool "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
	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 || ARCH_TEGRA_234_SOC
	depends on ARCH_TEGRA_186_SOC || ARCH_TEGRA_194_SOC || ARCH_TEGRA_234_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, 194 and 234 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
	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
	depends on OF_GPIO
	select GPIOLIB_IRQCHIP
	select GPIO_GENERIC
	select IRQ_DOMAIN_HIERARCHY
	help
	  Say yes here to support GPIO on Tohisba Visconti.

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

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

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

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

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

	  If unsure, say N.

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

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

config GPIO_ZYNQ
	tristate "Xilinx Zynq GPIO support"
	depends on ARCH_ZYNQ || ARCH_ZYNQMP || 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 && HAS_IOPORT # I/O space access

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

endmenu

menu "I2C GPIO expanders"
	depends on I2C

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

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

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

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

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

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

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

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

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

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

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

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

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

	  4 bits:       pca9536, pca9537

	  8 bits:       max7310, max7315, pca6107, pca9534, pca9538, pca9554,
	                pca9556, pca9557, pca9574, tca6408, tca9554, xra1202,
			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
	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
	depends on OF_GPIO
	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
	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
	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 "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_GPIO
	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"
	select IRQ_SIM
	select CONFIGFS_FS
	select DEV_SYNC_PROBE
	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
	select DEV_SYNC_PROBE
	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

config DEV_SYNC_PROBE
	tristate
