# 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 AD4130
	tristate "Analog Device AD4130 ADC Driver"
	depends on SPI
	depends on GPIOLIB
	select IIO_BUFFER
	select IIO_KFIFO_BUF
	select REGMAP_SPI
	depends on COMMON_CLK
	help
	  Say yes here to build support for Analog Devices AD4130-8 SPI analog
	  to digital converters (ADC).

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

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 AD7280
	tristate "Analog Devices AD7280A Lithium Ion Battery Monitoring System"
	depends on SPI
	select CRC8
	help
	  Say yes here to build support for Analog Devices AD7280A
	  Lithium Ion Battery Monitoring System.

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

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 || COMPILE_TEST
	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"
	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
	  Driver for the ADC block found in the Samsung S3C (S3C2410, S3C2416,
	  S3C2440, S3C2443, S3C6410), S5Pv210 and Exynos SoCs.
	  Choose Y here only if you build for such Samsung SoC.

	  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 IMX8QXP_ADC
	tristate "NXP IMX8QXP ADC driver"
	depends on ARCH_MXC || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Say yes here to build support for IMX8QXP ADC.

	  This driver can also be built as a module. If so, the module will be
	  called imx8qxp-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 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 MAX11205
	tristate "Maxim max11205 ADC driver"
	depends on SPI
	select AD_SIGMA_DELTA
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER

	help
	  Say yes here to build support for Maxim max11205 16-bit, single-channel
	  ultra-low power delta-sigma ADC.

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

config MAX11410
	tristate "Analog Devices MAX11410 ADC driver"
	depends on SPI
	select REGMAP_SPI
	select IIO_BUFFER
	select IIO_TRIGGER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Analog Devices MAX11410 ADCs.

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

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
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	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_MT6370_ADC
	tristate "MediaTek MT6370 ADC driver"
	depends on MFD_MT6370
	help
	  Say yes here to enable MediaTek MT6370 ADC support.

	  This ADC driver provides 9 channels for system monitoring (charger
	  current, voltage, and temperature).

	  This driver can also be built as a module. If so, the module
	  will be called "mt6370-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_RRADC
	tristate "Qualcomm SPMI RRADC"
	depends on MFD_SPMI_PMIC
	help
	  This is for the PMIC Round Robin ADC driver.

	  This driver exposes the battery ID resistor, battery thermal, PMIC die
	  temperature, charger USB in and DC in voltage and current.

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

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 RICHTEK_RTQ6056
	tristate "Richtek RTQ6056 Current and Power Monitor ADC"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to enable RQT6056 ADC support.
	  RTQ6056 is a high accuracy current-sense monitor with I2C and SMBus
	  compatible interface, and the device provides full information for
	  system by reading out the load current and power.

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

config RZG2L_ADC
	tristate "Renesas RZ/G2L ADC driver"
	depends on ARCH_RZG2L || COMPILE_TEST
	help
	  Say yes here to build support for the ADC found in Renesas
	  RZ/G2L family.

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

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

config XILINX_AMS
	tristate "Xilinx AMS driver"
	depends on ARCH_ZYNQMP || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  Say yes here to have support for the Xilinx AMS for Ultrascale/Ultrascale+
	  System Monitor. With this you can measure and monitor the Voltages and
	  Temperature values on the SOC.

	  The driver supports Voltage and Temperature monitoring on Xilinx Ultrascale
	  devices.

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

endmenu
