linux/drivers/iio/adc
Martin Blumenstingl 3adbf34273 iio: adc: add a driver for the SAR ADC found in Amlogic Meson SoCs
This adds support for the SAR (Successive Approximation Register) ADC
on the Amlogic Meson SoCs.

The code is based on the public S805 (Meson8b) and S905 (GXBB)
datasheets (see [0] and [1]), as well as by reading (various versions
of) the vendor driver and by inspecting the registers on the vendor
kernels of my testing-hardware.

Currently the GXBB, GXL and GXM SoCs are supported. GXBB hardware has
10-bit ADC resolution, while GXL and GXM have 12-bit ADC resolution.
The code was written to support older SoCs (Meson8 and Meson8b) as well,
but due to lack of actual testing-hardware no of_device_id was added for
these.

Two "features" from the vendor driver are currently missing:
- the vendor driver uses channel #7 for calibration (this improves the
  accuracy of the results - in my tests the results were less than 3%
  off without calibration compared to the vendor driver). Adding support
  for this should be easy, but is not required for most applications.
- channel #6 is connected to the SoCs internal temperature sensor.
  Adding support for this is probably not so easy since (based on the
  u-boot sources) most SoC versions are using different registers and
  algorithms for the conversion from "ADC value" to temperature.

Supported by the hardware but currently not supported by the driver:
- reading multiple channels at the same time (the hardware has a FIFO
  buffer which stores multiple results)
- continuous sampling (this would require a way to enable this
  individually because otherwise the ADC would be drawing power
  constantly)
- interrupt support (similar to the vendor driver this new driver is
  polling the results. It is unclear if the IRQ-mode is supported on
  older (Meson6 or Meson8) hardware as well or if there are any errata)

[0]
http://dn.odroid.com/S805/Datasheet/S805_Datasheet%20V0.8%2020150126.pdf
[1] http://dn.odroid.com/S905/DataSheet/S905_Public_Datasheet_V1.1.4.pdf

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Tested-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
2017-01-28 12:29:50 +00:00
..
ad799x.c iio: ad799x: Fix buffered capture for ad7991/ad7995/ad7999 2016-08-15 15:39:14 +01:00
ad7266.c iio: devm_regulator_get_optional never returns NULL 2016-09-05 21:09:38 +01:00
ad7291.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
ad7298.c iio: adc: ad7298: use iio helper function to guarantee direct mode 2016-07-24 19:58:42 +01:00
ad7476.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
ad7766.c iio:adc: ad7766: testing the wrong variable in probe 2016-11-12 14:35:21 +00:00
ad7791.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
ad7793.c iio: adc: ad7793: use iio helper function to guarantee direct mode 2016-07-24 19:58:41 +01:00
ad7887.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
ad7923.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
ad_sigma_delta.c
at91_adc.c iio: adc: at91: add suspend and resume callback 2016-11-05 16:33:00 +00:00
at91-sama5d2_adc.c Merge 4.6-rc7 into staging-next 2016-05-09 13:20:04 +02:00
axp288_adc.c iio: adc: axp288: Drop bogus AXP288_ADC_TS_PIN_CTRL register modifications 2017-01-10 19:54:57 +00:00
bcm_iproc_adc.c iio: Add driver for Broadcom iproc-static-adc 2016-07-03 11:32:30 +01:00
berlin2-adc.c iio:adc:berlin2-adc: coding style cleanup 2015-08-12 22:13:57 +01:00
cc10001_adc.c iio:core: timestamping clock selection support 2016-06-30 19:41:38 +01:00
da9150-gpadc.c
envelope-detector.c iio: envelope-detector: ADC driver based on a DAC and a comparator 2016-11-13 13:07:17 +00:00
exynos_adc.c IIO: Change msleep to usleep_range for small msecs 2016-12-03 08:58:40 +00:00
fsl-imx25-gcq.c iio: adc: imx25-gcq: Fix module autoload 2017-01-10 19:54:56 +00:00
hi8435.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
hx711.c iio: adc: hx711: Add IIO driver for AVIA HX711 2017-01-10 19:54:59 +00:00
imx7d_adc.c iio: adc: add IMX7D ADC driver support 2015-12-12 16:25:41 +00:00
ina2xx-adc.c iio:kfifo_buf header include push down. 2017-01-10 19:54:53 +00:00
Kconfig iio: adc: add a driver for the SAR ADC found in Amlogic Meson SoCs 2017-01-28 12:29:50 +00:00
lp8788_adc.c
lpc18xx_adc.c iio: adc: add NXP LPC18xx ADC driver 2016-03-12 18:11:48 +00:00
ltc2485.c iio: adc: ltc2485: add support for Linear Technology LTC2485 ADC 2016-08-29 16:57:40 +01:00
Makefile iio: adc: add a driver for the SAR ADC found in Amlogic Meson SoCs 2017-01-28 12:29:50 +00:00
max1027.c iio:max1027: Use iio_trigger_validate_own_device() helper 2016-09-27 20:33:00 +01:00
max1363.c iio: adc: max1363: Export OF device ID table as module aliases 2017-01-22 13:21:30 +00:00
max11100.c iio: adc: tlc4541: add support for TI tlc4541 adc 2017-01-22 13:21:28 +00:00
mcp320x.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
mcp3422.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
men_z188_adc.c iio: adc: men_z188_adc: constify iio_info structures 2016-09-18 11:58:31 +01:00
meson_saradc.c iio: adc: add a driver for the SAR ADC found in Amlogic Meson SoCs 2017-01-28 12:29:50 +00:00
mt6577_auxadc.c iio: adc: mt2701: Add Mediatek auxadc driver for mt2701. 2016-08-21 19:54:30 +01:00
mxs-lradc.c iio: mxs-lradc: disable only masked channels in mxs_lradc_hw_stop 2016-05-04 10:44:28 +01:00
nau7802.c iio: adc: Use complete() instead of complete_all() 2016-08-15 18:01:27 +01:00
palmas_gpadc.c iio: adc: palmas: Drop IRQF_EARLY_RESUME flag 2016-02-27 17:20:52 +00:00
qcom-spmi-iadc.c
qcom-spmi-vadc.c iio:adc:qcom-spmi-vadc: use div64_s64 instead of direct 64 bit division. 2017-01-10 21:13:39 +00:00
rcar-gyroadc.c iio: adc: Add Renesas GyroADC driver 2017-01-28 11:33:53 +00:00
rockchip_saradc.c iio: adc: rockchip_saradc: reset saradc controller before programming it 2016-08-23 19:05:03 +01:00
stm32-adc-core.c iio: adc: Add support for STM32 ADC core 2016-11-19 12:17:45 +00:00
stm32-adc-core.h iio: adc: Add support for STM32 ADC core 2016-11-19 12:17:45 +00:00
stm32-adc.c iio: adc: Add support for STM32 ADC 2016-11-19 12:18:33 +00:00
stx104.c Second set of iio new device support, features and cleanups for the 4.9 cycle. 2016-09-14 20:42:03 +02:00
ti_am335x_adc.c drivers: iio: ti_am335x_adc: add dma support 2016-11-05 17:32:05 +00:00
ti-adc081c.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
ti-adc128s052.c iio: adc: add missing of_node references to iio_dev 2016-07-03 13:40:08 +01:00
ti-adc161s626.c iio: adc: ti-adc161s626: add regulator support 2016-09-27 20:33:03 +01:00
ti-adc0832.c iio: ti-adc0832: add triggered buffer support 2016-10-23 19:34:25 +01:00
ti-adc12138.c iio: adc: add ADC12130/ADC12132/ADC12138 ADC driver 2016-08-31 18:10:36 +01:00
ti-ads1015.c iio: adc: constify iio_info structures 2017-01-22 13:21:43 +00:00
ti-ads7950.c iio: adc: ti-ads7950: Change regulator matching string to "vref" 2017-01-15 13:56:08 +00:00
ti-ads8688.c iio: devm_regulator_get_optional never returns NULL 2016-09-05 21:09:38 +01:00
ti-tlc4541.c iio: adc: tlc4541: add support for TI tlc4541 adc 2017-01-22 13:21:28 +00:00
twl4030-madc.c iio: adc: twl4030: Fix ADC[3:6] readings 2015-10-03 10:27:18 +01:00
twl6030-gpadc.c iio: adc: twl6030-gpadc: Fix module autoload for OF platform driver 2015-09-23 20:23:24 +01:00
vf610_adc.c iio:core: timestamping clock selection support 2016-06-30 19:41:38 +01:00
viperboard_adc.c
xilinx-xadc-core.c First set of new device support, features and cleanups for IIO in the 4.5 cycle 2015-12-01 09:13:29 -08:00
xilinx-xadc-events.c iio:core: timestamping clock selection support 2016-06-30 19:41:38 +01:00
xilinx-xadc.h iio: adc: xilinx-xadc: Push interrupts into hardirq context 2015-08-16 10:51:27 +01:00