#
# Multifunction miscellaneous devices
#

menuconfig MFD_SUPPORT
	bool "Multifunction device drivers"
	depends on HAS_IOMEM
	default y
	help
	  Multifunction devices embed several functions (e.g. GPIOs,
	  touchscreens, keyboards, current regulators, power management chips,
	  etc...) in one single integrated circuit. They usually talk to the
	  main CPU through one or more IRQ lines and low speed data busses (SPI,
	  I2C, etc..). They appear as one single device to the main system
	  through the data bus and the MFD framework allows for sub devices
	  (a.k.a. functions) to appear as discrete platform devices.
	  MFDs are typically found on embedded platforms.

	  This option alone does not add any kernel code.

if MFD_SUPPORT

config MFD_CORE
	tristate
	default n

config MFD_88PM860X
	bool "Support Marvell 88PM8606/88PM8607"
	depends on I2C=y && GENERIC_HARDIRQS
	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_SM501
	tristate "Support for 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_ASIC3
	bool "Support for Compaq ASIC3"
	depends on GENERIC_HARDIRQS && GPIOLIB && ARM
	select MFD_CORE
	 ---help---
	  This driver supports the ASIC3 multifunction chip found on many
	  PDAs (mainly iPAQ and HTC based ones)

config MFD_DAVINCI_VOICECODEC
	tristate
	select MFD_CORE

config MFD_DM355EVM_MSP
	bool "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_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 HTC_EGPIO
	bool "HTC EGPIO support"
	depends on GENERIC_HARDIRQS && 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 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 TPS6105X
	tristate "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 "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 "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 MENELAUS
	bool "Texas Instruments 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 TWL4030_CORE
	bool "Texas Instruments TWL4030/TWL5030/TWL6030/TPS659x0 Support"
	depends on I2C=y && GENERIC_HARDIRQS
	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 "Texas Instruments 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 "Support power resources on TWL4030 family chips"
	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 TWL4030_CODEC
	bool
	depends on TWL4030_CORE
	select MFD_CORE
	default n

config TWL6030_PWM
	tristate "TWL6030 PWM (Pulse Width Modulator) Support"
	depends on TWL4030_CORE
	select HAVE_PWM
	default n
	help
	  Say yes here if you want support for TWL6030 PWM.
	  This is used to control charging LED brightness.

config MFD_STMPE
	bool "Support STMicroelectronics STMPE"
	depends on I2C=y && GENERIC_HARDIRQS
	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
		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

config MFD_TC3589X
	bool "Support Toshiba TC35892 and variants"
	depends on I2C=y && GENERIC_HARDIRQS
	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 "Support 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 "Support 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 "Support Toshiba TC6393XB"
	depends on GPIOLIB && ARM
	select MFD_CORE
	select MFD_TMIO
	help
	  Support for Toshiba Mobile IO Controller TC6393XB

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_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_MAX8925
	bool "Maxim Semiconductor MAX8925 PMIC Support"
	depends on I2C=y && GENERIC_HARDIRQS
	select MFD_CORE
	help
	  Say yes here to support for Maxim Semiconductor MAX8925. This is
	  a Power Management IC. This driver provies 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 && GENERIC_HARDIRQS
	select MFD_CORE
	help
	  Say yes here to support for Maxim Semiconductor MAX8998/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 && GENERIC_HARDIRQS
	select MFD_CORE
	help
	  Say yes here to support for Maxim Semiconductor MAX8998 and
	  National Semiconductor LP3974. This is a Power Management IC.
	  This driver provies common support for accessing the device,
	  additional drivers must be enabled in order to use the functionality
	  of the device.

config MFD_WM8400
	tristate "Support Wolfson Microelectronics WM8400"
	select MFD_CORE
	depends on 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
	depends on GENERIC_HARDIRQS

config MFD_WM831X_I2C
	bool "Support Wolfson Microelectronics WM831x/2x PMICs with I2C"
	select MFD_CORE
	select MFD_WM831X
	depends on I2C=y && GENERIC_HARDIRQS
	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 "Support Wolfson Microelectronics WM831x/2x PMICs with SPI"
	select MFD_CORE
	select MFD_WM831X
	depends on SPI_MASTER && GENERIC_HARDIRQS
	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
	depends on GENERIC_HARDIRQS

config MFD_WM8350_CONFIG_MODE_0
	bool
	depends on MFD_WM8350

config MFD_WM8350_CONFIG_MODE_1
	bool
	depends on MFD_WM8350

config MFD_WM8350_CONFIG_MODE_2
	bool
	depends on MFD_WM8350

config MFD_WM8350_CONFIG_MODE_3
	bool
	depends on MFD_WM8350

config MFD_WM8351_CONFIG_MODE_0
	bool
	depends on MFD_WM8350

config MFD_WM8351_CONFIG_MODE_1
	bool
	depends on MFD_WM8350

config MFD_WM8351_CONFIG_MODE_2
	bool
	depends on MFD_WM8350

config MFD_WM8351_CONFIG_MODE_3
	bool
	depends on MFD_WM8350

config MFD_WM8352_CONFIG_MODE_0
	bool
	depends on MFD_WM8350

config MFD_WM8352_CONFIG_MODE_1
	bool
	depends on MFD_WM8350

config MFD_WM8352_CONFIG_MODE_2
	bool
	depends on MFD_WM8350

config MFD_WM8352_CONFIG_MODE_3
	bool
	depends on MFD_WM8350

config MFD_WM8350_I2C
	bool "Support Wolfson Microelectronics WM8350 with I2C"
	select MFD_WM8350
	depends on I2C=y && GENERIC_HARDIRQS
	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 "Support Wolfson Microelectronics WM8994"
	select MFD_CORE
	depends on I2C=y && GENERIC_HARDIRQS
	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_PCF50633
	tristate "Support for NXP PCF50633"
	depends on 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 MFD_MC13783
	tristate

config MFD_MC13XXX
	tristate "Support Freescale MC13783 and MC13892"
	depends on SPI_MASTER
	select MFD_CORE
	select MFD_MC13783
	help
	  Support for the Freescale (Atlas) PMIC and audio CODECs
	  MC13783 and MC13892.
	  This driver provides common support for accessing  the device,
	  additional drivers must be enabled in order to use the
	  functionality of the device.

config PCF50633_ADC
	tristate "Support for 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 "Support for 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 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 EZX_PCAP
	bool "PCAP Support"
	depends on GENERIC_HARDIRQS && SPI_MASTER
	help
	  This enables the PCAP ASIC present on EZX Phones. This is
	  needed for MMC, TouchScreen, Sound, USB, etc..

config AB8500_CORE
	bool "ST-Ericsson AB8500 Mixed Signal Power Management chip"
	depends on GENERIC_HARDIRQS && ABX500_CORE
	select MFD_CORE
	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_I2C_CORE
	bool "AB8500 register access via PRCMU I2C"
	depends on AB8500_CORE && UX500_SOC_DB8500
	default y
	help
	  This enables register access to the AB8500 chip via PRCMU I2C.
	  The AB8500 chip can be accessed via SPI or I2C. On DB8500 hardware
	  the I2C bus is connected to the Power Reset
	  and Mangagement Unit, PRCMU.

config AB8500_DEBUG
       bool "Enable debug info via debugfs"
       depends on AB8500_CORE && 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 "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 AB3550_CORE
        bool "ST-Ericsson AB3550 Mixed Signal Circuit core functions"
	select MFD_CORE
	depends on I2C=y && GENERIC_HARDIRQS && ABX500_CORE
	help
	  Select this to enable the AB3550 Mixed Signal IC core
	  functionality. This connects to a AB3550 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 AB3550 such as battery-backed RTC, charging control,
	  LEDs, vibrator, system power and temperature, power management
	  and ALSA sound.

config MFD_CS5535
	tristate "Support for 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_TIMBERDALE
	tristate "Support for the 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 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_RDC321X
	tristate "Support for RDC-R321x 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_JANZ_CMODIO
	tristate "Support for 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
	tristate "Support for the JZ4740 SoC ADC core"
	select MFD_CORE
	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_TPS6586X
	bool "TPS6586x Power Management chips"
	depends on I2C=y && GPIOLIB && GENERIC_HARDIRQS
	select MFD_CORE
	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_VX855
	tristate "Support for 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_WL1273_CORE
	tristate "Support for 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_OMAP_USB_HOST
	bool "Support OMAP USBHS core 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.

endif # MFD_SUPPORT

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
	tristate "Support for UCB1200 / UCB1300"
	depends on MCP

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

endmenu
