#
# Multifunction miscellaneous devices
#

if HAS_IOMEM
menu "Multifunction device drivers"

config MFD_CORE
	tristate
	select IRQ_DOMAIN
	default n

config MFD_CS5535
	tristate "AMD CS5535 and CS5536 southbridge core functions"
	select MFD_CORE
	depends on PCI && X86
	---help---
	  This is the core driver for CS5535/CS5536 MFD functions.  This is
          necessary for using the board's GPIO and MFGPT functionality.

config MFD_AS3711
	bool "AMS AS3711"
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	depends on I2C=y
	help
	  Support for the AS3711 PMIC from AMS

config MFD_AS3722
	bool "ams AS3722 Power Management IC"
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	depends on I2C=y && OF
	help
	  The ams AS3722 is a compact system PMU suitable for mobile phones,
	  tablets etc. It has 4 DC/DC step-down regulators, 3 DC/DC step-down
	  controllers, 11 LDOs, RTC, automatic battery, temperature and
	  over current monitoring, GPIOs, ADC and a watchdog.

config PMIC_ADP5520
	bool "Analog Devices ADP5520/01 MFD PMIC Core Support"
	depends on I2C=y
	help
	  Say yes here to add support for Analog Devices AD5520 and ADP5501,
	  Multifunction Power Management IC. This includes
	  the I2C driver and the core APIs _only_, you have to select
	  individual components like LCD backlight, LEDs, GPIOs and Kepad
	  under the corresponding menus.

config MFD_AAT2870_CORE
	bool "AnalogicTech AAT2870"
	select MFD_CORE
	depends on I2C=y && GPIOLIB
	help
	  If you say yes here you get support for the AAT2870.
	  This driver provides common support for accessing the device,
	  additional drivers must be enabled in order to use the
	  functionality of the device.

config MFD_CROS_EC
	tristate "ChromeOS Embedded Controller"
	select MFD_CORE
	help
	  If you say Y here you get support for the ChromeOS Embedded
	  Controller (EC) providing keyboard, battery and power services.
	  You also need to enable the driver for the bus you are using. The
	  protocol for talking to the EC is defined by the bus driver.

config MFD_CROS_EC_I2C
	tristate "ChromeOS Embedded Controller (I2C)"
	depends on MFD_CROS_EC && I2C

	help
	  If you say Y here, you get support for talking to the ChromeOS
	  EC through an I2C bus. This uses a simple byte-level protocol with
	  a checksum. Failing accesses will be retried three times to
	  improve reliability.

config MFD_CROS_EC_SPI
	tristate "ChromeOS Embedded Controller (SPI)"
	depends on MFD_CROS_EC && SPI && OF

	---help---
	  If you say Y here, you get support for talking to the ChromeOS EC
	  through a SPI bus, using a byte-level protocol. Since the EC's
	  response time cannot be guaranteed, we support ignoring
	  'pre-amble' bytes before the response actually starts.

config MFD_ASIC3
	bool "Compaq ASIC3"
	depends on GPIOLIB && ARM
	select MFD_CORE
	 ---help---
	  This driver supports the ASIC3 multifunction chip found on many
	  PDAs (mainly iPAQ and HTC based ones)

config PMIC_DA903X
	bool "Dialog Semiconductor DA9030/DA9034 PMIC Support"
	depends on I2C=y
	help
	  Say yes here to support for Dialog Semiconductor DA9030 (a.k.a
	  ARAVA) and DA9034 (a.k.a MICCO), these are Power Management IC
	  usually found on PXA processors-based platforms. This includes
	  the I2C driver and the core APIs _only_, you have to select
	  individual components like LCD backlight, voltage regulators,
	  LEDs and battery-charger under the corresponding menus.

config PMIC_DA9052
	bool
	select MFD_CORE

config MFD_DA9052_SPI
	bool "Dialog Semiconductor DA9052/53 PMIC variants with SPI"
	select REGMAP_SPI
	select REGMAP_IRQ
	select PMIC_DA9052
	depends on SPI_MASTER=y
	help
	  Support for the Dialog Semiconductor DA9052 PMIC
	  when controlled using SPI. This driver provides common support
	  for accessing the device, additional drivers must be enabled in
	  order to use the functionality of the device.

config MFD_DA9052_I2C
	bool "Dialog Semiconductor DA9052/53 PMIC variants with I2C"
	select REGMAP_I2C
	select REGMAP_IRQ
	select PMIC_DA9052
	depends on I2C=y
	help
	  Support for the Dialog Semiconductor DA9052 PMIC
	  when controlled using I2C. This driver provides common support
	  for accessing the device, additional drivers must be enabled in
	  order to use the functionality of the device.

config MFD_DA9055
	bool "Dialog Semiconductor DA9055 PMIC Support"
	select REGMAP_I2C
	select REGMAP_IRQ
	select MFD_CORE
	depends on I2C=y
	help
	  Say yes here for support of Dialog Semiconductor DA9055. This is
	  a Power Management IC. This driver provides common support for
	  accessing the device as well as the I2C interface to the chip itself.
	  Additional drivers must be enabled in order to use the functionality
	  of the device.

	  This driver can be built as a module. If built as a module it will be
	  called "da9055"

config MFD_DA9063
	bool "Dialog Semiconductor DA9063 PMIC Support"
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	depends on I2C=y
	help
	  Say yes here for support for the Dialog Semiconductor DA9063 PMIC.
	  This includes the I2C driver and core APIs.
	  Additional drivers must be enabled in order to use the functionality
	  of the device.

config MFD_MC13XXX
	tristate
	depends on (SPI_MASTER || I2C)
	select MFD_CORE
	help
	  Enable support for the Freescale MC13783 and MC13892 PMICs.
	  This driver provides common support for accessing the device,
	  additional drivers must be enabled in order to use the
	  functionality of the device.

config MFD_MC13XXX_SPI
	tristate "Freescale MC13783 and MC13892 SPI interface"
	depends on SPI_MASTER
	select REGMAP_SPI
	select MFD_MC13XXX
	help
	  Select this if your MC13xxx is connected via an SPI bus.

config MFD_MC13XXX_I2C
	tristate "Freescale MC13892 I2C interface"
	depends on I2C
	select REGMAP_I2C
	select MFD_MC13XXX
	help
	  Select this if your MC13xxx is connected via an I2C bus.

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

config HTC_PASIC3
	tristate "HTC PASIC3 LED/DS1WM chip support"
	select MFD_CORE
	help
	  This core driver provides register access for the LED/DS1WM
	  chips labeled "AIC2" and "AIC3", found on HTC Blueangel and
	  HTC Magician devices, respectively. Actual functionality is
	  handled by the leds-pasic3 and ds1wm drivers.

config HTC_I2CPLD
	bool "HTC I2C PLD chip support"
	depends on I2C=y && GPIOLIB
	help
	  If you say yes here you get support for the supposed CPLD
	  found on omap850 HTC devices like the HTC Wizard and HTC Herald.
	  This device provides input and output GPIOs through an I2C
	  interface to one or more sub-chips.

config LPC_ICH
	tristate "Intel ICH LPC"
	depends on PCI
	select MFD_CORE
	help
	  The LPC bridge function of the Intel ICH provides support for
	  many functional units. This driver provides needed support for
	  other drivers to control these functions, currently GPIO and
	  watchdog.

config LPC_SCH
	tristate "Intel SCH LPC"
	depends on PCI
	select MFD_CORE
	help
	  LPC bridge function of the Intel SCH provides support for
	  System Management Bus and General Purpose I/O.

config MFD_INTEL_MSIC
	bool "Intel MSIC"
	depends on INTEL_SCU_IPC
	select MFD_CORE
	help
	  Select this option to enable access to Intel MSIC (Avatele
	  Passage) chip. This chip embeds audio, battery, GPIO, etc.
	  devices used in Intel Medfield platforms.

config MFD_JANZ_CMODIO
	tristate "Janz CMOD-IO PCI MODULbus Carrier Board"
	select MFD_CORE
	depends on PCI
	help
	  This is the core driver for the Janz CMOD-IO PCI MODULbus
	  carrier board. This device is a PCI to MODULbus bridge which may
	  host many different types of MODULbus daughterboards, including
	  CAN and GPIO controllers.

config MFD_JZ4740_ADC
	bool "Janz JZ4740 ADC core"
	select MFD_CORE
	select GENERIC_IRQ_CHIP
	depends on MACH_JZ4740
	help
	  Say yes here if you want support for the ADC unit in the JZ4740 SoC.
	  This driver is necessary for jz4740-battery and jz4740-hwmon driver.

config MFD_KEMPLD
	tristate "Kontron module PLD device"
	select MFD_CORE
	help
	  This is the core driver for the PLD (Programmable Logic Device) found
	  on some Kontron ETX and COMexpress (ETXexpress) modules. The PLD
	  device may provide functions like watchdog, GPIO, UART and I2C bus.

	  The following modules are supported:
		* COMe-bIP#
		* COMe-bPC2 (ETXexpress-PC)
		* COMe-bSC# (ETXexpress-SC T#)
		* COMe-cCT6
		* COMe-cDC2 (microETXexpress-DC)
		* COMe-cPC2 (microETXexpress-PC)
		* COMe-mCT10
		* ETX-OH

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

config MFD_88PM800
	tristate "Marvell 88PM800"
	depends on I2C=y
	select REGMAP_I2C
	select REGMAP_IRQ
	select MFD_CORE
	help
	  This supports for Marvell 88PM800 Power Management IC.
	  This includes the I2C driver and the core APIs _only_, you have to
	  select individual components like voltage regulators, RTC and
	  battery-charger under the corresponding menus.

config MFD_88PM805
	tristate "Marvell 88PM805"
	depends on I2C=y
	select REGMAP_I2C
	select REGMAP_IRQ
	select MFD_CORE
	help
	  This supports for Marvell 88PM805 Power Management IC. This includes
	  the I2C driver and the core APIs _only_, you have to select individual
	  components like codec device, headset/Mic device under the
	  corresponding menus.

config MFD_88PM860X
	bool "Marvell 88PM8606/88PM8607"
	depends on I2C=y
	select REGMAP_I2C
	select MFD_CORE
	help
	  This supports for Marvell 88PM8606/88PM8607 Power Management IC.
	  This includes the I2C driver and the core APIs _only_, you have to
	  select individual components like voltage regulators, RTC and
	  battery-charger under the corresponding menus.

config MFD_MAX14577
	bool "Maxim Semiconductor MAX14577 MUIC + Charger Support"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	select IRQ_DOMAIN
	help
	  Say yes here to support for Maxim Semiconductor MAX14577.
	  This is a Micro-USB IC with Charger controls on chip.
	  This driver provides common support for accessing the device;
	  additional drivers must be enabled in order to use the functionality
	  of the device.

config MFD_MAX77686
	bool "Maxim Semiconductor MAX77686 PMIC Support"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	select IRQ_DOMAIN
	help
	  Say yes here to support for Maxim Semiconductor MAX77686.
	  This is a Power Management IC with RTC on chip.
	  This driver provides common support for accessing the device;
	  additional drivers must be enabled in order to use the functionality
	  of the device.

config MFD_MAX77693
	bool "Maxim Semiconductor MAX77693 PMIC Support"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	help
	  Say yes here to support for Maxim Semiconductor MAX77693.
	  This is a companion Power Management IC with Flash, Haptic, Charger,
	  and MUIC(Micro USB Interface Controller) controls on chip.
	  This driver provides common support for accessing the device;
	  additional drivers must be enabled in order to use the functionality
	  of the device.

config MFD_MAX8907
	tristate "Maxim Semiconductor MAX8907 PMIC Support"
	select MFD_CORE
	depends on I2C=y
	select REGMAP_I2C
	select REGMAP_IRQ
	help
	  Say yes here to support for Maxim Semiconductor MAX8907. This is
	  a Power Management IC. This driver provides common support for
	  accessing the device; additional drivers must be enabled in order
	  to use the functionality of the device.

config MFD_MAX8925
	bool "Maxim Semiconductor MAX8925 PMIC Support"
	depends on I2C=y
	select MFD_CORE
	help
	  Say yes here to support for Maxim Semiconductor MAX8925. This is
	  a Power Management IC. This driver provides common support for
	  accessing the device, additional drivers must be enabled in order
	  to use the functionality of the device.

config MFD_MAX8997
	bool "Maxim Semiconductor MAX8997/8966 PMIC Support"
	depends on I2C=y
	select MFD_CORE
	select IRQ_DOMAIN
	help
	  Say yes here to support for Maxim Semiconductor MAX8997/8966.
	  This is a Power Management IC with RTC, Flash, Fuel Gauge, Haptic,
	  MUIC controls on chip.
	  This driver provides common support for accessing the device;
	  additional drivers must be enabled in order to use the functionality
	  of the device.

config MFD_MAX8998
	bool "Maxim Semiconductor MAX8998/National LP3974 PMIC Support"
	depends on I2C=y
	select MFD_CORE
	select IRQ_DOMAIN
	help
	  Say yes here to support for Maxim Semiconductor MAX8998 and
	  National Semiconductor LP3974. This is a Power Management IC.
	  This driver provides common support for accessing the device,
	  additional drivers must be enabled in order to use the functionality
	  of the device.

config EZX_PCAP
	bool "Motorola EZXPCAP Support"
	depends on SPI_MASTER
	help
	  This enables the PCAP ASIC present on EZX Phones. This is
	  needed for MMC, TouchScreen, Sound, USB, etc..

config MFD_VIPERBOARD
        tristate "Nano River Technologies Viperboard"
	select MFD_CORE
	depends on USB
	default n
	help
	  Say yes here if you want support for Nano River Technologies
	  Viperboard.
	  There are mfd cell drivers available for i2c master, adc and
	  both gpios found on the board. The spi part does not yet
	  have a driver.
	  You need to select the mfd cell drivers separately.
	  The drivers do not support all features the board exposes.

config MFD_RETU
	tristate "Nokia Retu and Tahvo multi-function device"
	select MFD_CORE
	depends on I2C
	select REGMAP_IRQ
	help
	  Retu and Tahvo are a multi-function devices found on Nokia
	  Internet Tablets (770, N800 and N810).

config MFD_PCF50633
	tristate "NXP PCF50633"
	depends on I2C
	select REGMAP_I2C
	help
	  Say yes here if you have NXP PCF50633 chip on your board.
	  This core driver provides register access and IRQ handling
	  facilities, and registers devices for the various functions
	  so that function-specific drivers can bind to them.

config PCF50633_ADC
	tristate "NXP PCF50633 ADC"
	depends on MFD_PCF50633
	help
	 Say yes here if you want to include support for ADC in the
	 NXP PCF50633 chip.

config PCF50633_GPIO
	tristate "NXP PCF50633 GPIO"
	depends on MFD_PCF50633
	help
	 Say yes here if you want to include support GPIO for pins on
	 the PCF50633 chip.

config UCB1400_CORE
	tristate "Philips UCB1400 Core driver"
	depends on AC97_BUS
	depends on GPIOLIB
	help
	  This enables support for the Philips UCB1400 core functions.
	  The UCB1400 is an AC97 audio codec.

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

config MFD_PM8XXX
	tristate

config MFD_PM8921_CORE
	tristate "Qualcomm PM8921 PMIC chip"
	depends on (ARCH_MSM || HEXAGON)
	depends on BROKEN
	select MFD_CORE
	select MFD_PM8XXX
	help
	  If you say yes to this option, support will be included for the
	  built-in PM8921 PMIC chip.

	  This is required if your board has a PM8921 and uses its features,
	  such as: MPPs, GPIOs, regulators, interrupts, and PWM.

	  Say M here if you want to include support for PM8921 chip as a module.
	  This will build a module called "pm8921-core".

config MFD_PM8XXX_IRQ
	bool "Qualcomm PM8xxx IRQ features"
	depends on MFD_PM8XXX
	default y if MFD_PM8XXX
	help
	  This is the IRQ driver for Qualcomm PM 8xxx PMIC chips.

	  This is required to use certain other PM 8xxx features, such as GPIO
	  and MPP.

config MFD_RDC321X
	tristate "RDC R-321x southbridge"
	select MFD_CORE
	depends on PCI
	help
	  Say yes here if you want to have support for the RDC R-321x SoC
	  southbridge which provides access to GPIOs and Watchdog using the
	  southbridge PCI device configuration space.

config MFD_RTSX_PCI
	tristate "Realtek PCI-E card reader"
	depends on PCI
	select MFD_CORE
	help
	  This supports for Realtek PCI-Express card reader including rts5209,
	  rts5229, rtl8411, etc. Realtek card reader supports access to many
	  types of memory cards, such as Memory Stick, Memory Stick Pro,
	  Secure Digital and MultiMediaCard.

config MFD_RC5T583
	bool "Ricoh RC5T583 Power Management system device"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	help
	  Select this option to get support for the RICOH583 Power
	  Management system device.
	  This driver provides common support for accessing the device
	  through i2c interface. The device supports multiple sub-devices
	  like GPIO, interrupts, RTC, LDO and DCDC regulators, onkey.
	  Additional drivers must be enabled in order to use the
	  different functionality of the device.

config MFD_SEC_CORE
	bool "SAMSUNG Electronics PMIC Series Support"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	help
	 Support for the Samsung Electronics MFD series.
	 This driver provides common support for accessing the device,
	 additional drivers must be enabled in order to use the functionality
	 of the device

config MFD_SI476X_CORE
	tristate "Silicon Laboratories 4761/64/68 AM/FM radio."
	depends on I2C
	select MFD_CORE
	select REGMAP_I2C
	help
	  This is the core driver for the SI476x series of AM/FM
	  radio. This MFD driver connects the radio-si476x V4L2 module
	  and the si476x audio codec.

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

config MFD_SM501
	tristate "Silicon Motion SM501"
	 ---help---
	  This is the core driver for the Silicon Motion SM501 multimedia
	  companion chip. This device is a multifunction device which may
	  provide numerous interfaces including USB host controller, USB gadget,
	  asynchronous serial ports, audio functions, and a dual display video
	  interface. The device may be connected by PCI or local bus with
	  varying functions enabled.

config MFD_SM501_GPIO
	bool "Export GPIO via GPIO layer"
	depends on MFD_SM501 && GPIOLIB
	 ---help---
	 This option uses the gpio library layer to export the 64 GPIO
	 lines on the SM501. The platform data is used to supply the
	 base number for the first GPIO line to register.

config MFD_SMSC
       bool "SMSC ECE1099 series chips"
       depends on I2C=y
       select MFD_CORE
       select REGMAP_I2C
       help
        If you say yes here you get support for the
        ece1099 chips from SMSC.

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

config ABX500_CORE
	bool "ST-Ericsson ABX500 Mixed Signal Circuit register functions"
	default y if ARCH_U300 || ARCH_U8500
	help
	  Say yes here if you have the ABX500 Mixed Signal IC family
	  chips. This core driver expose register access functions.
	  Functionality specific drivers using these functions can
	  remain unchanged when IC changes. Binding of the functions to
	  actual register access is done by the IC core driver.

config AB3100_CORE
	bool "ST-Ericsson AB3100 Mixed Signal Circuit core functions"
	depends on I2C=y && ABX500_CORE
	select MFD_CORE
	default y if ARCH_U300
	help
	  Select this to enable the AB3100 Mixed Signal IC core
	  functionality. This connects to a AB3100 on the I2C bus
	  and expose a number of symbols needed for dependent devices
	  to read and write registers and subscribe to events from
	  this multi-functional IC. This is needed to use other features
	  of the AB3100 such as battery-backed RTC, charging control,
	  LEDs, vibrator, system power and temperature, power management
	  and ALSA sound.

config AB3100_OTP
	tristate "ST-Ericsson AB3100 OTP functions"
	depends on AB3100_CORE
	default y if AB3100_CORE
	help
	  Select this to enable the AB3100 Mixed Signal IC OTP (one-time
	  programmable memory) support. This exposes a sysfs file to read
	  out OTP values.

config AB8500_CORE
	bool "ST-Ericsson AB8500 Mixed Signal Power Management chip"
	depends on ABX500_CORE && MFD_DB8500_PRCMU
	select POWER_SUPPLY
	select MFD_CORE
	select IRQ_DOMAIN
	help
	  Select this option to enable access to AB8500 power management
	  chip. This connects to U8500 either on the SSP/SPI bus (deprecated
	  since hardware version v1.0) or the I2C bus via PRCMU. It also adds
	  the irq_chip parts for handling the Mixed Signal chip events.
	  This chip embeds various other multimedia funtionalities as well.

config AB8500_DEBUG
       bool "Enable debug info via debugfs"
       depends on AB8500_GPADC && DEBUG_FS
       default y if DEBUG_FS
       help
         Select this option if you want debug information using the debug
         filesystem, debugfs.

config AB8500_GPADC
	bool "ST-Ericsson AB8500 GPADC driver"
	depends on AB8500_CORE && REGULATOR_AB8500
	default y
	help
	  AB8500 GPADC driver used to convert Acc and battery/ac/usb voltage

config MFD_DB8500_PRCMU
	bool "ST-Ericsson DB8500 Power Reset Control Management Unit"
	depends on UX500_SOC_DB8500
	select MFD_CORE
	help
	  Select this option to enable support for the DB8500 Power Reset
	  and Control Management Unit. This is basically an autonomous
	  system controller running an XP70 microprocessor, which is accessed
	  through a register map.

config MFD_STMPE
	bool "STMicroelectronics STMPE"
	depends on (I2C=y || SPI_MASTER=y)
	select MFD_CORE
	help
	  Support for the STMPE family of I/O Expanders from
	  STMicroelectronics.

	  Currently supported devices are:

		STMPE811: GPIO, Touchscreen
		STMPE1601: GPIO, Keypad
		STMPE1801: GPIO, Keypad
		STMPE2401: GPIO, Keypad
		STMPE2403: GPIO, Keypad

	  This driver provides common support for accessing the device,
	  additional drivers must be enabled in order to use the functionality
	  of the device.  Currently available sub drivers are:

		GPIO: stmpe-gpio
		Keypad: stmpe-keypad
		Touchscreen: stmpe-ts

menu "STMicroelectronics STMPE Interface Drivers"
depends on MFD_STMPE

config STMPE_I2C
	bool "STMicroelectronics STMPE I2C Interface"
	depends on I2C=y
	default y
	help
	  This is used to enable I2C interface of STMPE

config STMPE_SPI
	bool "STMicroelectronics STMPE SPI Interface"
	depends on SPI_MASTER
	help
	  This is used to enable SPI interface of STMPE
endmenu

config MFD_STA2X11
	bool "STMicroelectronics STA2X11"
	depends on STA2X11
	select MFD_CORE
	select REGMAP_MMIO

config MFD_SYSCON
	bool "System Controller Register R/W Based on Regmap"
	select REGMAP_MMIO
	help
	  Select this option to enable accessing system control registers
	  via regmap.

config MFD_DAVINCI_VOICECODEC
	tristate
	select MFD_CORE

config MFD_TI_AM335X_TSCADC
	tristate "TI ADC / Touch Screen chip support"
	select MFD_CORE
	select REGMAP
	select REGMAP_MMIO
	help
	  If you say yes here you get support for Texas Instruments series
	  of Touch Screen /ADC chips.
	  To compile this driver as a module, choose M here: the
	  module will be called ti_am335x_tscadc.

config MFD_DM355EVM_MSP
	bool "TI DaVinci DM355 EVM microcontroller"
	depends on I2C=y && MACH_DAVINCI_DM355_EVM
	help
	  This driver supports the MSP430 microcontroller used on these
	  boards.  MSP430 firmware manages resets and power sequencing,
	  inputs from buttons and the IR remote, LEDs, an RTC, and more.

config MFD_LP3943
	tristate "TI/National Semiconductor LP3943 MFD Driver"
	depends on I2C
	select MFD_CORE
	select REGMAP_I2C
	help
	  Support for the TI/National Semiconductor LP3943.
	  This driver consists of GPIO and PWM drivers.
	  With these functionalities, it can be used for LED string control or
	  general usage such like a GPIO controller and a PWM controller.

config MFD_LP8788
	bool "TI LP8788 Power Management Unit Driver"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	select IRQ_DOMAIN
	help
	  TI LP8788 PMU supports regulators, battery charger, RTC,
	  ADC, backlight driver and current sinks.

config MFD_OMAP_USB_HOST
	bool "TI OMAP USBHS core and TLL driver"
	depends on USB_EHCI_HCD_OMAP || USB_OHCI_HCD_OMAP3
	default y
	help
	  This is the core driver for the OAMP EHCI and OHCI drivers.
	  This MFD driver does the required setup functionalities for
	  OMAP USB Host drivers.

config MFD_PALMAS
	bool "TI Palmas series chips"
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	depends on I2C=y
	help
	  If you say yes here you get support for the Palmas
	  series of PMIC chips from Texas Instruments.

config MFD_TI_SSP
	tristate "TI Sequencer Serial Port support"
	depends on ARCH_DAVINCI_TNETV107X
	select MFD_CORE
	---help---
	  Say Y here if you want support for the Sequencer Serial Port
	  in a Texas Instruments TNETV107X SoC.

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

config TPS6105X
	tristate "TI TPS61050/61052 Boost Converters"
	depends on I2C
	select REGULATOR
	select MFD_CORE
	select REGULATOR_FIXED_VOLTAGE
	help
	  This option enables a driver for the TP61050/TPS61052
	  high-power "white LED driver". This boost converter is
	  sometimes used for other things than white LEDs, and
	  also contains a GPIO pin.

config TPS65010
	tristate "TI TPS6501x Power Management chips"
	depends on I2C && GPIOLIB
	default y if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_OSK
	help
	  If you say yes here you get support for the TPS6501x series of
	  Power Management chips.  These include voltage regulators,
	  lithium ion/polymer battery charging, and other features that
	  are often used in portable devices like cell phones and cameras.

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

config TPS6507X
	tristate "TI TPS6507x Power Management / Touch Screen chips"
	select MFD_CORE
	depends on I2C
	help
	  If you say yes here you get support for the TPS6507x series of
	  Power Management / Touch Screen chips.  These include voltage
	  regulators, lithium ion/polymer battery charging, touch screen
	  and other features that are often used in portable devices.
	  This driver can also be built as a module.  If so, the module
	  will be called tps6507x.

config TPS65911_COMPARATOR
	tristate

config MFD_TPS65090
	bool "TI TPS65090 Power Management chips"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	help
	  If you say yes here you get support for the TPS65090 series of
	  Power Management chips.
	  This driver provides common support for accessing the device,
	  additional drivers must be enabled in order to use the
	  functionality of the device.

config MFD_TPS65217
	tristate "TI TPS65217 Power Management / White LED chips"
	depends on I2C
	select MFD_CORE
	select REGMAP_I2C
	help
	  If you say yes here you get support for the TPS65217 series of
	  Power Management / White LED chips.
	  These include voltage regulators, lithium ion/polymer battery
	  charger, wled and other features that are often used in portable
	  devices.

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

config MFD_TPS6586X
	bool "TI TPS6586x Power Management chips"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	help
	  If you say yes here you get support for the TPS6586X series of
	  Power Management chips.
	  This driver provides common support for accessing the device,
	  additional drivers must be enabled in order to use the
	  functionality of the device.

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

config MFD_TPS65910
	bool "TI TPS65910 Power Management chip"
	depends on I2C=y && GPIOLIB
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	select IRQ_DOMAIN
	help
	  if you say yes here you get support for the TPS65910 series of
	  Power Management chips.

config MFD_TPS65912
	bool "TI TPS65912 Power Management chip"
	depends on GPIOLIB
	select MFD_CORE
	help
	  If you say yes here you get support for the TPS65912 series of
	  PM chips.

config MFD_TPS65912_I2C
	bool "TI TPS65912 Power Management chip with I2C"
	select MFD_CORE
	select MFD_TPS65912
	depends on I2C=y && GPIOLIB
	help
	  If you say yes here you get support for the TPS65912 series of
	  PM chips with I2C interface.

config MFD_TPS65912_SPI
	bool "TI TPS65912 Power Management chip with SPI"
	select MFD_CORE
	select MFD_TPS65912
	depends on SPI_MASTER && GPIOLIB
	help
	  If you say yes here you get support for the TPS65912 series of
	  PM chips with SPI interface.

config MFD_TPS80031
	bool "TI TPS80031/TPS80032 Power Management chips"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	help
	  If you say yes here you get support for the Texas Instruments
	  TPS80031/ TPS80032 Fully Integrated Power Management with Power
	  Path and Battery Charger. The device provides five configurable
	  step-down converters, 11 general purpose LDOs, USB OTG Module,
	  ADC, RTC, 2 PWM, System Voltage Regulator/Battery Charger with
	  Power Path from USB, 32K clock generator.

config TWL4030_CORE
	bool "TI TWL4030/TWL5030/TWL6030/TPS659x0 Support"
	depends on I2C=y
	select IRQ_DOMAIN
	select REGMAP_I2C
	help
	  Say yes here if you have TWL4030 / TWL6030 family chip on your board.
	  This core driver provides register access and IRQ handling
	  facilities, and registers devices for the various functions
	  so that function-specific drivers can bind to them.

	  These multi-function chips are found on many OMAP2 and OMAP3
	  boards, providing power management, RTC, GPIO, keypad, a
	  high speed USB OTG transceiver, an audio codec (on most
	  versions) and many other features.

config TWL4030_MADC
	tristate "TI TWL4030 MADC"
	depends on TWL4030_CORE
	help
	This driver provides support for triton TWL4030-MADC. The
	driver supports both RT and SW conversion methods.

	This driver can be built as a module. If so it will be
	named twl4030-madc

config TWL4030_POWER
	bool "TI TWL4030 power resources"
	depends on TWL4030_CORE && ARM
	help
	  Say yes here if you want to use the power resources on the
	  TWL4030 family chips.  Most of these resources are regulators,
	  which have a separate driver; some are control signals, such
	  as clock request handshaking.

	  This driver uses board-specific data to initialize the resources
	  and load scripts controlling which resources are switched off/on
	  or reset when a sleep, wakeup or warm reset event occurs.

config MFD_TWL4030_AUDIO
	bool "TI TWL4030 Audio"
	depends on TWL4030_CORE
	select MFD_CORE
	default n

config TWL6040_CORE
	bool "TI TWL6040 audio codec"
	depends on I2C=y
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	default n
	help
	  Say yes here if you want support for Texas Instruments TWL6040 audio
	  codec.
	  This driver provides common support for accessing the device,
	  additional drivers must be enabled in order to use the
	  functionality of the device (audio, vibra).

config MENELAUS
	bool "TI TWL92330/Menelaus PM chip"
	depends on I2C=y && ARCH_OMAP2
	help
	  If you say yes here you get support for the Texas Instruments
	  TWL92330/Menelaus Power Management chip. This include voltage
	  regulators, Dual slot memory card transceivers, real-time clock
	  and other features that are often used in portable devices like
	  cell phones and PDAs.

config MFD_WL1273_CORE
	tristate "TI WL1273 FM radio"
	depends on I2C
	select MFD_CORE
	default n
	help
	  This is the core driver for the TI WL1273 FM radio. This MFD
	  driver connects the radio-wl1273 V4L2 module and the wl1273
	  audio codec.

config MFD_LM3533
	tristate "TI/National Semiconductor LM3533 Lighting Power chip"
	depends on I2C
	select MFD_CORE
	select REGMAP_I2C
	help
	  Say yes here to enable support for National Semiconductor / TI
	  LM3533 Lighting Power chips.

	  This driver provides common support for accessing the device;
	  additional drivers must be enabled in order to use the LED,
	  backlight or ambient-light-sensor functionality of the device.

config MFD_TIMBERDALE
	tristate "Timberdale FPGA"
	select MFD_CORE
	depends on PCI && GPIOLIB
	---help---
	This is the core driver for the timberdale FPGA. This device is a
	multifunction device which exposes numerous platform devices.

	The timberdale FPGA can be found on the Intel Atom development board
	for in-vehicle infontainment, called Russellville.

config MFD_TC3589X
	bool "Toshiba TC35892 and variants"
	depends on I2C=y
	select MFD_CORE
	help
	  Support for the Toshiba TC35892 and variants I/O Expander.

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

config MFD_TMIO
	bool
	default n

config MFD_T7L66XB
	bool "Toshiba T7L66XB"
	depends on ARM && HAVE_CLK
	select MFD_CORE
	select MFD_TMIO
	help
	  Support for Toshiba Mobile IO Controller T7L66XB

config MFD_TC6387XB
	bool "Toshiba TC6387XB"
	depends on ARM && HAVE_CLK
	select MFD_CORE
	select MFD_TMIO
	help
	  Support for Toshiba Mobile IO Controller TC6387XB

config MFD_TC6393XB
	bool "Toshiba TC6393XB"
	depends on ARM && HAVE_CLK
	select GPIOLIB
	select MFD_CORE
	select MFD_TMIO
	help
	  Support for Toshiba Mobile IO Controller TC6393XB

config MFD_VX855
	tristate "VIA VX855/VX875 integrated south bridge"
	depends on PCI
	select MFD_CORE
	help
	  Say yes here to enable support for various functions of the
	  VIA VX855/VX875 south bridge. You will need to enable the vx855_spi
	  and/or vx855_gpio drivers for this to do anything useful.

config MFD_ARIZONA
	select REGMAP
	select REGMAP_IRQ
	select MFD_CORE
	bool

config MFD_ARIZONA_I2C
	tristate "Wolfson Microelectronics Arizona platform with I2C"
	select MFD_ARIZONA
	select MFD_CORE
	select REGMAP_I2C
	depends on I2C
	help
	  Support for the Wolfson Microelectronics Arizona platform audio SoC
	  core functionality controlled via I2C.

config MFD_ARIZONA_SPI
	tristate "Wolfson Microelectronics Arizona platform with SPI"
	select MFD_ARIZONA
	select MFD_CORE
	select REGMAP_SPI
	depends on SPI_MASTER
	help
	  Support for the Wolfson Microelectronics Arizona platform audio SoC
	  core functionality controlled via I2C.

config MFD_WM5102
	bool "Wolfson Microelectronics WM5102"
	depends on MFD_ARIZONA
	help
	  Support for Wolfson Microelectronics WM5102 low power audio SoC

config MFD_WM5110
	bool "Wolfson Microelectronics WM5110"
	depends on MFD_ARIZONA
	help
	  Support for Wolfson Microelectronics WM5110 low power audio SoC

config MFD_WM8997
	bool "Wolfson Microelectronics WM8997"
	depends on MFD_ARIZONA
	help
	  Support for Wolfson Microelectronics WM8997 low power audio SoC

config MFD_WM8400
	bool "Wolfson Microelectronics WM8400"
	select MFD_CORE
	depends on I2C=y
	select REGMAP_I2C
	help
	  Support for the Wolfson Microelecronics WM8400 PMIC and audio
	  CODEC.  This driver provides common support for accessing
	  the device, additional drivers must be enabled in order to use
	  the functionality of the device.

config MFD_WM831X
	bool

config MFD_WM831X_I2C
	bool "Wolfson Microelectronics WM831x/2x PMICs with I2C"
	select MFD_CORE
	select MFD_WM831X
	select REGMAP_I2C
	select IRQ_DOMAIN
	depends on I2C=y
	help
	  Support for the Wolfson Microelecronics WM831x and WM832x PMICs
	  when controlled using I2C.  This driver provides common support
	  for accessing the device, additional drivers must be enabled in
	  order to use the functionality of the device.

config MFD_WM831X_SPI
	bool "Wolfson Microelectronics WM831x/2x PMICs with SPI"
	select MFD_CORE
	select MFD_WM831X
	select REGMAP_SPI
	select IRQ_DOMAIN
	depends on SPI_MASTER
	help
	  Support for the Wolfson Microelecronics WM831x and WM832x PMICs
	  when controlled using SPI.  This driver provides common support
	  for accessing the device, additional drivers must be enabled in
	  order to use the functionality of the device.

config MFD_WM8350
	bool

config MFD_WM8350_I2C
	bool "Wolfson Microelectronics WM8350 with I2C"
	select MFD_WM8350
	depends on I2C=y
	help
	  The WM8350 is an integrated audio and power management
	  subsystem with watchdog and RTC functionality for embedded
	  systems.  This option enables core support for the WM8350 with
	  I2C as the control interface.  Additional options must be
	  selected to enable support for the functionality of the chip.

config MFD_WM8994
	bool "Wolfson Microelectronics WM8994"
	select MFD_CORE
	select REGMAP_I2C
	select REGMAP_IRQ
	depends on I2C=y
	help
	  The WM8994 is a highly integrated hi-fi CODEC designed for
	  smartphone applicatiosn.  As well as audio functionality it
	  has on board GPIO and regulator functionality which is
	  supported via the relevant subsystems.  This driver provides
	  core support for the WM8994, in order to use the actual
	  functionaltiy of the device other drivers must be enabled.

config MFD_STW481X
	bool "Support for ST Microelectronics STw481x"
	depends on I2C && ARCH_NOMADIK
	select REGMAP_I2C
	select MFD_CORE
	help
	  Select this option to enable the STw481x chip driver used
	  in various ST Microelectronics and ST-Ericsson embedded
	  Nomadik series.

endmenu
endif

menu "Multimedia Capabilities Port drivers"
	depends on ARCH_SA1100

config MCP
	tristate

# Interface drivers
config MCP_SA11X0
	tristate "Support SA11x0 MCP interface"
	depends on ARCH_SA1100
	select MCP

# Chip drivers
config MCP_UCB1200
	bool "Support for UCB1200 / UCB1300"
	depends on MCP_SA11X0
	select MCP

config MCP_UCB1200_TS
	tristate "Touchscreen interface support"
	depends on MCP_UCB1200 && INPUT

endmenu

config VEXPRESS_CONFIG
	bool "ARM Versatile Express platform infrastructure"
	depends on ARM || ARM64
	help
	  Platform configuration infrastructure for the ARM Ltd.
	  Versatile Express.
