# SPDX-License-Identifier: GPL-2.0-only
#
# ADC drivers
#
# When adding new entries keep the list in alphabetical order

menu "Analog to digital converters"

config AB8500_GPADC
	bool "ST-Ericsson AB8500 GPADC driver"
	depends on AB8500_CORE && REGULATOR_AB8500
	default y
	help
	  AB8500 Analog Baseband, mixed signal integrated circuit GPADC
	  (General Purpose Analog to Digital Converter) driver used to monitor
	  internal voltages, convert accessory and battery, AC (charger, mains)
	  and USB voltages integral to the U8500 platform.

config AD_SIGMA_DELTA
	tristate
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER

config AD7091R5
	tristate "Analog Devices AD7091R5 ADC Driver"
	depends on I2C
	select REGMAP_I2C
	help
	  Say yes here to build support for Analog Devices AD7091R-5 ADC.

config AD7124
	tristate "Analog Devices AD7124 and similar sigma-delta ADCs driver"
	depends on SPI_MASTER
	select AD_SIGMA_DELTA
	help
	  Say yes here to build support for Analog Devices AD7124-4 and AD7124-8
	  SPI analog to digital converters (ADC).

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

config AD7192
	tristate "Analog Devices AD7190 AD7192 AD7193 AD7195 ADC driver"
	depends on SPI
	select AD_SIGMA_DELTA
	help
	  Say yes here to build support for Analog Devices AD7190,
	  AD7192, AD7193 or AD7195 SPI analog to digital converters (ADC).
	  If unsure, say N (but it's safe to say "Y").

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

config AD7266
	tristate "Analog Devices AD7265/AD7266 ADC driver"
	depends on SPI_MASTER
	select IIO_BUFFER
	select IIO_TRIGGER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Analog Devices AD7265 and AD7266
	  ADCs.

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

config AD7291
	tristate "Analog Devices AD7291 ADC driver"
	depends on I2C
	help
	  Say yes here to build support for Analog Devices AD7291
	  8 Channel ADC with temperature sensor.

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

config AD7292
	tristate "Analog Devices AD7292 ADC driver"
	depends on SPI
	help
	  Say yes here to build support for Analog Devices AD7292
	  8 Channel ADC with temperature sensor.

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

config AD7298
	tristate "Analog Devices AD7298 ADC driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Analog Devices AD7298
	  8 Channel ADC with temperature sensor.

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

config AD7476
	tristate "Analog Devices AD7476 1-channel ADCs driver and other similar devices from AD and TI"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for the following SPI analog to
	  digital converters (ADCs):
	  Analog Devices: AD7273, AD7274, AD7276, AD7277, AD7278, AD7475,
	  AD7476, AD7477, AD7478, AD7466, AD7467, AD7468, AD7495, AD7910,
	  AD7920.
	  Texas Instruments: ADS7866, ADS7867, ADS7868.

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

config AD7606
	tristate
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER

config AD7606_IFACE_PARALLEL
	tristate "Analog Devices AD7606 ADC driver with parallel interface support"
	depends on HAS_IOMEM
	select AD7606
	help
	  Say yes here to build parallel interface support for Analog Devices:
	  ad7605-4, ad7606, ad7606-6, ad7606-4 analog to digital converters (ADC).

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

config AD7606_IFACE_SPI
	tristate "Analog Devices AD7606 ADC driver with spi interface support"
	depends on SPI
	select AD7606
	help
	  Say yes here to build spi interface support for Analog Devices:
	  ad7605-4, ad7606, ad7606-6, ad7606-4 analog to digital converters (ADC).

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

config AD7766
	tristate "Analog Devices AD7766/AD7767 ADC driver"
	depends on SPI_MASTER
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Analog Devices AD7766, AD7766-1,
	  AD7766-2, AD7767, AD7767-1, AD7767-2 SPI analog to digital converters.

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

config AD7768_1
	tristate "Analog Devices AD7768-1 ADC driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Analog Devices AD7768-1 SPI
	  simultaneously sampling sigma-delta analog to digital converter (ADC).

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

config AD7780
	tristate "Analog Devices AD7780 and similar ADCs driver"
	depends on SPI
	depends on GPIOLIB || COMPILE_TEST
	select AD_SIGMA_DELTA
	help
	  Say yes here to build support for Analog Devices AD7170, AD7171,
	  AD7780 and AD7781 SPI analog to digital converters (ADC).

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

config AD7791
	tristate "Analog Devices AD7791 ADC driver"
	depends on SPI
	select AD_SIGMA_DELTA
	help
	  Say yes here to build support for Analog Devices AD7787, AD7788, AD7789,
	  AD7790 and AD7791 SPI analog to digital converters (ADC).

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

config AD7793
	tristate "Analog Devices AD7793 and similar ADCs driver"
	depends on SPI
	select AD_SIGMA_DELTA
	help
	  Say yes here to build support for Analog Devices AD7785, AD7792, AD7793,
	  AD7794 and AD7795 SPI analog to digital converters (ADC).

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

config AD7887
	tristate "Analog Devices AD7887 ADC driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Analog Devices
	  AD7887 SPI analog to digital converter (ADC).

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

config AD7923
	tristate "Analog Devices AD7923 and similar ADCs driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Analog Devices
	  AD7904, AD7914, AD7923, AD7924 4 Channel ADCs.

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

config AD7949
	tristate "Analog Devices AD7949 and similar ADCs driver"
	depends on SPI
	help
	  Say yes here to build support for Analog Devices
	  AD7949, AD7682, AD7689 8 Channel ADCs.

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

config AD799X
	tristate "Analog Devices AD799x ADC driver"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Analog Devices:
	  ad7991, ad7995, ad7999, ad7992, ad7993, ad7994, ad7997, ad7998
	  i2c analog to digital converters (ADC). Provides direct access
	  via sysfs.

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

config AD9467
	tristate "Analog Devices AD9467 High Speed ADC driver"
	depends on SPI
	depends on ADI_AXI_ADC
	help
	  Say yes here to build support for Analog Devices:
	  * AD9467 16-Bit, 200 MSPS/250 MSPS Analog-to-Digital Converter

	  The driver requires the assistance of the AXI ADC IP core to operate,
	  since SPI is used for configuration only, while data has to be
	  streamed into memory via DMA.

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

config ADI_AXI_ADC
	tristate "Analog Devices Generic AXI ADC IP core driver"
	select IIO_BUFFER
	select IIO_BUFFER_HW_CONSUMER
	select IIO_BUFFER_DMAENGINE
	depends on HAS_IOMEM
	depends on OF
	help
	  Say yes here to build support for Analog Devices Generic
	  AXI ADC IP core. The IP core is used for interfacing with
	  analog-to-digital (ADC) converters that require either a high-speed
	  serial interface (JESD204B/C) or a source synchronous parallel
	  interface (LVDS/CMOS).
	  Typically (for such devices) SPI will be used for configuration only,
	  while this IP core handles the streaming of data into memory via DMA.

	  Link: https://wiki.analog.com/resources/fpga/docs/axi_adc_ip
	  If unsure, say N (but it's safe to say "Y").

	  To compile this driver as a module, choose M here: the
	  module will be called adi-axi-adc.

config ASPEED_ADC
	tristate "Aspeed ADC"
	depends on ARCH_ASPEED || COMPILE_TEST
	depends on COMMON_CLK
	help
	  If you say yes here you get support for the ADC included in Aspeed
	  BMC SoCs.

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

config AT91_ADC
	tristate "Atmel AT91 ADC"
	depends on ARCH_AT91 || COMPILE_TEST
	depends on INPUT && SYSFS && OF
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Atmel AT91 ADC.

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

config AT91_SAMA5D2_ADC
	tristate "Atmel AT91 SAMA5D2 ADC"
	depends on ARCH_AT91 || COMPILE_TEST
	depends on HAS_IOMEM
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Atmel SAMA5D2 ADC which is
	  available on SAMA5D2 SoC family.

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

config AXP20X_ADC
	tristate "X-Powers AXP20X and AXP22X ADC driver"
	depends on MFD_AXP20X
	help
	  Say yes here to have support for X-Powers power management IC (PMIC)
	  AXP20X and AXP22X ADC devices.

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

config AXP288_ADC
	tristate "X-Powers AXP288 ADC driver"
	depends on MFD_AXP20X
	help
	  Say yes here to have support for X-Powers power management IC (PMIC) ADC
	  device. Depending on platform configuration, this general purpose ADC can
	  be used for sampling sensors such as thermal resistors.

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

config BCM_IPROC_ADC
	tristate "Broadcom IPROC ADC driver"
	depends on (ARCH_BCM_IPROC && OF) || COMPILE_TEST
	depends on MFD_SYSCON
	default ARCH_BCM_CYGNUS
	help
	  Say Y here if you want to add support for the Broadcom static
	  ADC driver.

	  Broadcom iProc ADC driver. Broadcom iProc ADC controller has 8
	  channels. The driver allows the user to read voltage values.

config BERLIN2_ADC
	tristate "Marvell Berlin2 ADC driver"
	depends on ARCH_BERLIN
	help
	  Marvell Berlin2 ADC driver. This ADC has 8 channels, with one used for
	  temperature measurement.

config CC10001_ADC
	tristate "Cosmic Circuits 10001 ADC driver"
	depends on HAS_IOMEM && HAVE_CLK && REGULATOR
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Cosmic Circuits 10001 ADC.

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

config CPCAP_ADC
	tristate "Motorola CPCAP PMIC ADC driver"
	depends on MFD_CPCAP
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Motorola CPCAP PMIC ADC.

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

config DA9150_GPADC
	tristate "Dialog DA9150 GPADC driver support"
	depends on MFD_DA9150
	help
	  Say yes here to build support for Dialog DA9150 GPADC.

	  This driver can also be built as a module. If chosen, the module name
	  will be da9150-gpadc.

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

config DLN2_ADC
	tristate "Diolan DLN-2 ADC driver support"
	depends on MFD_DLN2
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Diolan DLN-2 ADC.

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

config ENVELOPE_DETECTOR
	tristate "Envelope detector using a DAC and a comparator"
	depends on OF
	help
	  Say yes here to build support for an envelope detector using a DAC
	  and a comparator.

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

config EP93XX_ADC
	tristate "Cirrus Logic EP93XX ADC driver"
	depends on ARCH_EP93XX
	help
	  Driver for the ADC module on the EP93XX series of SoC from Cirrus Logic.
	  It's recommended to switch on CONFIG_HIGH_RES_TIMERS option, in this
	  case driver will reduce its CPU usage by 90% in some use cases.

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

config EXYNOS_ADC
	tristate "Exynos ADC driver support"
	depends on ARCH_EXYNOS || ARCH_S3C24XX || ARCH_S3C64XX || ARCH_S5PV210 || (OF && COMPILE_TEST)
	depends on HAS_IOMEM
	help
	  Core support for the ADC block found in the Samsung EXYNOS series
	  of SoCs for drivers such as the touchscreen and hwmon to use to share
	  this resource.

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

config MXS_LRADC_ADC
	tristate "Freescale i.MX23/i.MX28 LRADC ADC"
	depends on MFD_MXS_LRADC
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for the ADC functions of the
	  i.MX23/i.MX28 LRADC. This includes general-purpose ADC readings,
	  battery voltage measurement, and die temperature measurement.

	  This driver can also be built as a module. If so, the module will be
	  called mxs-lradc-adc.

config FSL_MX25_ADC
	tristate "Freescale MX25 ADC driver"
	depends on MFD_MX25_TSADC
	help
	  Generic Conversion Queue driver used for general purpose ADC in the
	  MX25. This driver supports single measurements using the MX25 ADC.

config HI8435
	tristate "Holt Integrated Circuits HI-8435 threshold detector"
	select IIO_TRIGGERED_EVENT
	depends on SPI
	help
	  If you say yes here you get support for Holt Integrated Circuits
	  HI-8435 chip.

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

config HX711
	tristate "AVIA HX711 ADC for weight cells"
	depends on GPIOLIB
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for AVIA HX711 ADC which is used
	  for weigh cells

	  This driver uses two GPIOs, one acts as the clock and controls the
	  channel selection and gain, the other one is used for the measurement
	  data

	  Currently the raw value is read from the chip and delivered.
	  To get an actual weight one needs to subtract the
	  zero offset and multiply by a scale factor.
	  This should be done in userspace.

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

config INA2XX_ADC
	tristate "Texas Instruments INA2xx Power Monitors IIO driver"
	depends on I2C && !SENSORS_INA2XX
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_KFIFO_BUF
	help
	  Say yes here to build support for TI INA2xx family of Power Monitors.
	  This driver is mutually exclusive with the HWMON version.

config INGENIC_ADC
	tristate "Ingenic JZ47xx SoCs ADC driver"
	depends on MIPS || COMPILE_TEST
	select IIO_BUFFER
	help
	  Say yes here to build support for the Ingenic JZ47xx SoCs ADC unit.

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

config INTEL_MRFLD_ADC
	tristate "Intel Merrifield Basin Cove ADC driver"
	depends on INTEL_SOC_PMIC_MRFLD
	help
	  Say yes here to have support for Basin Cove power management IC (PMIC) ADC
	  device. Depending on platform configuration, this general purpose ADC can
	  be used for sampling sensors such as thermal resistors.

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

config IMX7D_ADC
	tristate "Freescale IMX7D ADC driver"
	depends on ARCH_MXC || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Say yes here to build support for IMX7D ADC.

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

config LP8788_ADC
	tristate "LP8788 ADC driver"
	depends on MFD_LP8788
	help
	  Say yes here to build support for TI LP8788 ADC.

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

config LPC18XX_ADC
	tristate "NXP LPC18xx ADC driver"
	depends on ARCH_LPC18XX || COMPILE_TEST
	depends on OF && HAS_IOMEM
	help
	  Say yes here to build support for NXP LPC18XX ADC.

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

config LPC32XX_ADC
	tristate "NXP LPC32XX ADC"
	depends on ARCH_LPC32XX || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Say yes here to build support for the integrated ADC inside the
	  LPC32XX SoC. Note that this feature uses the same hardware as the
	  touchscreen driver, so you should either select only one of the two
	  drivers (lpc32xx_adc or lpc32xx_ts) or, in the OpenFirmware case,
	  activate only one via device tree selection.  Provides direct access
	  via sysfs.

config LTC2471
	tristate "Linear Technology LTC2471 and LTC2473 ADC driver"
	depends on I2C
	help
	  Say yes here to build support for Linear Technology LTC2471 and
	  LTC2473 16-bit I2C ADC.

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

config LTC2485
	tristate "Linear Technology LTC2485 ADC driver"
	depends on I2C
	help
	  Say yes here to build support for Linear Technology LTC2485 ADC.

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

config LTC2496
	tristate "Linear Technology LTC2496 ADC driver"
	depends on SPI
	help
	  Say yes here to build support for Linear Technology LTC2496
	  16-Bit 8-/16-Channel Delta Sigma ADC.

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

config LTC2497
	tristate "Linear Technology LTC2497 ADC driver"
	depends on I2C
	help
	  Say yes here to build support for Linear Technology LTC2497
	  16-Bit 8-/16-Channel Delta Sigma ADC.

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

config MAX1027
	tristate "Maxim max1027 ADC driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Maxim SPI {10,12}-bit ADC models:
	  max1027, max1029, max1031, max1227, max1229 and max1231.

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

config MAX11100
	tristate "Maxim max11100 ADC driver"
	depends on SPI_MASTER
	help
	  Say yes here to build support for Maxim max11100 SPI ADC

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

config MAX1118
	tristate "Maxim max1117/max1118/max1119 ADCs driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Maxim max1117/max1118/max1119
	  8-bit, dual-channel ADCs.

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

config MAX1241
	tristate "Maxim max1241 ADC driver"
	depends on SPI_MASTER
	help
	  Say yes here to build support for Maxim max1241 12-bit, single-channel
	  ADC.

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

config MAX1363
	tristate "Maxim max1363 ADC driver"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for many Maxim i2c analog to digital
	  converters (ADC). (max1361, max1362, max1363, max1364, max1036,
	  max1037, max1038, max1039, max1136, max1136, max1137, max1138,
	  max1139, max1236, max1237, max11238, max1239, max11600, max11601,
	  max11602, max11603, max11604, max11605, max11606, max11607,
	  max11608, max11609, max11610, max11611, max11612, max11613,
	  max11614, max11615, max11616, max11617, max11644, max11645,
	  max11646, max11647) Provides direct access via sysfs and buffered
	  data via the iio dev interface.

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

config MAX9611
	tristate "Maxim max9611/max9612 ADC driver"
	depends on I2C
	help
	  Say yes here to build support for Maxim max9611/max9612 current sense
	  amplifier with 12-bits ADC interface.

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

config MCP320X
	tristate "Microchip Technology MCP3x01/02/04/08 and MCP3550/1/3"
	depends on SPI
	help
	  Say yes here to build support for Microchip Technology's
	  MCP3001, MCP3002, MCP3004, MCP3008, MCP3201, MCP3202, MCP3204,
	  MCP3208, MCP3301, MCP3550, MCP3551 and MCP3553 analog to digital
	  converters.

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

config MCP3422
	tristate "Microchip Technology MCP3421/2/3/4/5/6/7/8 driver"
	depends on I2C
	help
	  Say yes here to build support for Microchip Technology's MCP3421
	  MCP3422, MCP3423, MCP3424, MCP3425, MCP3426, MCP3427 or MCP3428
	  analog to digital converters.

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

config MCP3911
	tristate "Microchip Technology MCP3911 driver"
	depends on SPI
	help
	  Say yes here to build support for Microchip Technology's MCP3911
	  analog to digital converter.

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

config MEDIATEK_MT6360_ADC
	tristate "Mediatek MT6360 ADC driver"
	depends on MFD_MT6360
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here to enable MT6360 ADC support.
	  Integrated for System Monitoring includes
	  is used in smartphones and tablets and supports a 11 channel
	  general purpose ADC.

config MEDIATEK_MT6577_AUXADC
	tristate "MediaTek AUXADC driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Say yes here to enable support for MediaTek mt65xx AUXADC.

	  The driver supports immediate mode operation to read from one of sixteen
	  channels (external or internal).

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

config MEN_Z188_ADC
	tristate "MEN 16z188 ADC IP Core support"
	depends on MCB
	help
	  Say yes here to enable support for the MEN 16z188 ADC IP-Core on a MCB
	  carrier.

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

config MESON_SARADC
	tristate "Amlogic Meson SAR ADC driver"
	default ARCH_MESON
	depends on OF && COMMON_CLK && (ARCH_MESON || COMPILE_TEST)
	select REGMAP_MMIO
	help
	  Say yes here to build support for the SAR ADC found in Amlogic Meson
	  SoCs.

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

config MP2629_ADC
	tristate "Monolithic MP2629 ADC driver"
	depends on MFD_MP2629
	help
	  Say yes to have support for battery charger IC MP2629 ADC device
	  accessed over I2C.

	  This driver provides ADC conversion of system, input power supply
	  and battery voltage & current information.

config NAU7802
	tristate "Nuvoton NAU7802 ADC driver"
	depends on I2C
	help
	  Say yes here to build support for Nuvoton NAU7802 ADC.

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

config NPCM_ADC
	tristate "Nuvoton NPCM ADC driver"
	depends on ARCH_NPCM || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Say yes here to build support for Nuvoton NPCM ADC.

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

config PALMAS_GPADC
	tristate "TI Palmas General Purpose ADC"
	depends on MFD_PALMAS
	help
	  Palmas series pmic chip by Texas Instruments (twl6035/6037)
	  is used in smartphones and tablets and supports a 16 channel
	  general purpose ADC.

config QCOM_VADC_COMMON
	tristate

config QCOM_PM8XXX_XOADC
	tristate "Qualcomm SSBI PM8xxx PMIC XOADCs"
	depends on MFD_PM8XXX
	select QCOM_VADC_COMMON
	help
	  ADC driver for the XOADC portions of the Qualcomm PM8xxx PMICs
	  using SSBI transport: PM8018, PM8038, PM8058, PM8921.

	  To compile this driver as a module, choose M here: the module
	  will be called qcom-pm8xxx-xoadc.

config QCOM_SPMI_IADC
	tristate "Qualcomm SPMI PMIC current ADC"
	depends on SPMI
	select REGMAP_SPMI
	help
	  This is the IIO Current ADC driver for Qualcomm QPNP IADC Chip.

	  The driver supports single mode operation to read from one of two
	  channels (external or internal). Hardware have additional
	  channels internally used for gain and offset calibration.

	  To compile this driver as a module, choose M here: the module will
	  be called qcom-spmi-iadc.

config QCOM_SPMI_VADC
	tristate "Qualcomm SPMI PMIC voltage ADC"
	depends on SPMI
	select REGMAP_SPMI
	select QCOM_VADC_COMMON
	help
	  This is the IIO Voltage ADC driver for Qualcomm QPNP VADC Chip.

	  The driver supports multiple channels read. The VADC is a 15-bit
	  sigma-delta ADC. Some of the channels are internally used for
	  calibration.

	  To compile this driver as a module, choose M here: the module will
	  be called qcom-spmi-vadc.

config QCOM_SPMI_ADC5
	tristate "Qualcomm Technologies Inc. SPMI PMIC5 ADC"
	depends on SPMI
	select REGMAP_SPMI
	select QCOM_VADC_COMMON
	help
	  This is the IIO Voltage PMIC5 ADC driver for Qualcomm Technologies Inc.

	  The driver supports multiple channels read. The ADC is a 16-bit
	  sigma-delta ADC. The hardware supports calibrated results for
	  conversion requests and clients include reading voltage phone
	  power, on board system thermistors connected to the PMIC ADC,
	  PMIC die temperature, charger temperature, battery current, USB voltage
	  input, voltage signals connected to supported PMIC GPIO inputs. The
	  hardware supports internal pull-up for thermistors and can choose between
	  a 100k, 30k and 400k pull up using the ADC channels.

	  To compile this driver as a module, choose M here: the module will
	  be called qcom-spmi-adc5.

config RCAR_GYRO_ADC
	tristate "Renesas R-Car GyroADC driver"
	depends on ARCH_RCAR_GEN2 || COMPILE_TEST
	help
	  Say yes here to build support for the GyroADC found in Renesas
	  R-Car Gen2 SoCs. This block is a simple SPI offload engine for
	  reading data out of attached compatible ADCs in a round-robin
	  fashion. Up to 4 or 8 ADC channels are supported by this block,
	  depending on which ADCs are attached.

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

config RN5T618_ADC
	tristate "ADC for the RN5T618/RC5T619 family of chips"
	depends on MFD_RN5T618
	help
	  Say yes here to build support for the integrated ADC inside the
	  RN5T618/619 series PMICs:

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

config ROCKCHIP_SARADC
	tristate "Rockchip SARADC driver"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on RESET_CONTROLLER
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for the SARADC found in SoCs from
	  Rockchip.

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

config SC27XX_ADC
	tristate "Spreadtrum SC27xx series PMICs ADC"
	depends on MFD_SC27XX_PMIC || COMPILE_TEST
	help
	  Say yes here to build support for the integrated ADC inside the
	  Spreadtrum SC27xx series PMICs.

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

config SPEAR_ADC
	tristate "ST SPEAr ADC"
	depends on PLAT_SPEAR || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Say yes here to build support for the integrated ADC inside the
	  ST SPEAr SoC. Provides direct access via sysfs.

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

config SD_ADC_MODULATOR
	tristate "Generic sigma delta modulator"
	depends on OF
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Select this option to enables sigma delta modulator. This driver can
	  support generic sigma delta modulators.

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

config STM32_ADC_CORE
	tristate "STMicroelectronics STM32 adc core"
	depends on ARCH_STM32 || COMPILE_TEST
	depends on OF
	depends on REGULATOR
	depends on HAS_IOMEM
	select IIO_BUFFER
	select MFD_STM32_TIMERS
	select IIO_STM32_TIMER_TRIGGER
	select IIO_TRIGGERED_BUFFER
	help
	  Select this option to enable the core driver for STMicroelectronics
	  STM32 analog-to-digital converter (ADC).

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

config STM32_ADC
	tristate "STMicroelectronics STM32 adc"
	depends on STM32_ADC_CORE
	help
	  Say yes here to build support for STMicroelectronics stm32 Analog
	  to Digital Converter (ADC).

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

config STM32_DFSDM_CORE
	tristate "STMicroelectronics STM32 DFSDM core"
	depends on (ARCH_STM32 && OF) || COMPILE_TEST
	select REGMAP
	select REGMAP_MMIO
	help
	  Select this option to enable the  driver for STMicroelectronics
	  STM32 digital filter for sigma delta converter.

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

config STM32_DFSDM_ADC
	tristate "STMicroelectronics STM32 dfsdm adc"
	depends on (ARCH_STM32 && OF) || COMPILE_TEST
	select STM32_DFSDM_CORE
	select REGMAP_MMIO
	select IIO_BUFFER
	select IIO_BUFFER_HW_CONSUMER
	select IIO_TRIGGERED_BUFFER
	help
	  Select this option to support ADCSigma delta modulator for
	  STMicroelectronics STM32 digital filter for sigma delta converter.

	  This driver can also be built as a module.  If so, the module
	  will be called stm32-dfsdm-adc.

config STMPE_ADC
	tristate "STMicroelectronics STMPE ADC driver"
	depends on OF && MFD_STMPE
	help
	  Say yes here to build support for ST Microelectronics STMPE
	  built-in ADC block (stmpe811).

config STX104
	tristate "Apex Embedded Systems STX104 driver"
	depends on PC104 && X86
	select ISA_BUS_API
	select GPIOLIB
	help
	  Say yes here to build support for the Apex Embedded Systems STX104
	  integrated analog PC/104 card.

	  This driver supports the 16 channels of single-ended (8 channels of
	  differential) analog inputs, 2 channels of analog output, 4 digital
	  inputs, and 4 digital outputs provided by the STX104.

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

config SUN4I_GPADC
	tristate "Support for the Allwinner SoCs GPADC"
	depends on IIO
	depends on MFD_SUN4I_GPADC || MACH_SUN8I
	depends on THERMAL || !THERMAL_OF
	select REGMAP_IRQ
	help
	  Say yes here to build support for Allwinner (A10, A13 and A31) SoCs
	  GPADC. This ADC provides 4 channels which can be used as an ADC or as
	  a touchscreen input and one channel for thermal sensor.

	  The thermal sensor slows down ADC readings and can be disabled by
	  disabling CONFIG_THERMAL_OF. However, the thermal sensor should be
	  enabled by default since the SoC temperature is usually more critical
	  than ADC readings.

	  To compile this driver as a module, choose M here: the module will be
	  called sun4i-gpadc-iio.

config TI_ADC081C
	tristate "Texas Instruments ADC081C/ADC101C/ADC121C family"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for Texas Instruments ADC081C,
	  ADC101C and ADC121C ADC chips.

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

config TI_ADC0832
	tristate "Texas Instruments ADC0831/ADC0832/ADC0834/ADC0838"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for Texas Instruments ADC0831,
	  ADC0832, ADC0834, ADC0838 ADC chips.

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

config TI_ADC084S021
	tristate "Texas Instruments ADC084S021"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for Texas Instruments ADC084S021
	  chips.

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

config TI_ADC12138
	tristate "Texas Instruments ADC12130/ADC12132/ADC12138"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for Texas Instruments ADC12130,
	  ADC12132 and ADC12138 chips.

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

config TI_ADC108S102
	tristate "Texas Instruments ADC108S102 and ADC128S102 driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Texas Instruments ADC108S102 and
	  ADC128S102 ADC.

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

config TI_ADC128S052
	tristate "Texas Instruments ADC128S052/ADC122S021/ADC124S021"
	depends on SPI
	help
	  If you say yes here you get support for Texas Instruments ADC128S052,
	  ADC122S021 and ADC124S021 chips.

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

config TI_ADC161S626
	tristate "Texas Instruments ADC161S626 1-channel differential ADC"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for Texas Instruments ADC141S626,
	  and ADC161S626 chips.

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

config TI_ADS1015
	tristate "Texas Instruments ADS1015 ADC"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for Texas Instruments ADS1015
	  ADC chip.

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

config TI_ADS7950
	tristate "Texas Instruments ADS7950 ADC driver"
	depends on SPI && GPIOLIB
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Texas Instruments ADS7950, ADS7951,
	  ADS7952, ADS7953, ADS7954, ADS7955, ADS7956, ADS7957, ADS7958, ADS7959.
	  ADS7960, ADS7961.

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

config TI_ADS8344
	tristate "Texas Instruments ADS8344"
	depends on SPI && OF
	help
	  If you say yes here you get support for Texas Instruments ADS8344
	  ADC chips

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

config TI_ADS8688
	tristate "Texas Instruments ADS8688"
	depends on SPI && OF
	help
	  If you say yes here you get support for Texas Instruments ADS8684 and
	  and ADS8688 ADC chips

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

config TI_ADS124S08
	tristate "Texas Instruments ADS124S08"
	depends on SPI && OF
	help
	  If you say yes here you get support for Texas Instruments ADS124S08
	  and ADS124S06 ADC chips

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

config TI_ADS131E08
	tristate "Texas Instruments ADS131E08"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to get support for Texas Instruments ADS131E04, ADS131E06
	  and ADS131E08 chips.

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

config TI_AM335X_ADC
	tristate "TI's AM335X ADC driver"
	depends on MFD_TI_AM335X_TSCADC && HAS_DMA
	select IIO_BUFFER
	select IIO_KFIFO_BUF
	help
	  Say yes here to build support for Texas Instruments ADC
	  driver which is also a MFD client.

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

config TI_TLC4541
	tristate "Texas Instruments TLC4541 ADC driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Texas Instruments TLC4541 / TLC3541
	  ADC chips.

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

config TI_TSC2046
	tristate "Texas Instruments TSC2046 ADC driver"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for ADC functionality of Texas
	  Instruments TSC2046 touch screen controller.

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

config TWL4030_MADC
	tristate "TWL4030 MADC (Monitoring A/D Converter)"
	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 also be built as a module. If so, the module will be
	  called twl4030-madc.

config TWL6030_GPADC
	tristate "TWL6030 GPADC (General Purpose A/D Converter) Support"
	depends on TWL4030_CORE
	default n
	help
	  Say yes here if you want support for the TWL6030/TWL6032 General
	  Purpose A/D Converter. This will add support for battery type
	  detection, battery voltage and temperature measurement, die
	  temperature measurement, system supply voltage, audio accessory,
	  USB ID detection.

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

config VF610_ADC
	tristate "Freescale vf610 ADC driver"
	depends on OF
	depends on HAS_IOMEM
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to support for Vybrid board analog-to-digital converter.
	  Since the IP is used for i.MX6SLX, the driver also support i.MX6SLX.

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

config VIPERBOARD_ADC
	tristate "Viperboard ADC support"
	depends on MFD_VIPERBOARD && USB
	help
	  Say yes here to access the ADC part of the Nano River
	  Technologies Viperboard.

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

config XILINX_XADC
	tristate "Xilinx XADC driver"
	depends on HAS_IOMEM
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to have support for the Xilinx 7 Series XADC or
	  UltraScale/UltraScale+ System Management Wizard.

	  For the 7 Series the driver does support both the ZYNQ interface
	  to the XADC as well as the AXI-XADC interface.

	  The driver also support the Xilinx System Management Wizard IP core
	  that can be used to access the System Monitor ADC on the Xilinx
	  UltraScale and UltraScale+ FPGAs.

	  The driver can also be build as a module. If so, the module will be called
	  xilinx-xadc.

endmenu
