OpenCloudOS-Kernel/drivers/iio/adc
Lukas Wunner c1375d671a iio: adc: mcp320x: Add support for mcp3550/1/3
These ADCs are marketed as single-channel 22 bit delta-sigma ADCs, but
in reality their resolution is 21 bit with an overrange or underrange
of 12% beyond Vref.  In other words, "full scale" means +/- 2^20.

This driver does not explicitly signal back to the user when an
overrange or underrange occurs, but the user can detect it by comparing
the raw value to +/- 2^20 (or the scaled value to Vref).

The chips feature an extended temperature range and high accuracy,
low noise characteristics, but their conversion times are slow with
up to 80 ms +/- 2% (on the MCP3550-50).

Hence, unlike the other ADCs supported by the driver, conversion does
not take place in realtime upon lowering CS.  Instead, CS is asserted
for 8 usec to start the conversion.  After waiting for the duration of
the conversion, the result can be fetched.  While waiting, control of
the bus is ceased so it may be used by a different device.

After the result has been fetched and 10 us have passed, the chip goes
into shutdown and an additional power-up delay of 144 clock periods is
then required to wake the analog circuitry upon the next conversion
(footnote below table 4-1, page 16 in the spec).

Optionally, the chips can be used in so-called "continuous conversion
mode":  Conversions then take place continuously and the last result may
be fetched at any time without observing a delay.  The mode is enabled
by permanently driving CS low, e.g. by wiring it to ground.  The driver
only supports "single conversion mode" for now but should be adaptable
to "continuous conversion mode" with moderate effort.

The chips clock out a 3 byte word, unlike the other ADCs supported by
the driver which all have a lower resolution than 16 bit and thus make
do with 2 bytes.  Calculate the word length on probe by rounding up the
resolution to full bytes.  Crucially, if the clock idles low, the
transfer is preceded by a useless Data Ready bit which increases its
length from 24 bit to 25 bit = 4 bytes (section 5.5 in the spec).
Autosense this based on the SPI slave's configuration.

Cc: Mathias Duckeck <m.duckeck@kunbus.de>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
2017-10-09 21:01:36 +01:00
..
Kconfig iio: adc: mcp320x: Add support for mcp3550/1/3 2017-10-09 21:01:36 +01:00
Makefile iio: adc: New driver for Cirrus Logic EP93xx ADC 2017-07-25 19:56:23 +01:00
ad799x.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad7266.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad7291.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad7298.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad7476.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad7766.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad7791.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad7793.c Merge 4.14-rc4 into staging-next 2017-10-09 09:02:35 +02:00
ad7887.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad7923.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ad_sigma_delta.c Merge 4.14-rc4 into staging-next 2017-10-09 09:02:35 +02:00
aspeed_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
at91-sama5d2_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
at91_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
axp20x_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
axp288_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
bcm_iproc_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
berlin2-adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
cc10001_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
cpcap-adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
da9150-gpadc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
dln2-adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
envelope-detector.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ep93xx_adc.c iio:stm32-lp-timer and ep93xx: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-09-26 09:38:57 +02:00
exynos_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
fsl-imx25-gcq.c iio: adc: imx25-gcq: Fix module autoload 2017-01-10 19:54:56 +00:00
hi8435.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
hx711.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
imx7d_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ina2xx-adc.c iio: adc: ina2xx: Adhere to documented ABI, use Ohm instead of uOhm 2017-10-09 20:51:01 +01:00
lp8788_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
lpc18xx_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
lpc32xx_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ltc2471.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ltc2485.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ltc2497.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
max1027.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
max1118.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
max1363.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
max9611.c iio:adc:max9611: Drop explicit setting of the i2c module owner. 2017-09-03 18:10:25 +01:00
max11100.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
mcp320x.c iio: adc: mcp320x: Add support for mcp3550/1/3 2017-10-09 21:01:36 +01:00
mcp3422.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
men_z188_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
meson_saradc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
mt6577_auxadc.c iio: adc: mt2712: Add compatible node for mt2712. 2017-09-24 16:45:38 +01:00
mxs-lradc-adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
nau7802.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
palmas_gpadc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
qcom-pm8xxx-xoadc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
qcom-spmi-iadc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
qcom-spmi-vadc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
qcom-vadc-common.c iio: adc: break out common code from SPMI VADC 2017-04-08 17:40:49 +01:00
qcom-vadc-common.h iio: adc: break out common code from SPMI VADC 2017-04-08 17:40:49 +01:00
rcar-gyroadc.c iio: adc: rcar-gyroadc: Use of_device_get_match_data() helper 2017-10-09 20:50:49 +01:00
rockchip_saradc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
spear_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
stm32-adc-core.c Merge 4.13-rc7 into staging-next 2017-08-28 15:26:48 +02:00
stm32-adc-core.h iio: adc: stm32: add support for STM32H7 2017-06-11 15:07:29 +01:00
stm32-adc.c Merge 4.14-rc4 into staging-next 2017-10-09 09:02:35 +02:00
stx104.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
sun4i-gpadc-iio.c iio: adc: sun4i-gpadc-iio: do not fail probing when no thermal DT node 2017-10-09 20:49:47 +01:00
ti-adc081c.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti-adc084s021.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti-adc108s102.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti-adc128s052.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti-adc161s626.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti-adc0832.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti-adc12138.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti-ads1015.c Merge 4.14-rc4 into staging-next 2017-10-09 09:02:35 +02:00
ti-ads7950.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti-ads8688.c iio:adc:ti-ads8688: Drop manual setting of the driver owner field. 2017-09-03 18:10:25 +01:00
ti-tlc4541.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
ti_am335x_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
twl4030-madc.c Merge 4.14-rc4 into staging-next 2017-10-09 09:02:35 +02:00
twl6030-gpadc.c Round one of new device support, features and cleanup for IIO in the 4.15 cycle. 2017-09-25 12:56:37 +02:00
vf610_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
viperboard_adc.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
xilinx-xadc-core.c iio:adc: drop assign iio_info.driver_module and iio_trigger_ops.owner 2017-08-22 21:22:25 +01:00
xilinx-xadc-events.c iio: adc: xadc: Fix coding style violations 2017-08-12 13:10:30 +01:00
xilinx-xadc.h iio: adc: xadc: Fix coding style violations 2017-08-12 13:10:30 +01:00