#
# 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_GENERIC
	tristate

# put drivers in the right section, in alphabetical order

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_MAX730X
	tristate

comment "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_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_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_DWAPB
	tristate "Synopsys DesignWare APB GPIO driver"
	depends on ARM
	depends on OF_GPIO
	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_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_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_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_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_F7188X
	tristate "F71882FG and F71889F GPIO support"
	depends on X86
	help
	  This option enables support for GPIOs found on Fintek Super-I/O
	  chips F71882FG and F71889F.

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

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_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_V1
	tristate "Qualcomm MSM GPIO v1"
	depends on GPIOLIB && ARCH_MSM && (ARCH_MSM7X00A || ARCH_MSM7X30 || ARCH_QSD8X50)
	help
	  Say yes here to support the GPIO interface on ARM v6 based
	  Qualcomm MSM chips.  Most of the pins on the MSM can be
	  selected for GPIO, and are controlled by this driver.

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_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_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_SYSCON
	tristate "GPIO based on SYSCON"
	depends on MFD_SYSCON && OF
	help
	  Say yes here to support GPIO functionality though SYSCON driver.

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_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_ZYNQ
	tristate "Xilinx Zynq GPIO support"
	depends on ARCH_ZYNQ
	select GPIOLIB_IRQCHIP
	help
	  Say yes here to support Xilinx Zynq GPIO controller.

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_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_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_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_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_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_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_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_TB10X
	bool
	select GENERIC_IRQ_CHIP
	select OF_GPIO

comment "I2C GPIO expanders:"

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_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_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
	select IRQ_DOMAIN
	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
	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 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_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_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

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_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_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_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_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.

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_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).

comment "PCI GPIO expanders:"

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_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_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_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_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_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_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.

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_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.

comment "SPI GPIO expanders:"

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.

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.

comment "AC97 GPIO expanders:"

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.

comment "LPC GPIO expanders:"

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.

comment "MODULbus GPIO expanders:"

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

comment "USB GPIO expanders:"

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.

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.

endif
