#
# GPIO infrastructure and drivers
#

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

config ARCH_WANT_OPTIONAL_GPIOLIB
	bool
	help
	  Select this config option from the architecture Kconfig, if
	  it is possible to use gpiolib on the architecture, but let the
	  user decide whether to actually build it or not.
	  Select this instead of ARCH_REQUIRE_GPIOLIB, if your architecture does
	  not depend on GPIOs being available, but rather let the user
	  decide whether he needs it or not.

config ARCH_REQUIRE_GPIOLIB
	bool
	select GPIOLIB
	help
	  Platforms select gpiolib if they use this infrastructure
	  for all their GPIOs, usually starting with ones integrated
	  into SOC processors.
	  Selecting this from the architecture code will cause the gpiolib
	  code to always get built in.


menuconfig GPIOLIB
	bool "GPIO Support"
	depends on ARCH_WANT_OPTIONAL_GPIOLIB || ARCH_REQUIRE_GPIOLIB
	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 GPIO_DEVRES
	def_bool y
	depends on HAS_IOMEM

config OF_GPIO
	def_bool y
	depends on OF

config GPIO_ACPI
	def_bool y
	depends on ACPI

config GPIOLIB_IRQCHIP
	select IRQ_DOMAIN
	bool

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

config GPIO_SYSFS
	bool "/sys/class/gpio/... (sysfs interface)"
	depends on SYSFS
	help
	  Say Y here to add a sysfs interface for GPIOs.

	  This is mostly useful to work around omissions in a system's
	  kernel support.  Those are common in custom and semicustom
	  hardware assembled using standard kernels with a minimum of
	  custom patches.  In those cases, userspace code may import
	  a given GPIO from the kernel, if no kernel driver requested it.

	  Kernel drivers may also request that a particular GPIO be
	  exported to userspace; this can be useful when debugging.

config GPIO_NL_WAKEUP_SOURCE
	bool "/sys/class/gpio/gpioN/wakeup (sysfs interface)"
	depends on GPIO_SYSFS
	help
	  Say Y here to add a sysfs interface (wakeup) which will allow to configure
	  individual GPIO pins as wakeup sources from user space

config GPIO_GENERIC
	tristate

# put drivers in the right section, in alphabetical order

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

menu "Memory mapped GPIO drivers"

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

config GPIO_ALTERA
	tristate "Altera GPIO"
	depends on OF_GPIO
	select 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_BCM_KONA
	bool "Broadcom Kona GPIO"
	depends on OF_GPIO && (ARCH_BCM_MOBILE || COMPILE_TEST)
	help
	  Turn on GPIO support for Broadcom "Kona" chips.

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

config GPIO_DAVINCI
	bool "TI Davinci/Keystone GPIO support"
	default y if ARCH_DAVINCI
	depends on ARM && (ARCH_DAVINCI || ARCH_KEYSTONE)
	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 GENERIC_IRQ_CHIP
	help
	  Say Y or M here to build support for the Synopsys DesignWare APB
	  GPIO block.

config GPIO_EM
	tristate "Emma Mobile GPIO"
	depends on ARM && OF_GPIO
	help
	  Say yes here to support GPIO on Renesas Emma Mobile SoCs.

config GPIO_EP93XX
	def_bool y
	depends on ARCH_EP93XX
	select GPIO_GENERIC

config GPIO_F7188X
	tristate "F71869, F71869A, F71882FG and F71889F GPIO support"
	depends on X86
	help
	  This option enables support for GPIOs found on Fintek Super-I/O
	  chips F71869, F71869A, F71882FG and F71889F.

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

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

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

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

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

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

	  If unsure, say N.

config GPIO_IOP
	tristate "Intel IOP GPIO"
	depends on ARM && (ARCH_IOP32X || ARCH_IOP33X)
	help
	  Say yes here to support the GPIO functionality of a number of Intel
	  IOP32X or IOP33X.

	  If unsure, say N.

config GPIO_IT8761E
	tristate "IT8761E GPIO support"
	depends on X86  # unconditional access to IO space.
	help
	  Say yes here to support GPIO functionality of IT8761E super I/O chip.

config GPIO_LOONGSON
	bool "Loongson-2/3 GPIO support"
	depends on CPU_LOONGSON2 || CPU_LOONGSON3
	help
	  driver for GPIO functionality on Loongson-2F/3A/3B processors.

config GPIO_LYNXPOINT
	tristate "Intel Lynxpoint GPIO support"
	depends on ACPI && X86
	select GPIOLIB_IRQCHIP
	help
	  driver for GPIO functionality on Intel Lynxpoint PCH chipset
	  Requires ACPI device enumeration code to set up a platform device.

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

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

config GPIO_MOXART
	bool "MOXART GPIO support"
	depends on ARCH_MOXART
	select GPIO_GENERIC
	help
	  Select this option to enable GPIO driver for
	  MOXA ART SoC devices.

config GPIO_MPC5200
	def_bool y
	depends on PPC_MPC52xx

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

config GPIO_MSM_V2
	tristate "Qualcomm MSM GPIO v2"
	depends on GPIOLIB && OF && ARCH_QCOM
	help
	  Say yes here to support the GPIO interface on ARM v7 based
	  Qualcomm MSM chips.  Most of the pins on the MSM can be
	  selected for GPIO, and are controlled by this driver.

config GPIO_MVEBU
	def_bool y
	depends on PLAT_ORION
	depends on OF
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP

config GPIO_MXC
	def_bool y
	depends on ARCH_MXC
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP

config GPIO_MXC_NL_REPORT_WAKEUP_GPIO
	bool "If a GPIO causes a wake from suspend, print the GPIO"
	default n
	depends on GPIO_MXC
	help
	  Say Y here to get log messages when an MXC GPIO causes a wake from suspend.
	  It prints out the Linux GPIO number, the GPIO block ID (for reference on
	  schematics), and the Linux IRQ number.

config GPIO_MXS
	def_bool y
	depends on ARCH_MXS
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP

config GPIO_OCTEON
	tristate "Cavium OCTEON GPIO"
	depends on GPIOLIB && 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
	bool "TI OMAP GPIO support" if COMPILE_TEST && !ARCH_OMAP2PLUS
	default y if ARCH_OMAP
	depends on ARM
	select GENERIC_IRQ_CHIP
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to enable GPIO support for TI OMAP SoCs.

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

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

config GPIO_RCAR
	tristate "Renesas R-Car GPIO"
	depends on ARM && (ARCH_SHMOBILE || COMPILE_TEST)
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support GPIO on Renesas R-Car SoCs.

config GPIO_SAMSUNG
	bool
	depends on PLAT_SAMSUNG
	help
	  Legacy GPIO support. Use only for platforms without support for
	  pinctrl.

config GPIO_SCH
	tristate "Intel SCH/TunnelCreek/Centerton/Quark X1000 GPIO"
	depends on PCI && X86
	select MFD_CORE
	select LPC_SCH
	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_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_STA2X11
	bool "STA2x11/ConneXt GPIO support"
	depends on MFD_STA2X11
	select GENERIC_IRQ_CHIP
	help
	  Say yes here to support the STA2x11/ConneXt GPIO device.
	  The GPIO module has 128 GPIO pins with alternate functions.

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

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

config GPIO_TB10X
	bool
	select GENERIC_IRQ_CHIP
	select OF_GPIO

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_TZ1090
	bool "Toumaz Xenif TZ1090 GPIO support"
	depends on SOC_TZ1090
	select GENERIC_IRQ_CHIP
	default y
	help
	  Say yes here to support Toumaz Xenif TZ1090 GPIOs.

config GPIO_TZ1090_PDC
	bool "Toumaz Xenif TZ1090 PDC GPIO support"
	depends on SOC_TZ1090
	default y
	help
	  Say yes here to support Toumaz Xenif TZ1090 PDC GPIOs.

config GPIO_VF610
	def_bool y
	depends on ARCH_MXC && SOC_VF610
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Vybrid vf610 GPIOs.

config GPIO_VR41XX
	tristate "NEC VR4100 series General-purpose I/O Uint support"
	depends on CPU_VR41XX
	help
	  Say yes here to support the NEC VR4100 series General-purpose I/O Uint

config GPIO_VX855
	tristate "VIA VX855/VX875 GPIO"
	depends on 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_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 && OF_GPIO
	select GPIO_GENERIC
	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"
	depends on OF_GPIO && (PPC || MICROBLAZE || ARCH_ZYNQ || X86)
	help
	  Say yes here to support the Xilinx FPGA GPIO device

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

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

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

endmenu

menu "I2C GPIO expanders"
	depends on I2C

config GPIO_ADP5588
	tristate "ADP5588 I2C GPIO expander"
	depends on I2C
	help
	  This option enables support for 18 GPIOs found
	  on Analog Devices ADP5588 GPIO Expanders.

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

config GPIO_ADNP
	tristate "Avionic Design N-bit GPIO expander"
	depends on I2C && 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_MADERA
	tristate "Cirrus Logic Madera class codecs"
	depends on MFD_MADERA
	help
	  Support for GPIOs on Cirrus Logic Madera class codecs.

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

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

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

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

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

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

config GPIO_MC9S08DZ60
	bool "MX35 3DS BOARD MC9S08DZ60 GPIO functions"
	depends on I2C=y && MACH_MX35_3DS
	help
	  Select this to enable the MC9S08DZ60 GPIO driver

config GPIO_PCA953X
	tristate "PCA95[357]x, PCA9698, TCA64xx, and MAX7310 I/O ports"
	depends on 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, xra1202

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

	  24 bits:	tca6424

	  40 bits:	pca9505, pca9698

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

config GPIO_PCF857X
	tristate "PCF857x, PCA{85,96}7x, and MAX732[89] I2C GPIO expanders"
	depends on I2C
	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_SX150X
	bool "Semtech SX150x I2C GPIO expander"
	depends on I2C=y
	select GPIOLIB_IRQCHIP
	default n
	help
	  Say yes here to provide support for Semtech SX150-series I2C
	  GPIO expanders. Compatible models include:

	  8 bits:  sx1508q
	  16 bits: sx1509q

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_ARIZONA
	tristate "Wolfson Microelectronics Arizona class devices"
	depends on MFD_ARIZONA
	help
	  Support for GPIOs on Wolfson Arizona class devices.

config GPIO_CRYSTAL_COVE
	tristate "GPIO support for Crystal Cove PMIC"
	depends on 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 MFD_CS5535
	help
	  The AMD CS5535 and CS5536 southbridges support 28 GPIO pins that
	  can be used for quite a number of things.  The CS5535/6 is found on
	  AMD Geode and Lemote Yeeloong devices.

	  If unsure, say N.

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

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

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

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

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

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

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

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

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

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

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

config GPIO_MSIC
	bool "Intel MSIC mixed signal gpio support"
	depends on MFD_INTEL_MSIC
	help
	  Enable support for GPIO on intel MSIC controllers found in
	  intel MID devices

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

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

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

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

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

config GPIO_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_I2C || MFD_TPS65912_SPI)
	help
	  This driver supports TPS65912 gpio chip

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

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

config GPIO_UCB1400
	tristate "Philips UCB1400 GPIO"
	depends on UCB1400_CORE
	help
	  This enables support for the Philips UCB1400 GPIO pins.
	  The UCB1400 is an AC97 audio codec.

config GPIO_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 PCI
	help
	  The AMD 8111 south bridge contains 32 GPIO pins which can be used.

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

	  If unsure, say N

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

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

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

	  If unsure, say N.

config GPIO_INTEL_MID
	bool "Intel Mid GPIO support"
	depends on PCI && X86
	select GPIOLIB_IRQCHIP
	help
	  Say Y here to support Intel Mid GPIO.

config GPIO_ML_IOH
	tristate "OKI SEMICONDUCTOR ML7213 IOH GPIO support"
	depends on PCI
	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 PCI && (X86_32 || 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_RDC321X
	tristate "RDC R-321x GPIO support"
	depends on PCI
	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 && PCI && OF
	select GPIO_GENERIC
	select GENERIC_IRQ_CHIP
	help
	  Say Y here to support Intel Sodaville GPIO.

endmenu

menu "SPI GPIO expanders"
	depends on SPI_MASTER

config GPIO_74X164
	tristate "74x164 serial-in/parallel-out 8-bits shift register"
	depends on SPI_MASTER && OF
	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_MAX7301
	tristate "Maxim MAX7301 GPIO expander"
	depends on SPI_MASTER
	select GPIO_MAX730X
	help
	  GPIO driver for Maxim MAX7301 SPI-based GPIO expander.

config GPIO_MCP23S08
	tristate "Microchip MCP23xxx I/O expander"
	depends on (SPI_MASTER && !I2C) || I2C
	help
	  SPI/I2C driver for Microchip MCP23S08/MCP23S17/MCP23008/MCP23017
	  I/O expanders.
	  This provides a GPIO interface supporting inputs and outputs.
	  The I2C versions of the chips can be used as interrupt-controller.

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

endmenu

menu "USB GPIO expanders"
	depends on USB

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

endmenu

endif
