2024-07-09 08:16:46 -07:00
|
|
|
.. SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
|
|
|
|
=============
|
|
|
|
AD7380 driver
|
|
|
|
=============
|
|
|
|
|
|
|
|
ADC driver for Analog Devices Inc. AD7380 and similar devices. The module name
|
|
|
|
is ``ad7380``.
|
|
|
|
|
|
|
|
|
|
|
|
Supported devices
|
|
|
|
=================
|
|
|
|
|
|
|
|
The following chips are supported by this driver:
|
|
|
|
|
|
|
|
* `AD7380 <https://www.analog.com/en/products/ad7380.html>`_
|
|
|
|
* `AD7381 <https://www.analog.com/en/products/ad7381.html>`_
|
|
|
|
* `AD7383 <https://www.analog.com/en/products/ad7383.html>`_
|
|
|
|
* `AD7384 <https://www.analog.com/en/products/ad7384.html>`_
|
2024-07-31 00:05:48 -07:00
|
|
|
* `AD7386 <https://www.analog.com/en/products/ad7386.html>`_
|
|
|
|
* `AD7387 <https://www.analog.com/en/products/ad7387.html>`_
|
|
|
|
* `AD7388 <https://www.analog.com/en/products/ad7388.html>`_
|
2024-07-09 08:16:46 -07:00
|
|
|
* `AD7380-4 <https://www.analog.com/en/products/ad7380-4.html>`_
|
|
|
|
* `AD7381-4 <https://www.analog.com/en/products/ad7381-4.html>`_
|
|
|
|
* `AD7383-4 <https://www.analog.com/en/products/ad7383-4.html>`_
|
|
|
|
* `AD7384-4 <https://www.analog.com/en/products/ad7384-4.html>`_
|
2024-07-31 00:05:48 -07:00
|
|
|
* `AD7386-4 <https://www.analog.com/en/products/ad7386-4.html>`_
|
|
|
|
* `AD7387-4 <https://www.analog.com/en/products/ad7387-4.html>`_
|
|
|
|
* `AD7388-4 <https://www.analog.com/en/products/ad7388-4.html>`_
|
2024-07-09 08:16:46 -07:00
|
|
|
|
|
|
|
|
|
|
|
Supported features
|
|
|
|
==================
|
|
|
|
|
|
|
|
SPI wiring modes
|
|
|
|
----------------
|
|
|
|
|
|
|
|
ad738x ADCs can output data on several SDO lines (1/2/4). The driver currently
|
|
|
|
supports only 1 SDO line.
|
|
|
|
|
|
|
|
Reference voltage
|
|
|
|
-----------------
|
|
|
|
|
2024-10-22 06:22:40 -07:00
|
|
|
ad7380-4
|
|
|
|
~~~~~~~~
|
|
|
|
|
|
|
|
ad7380-4 supports only an external reference voltage (2.5V to 3.3V). It must be
|
|
|
|
declared in the device tree as ``refin-supply``.
|
|
|
|
|
|
|
|
All other devices from ad738x family
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
All other devices from ad738x support 2 possible reference voltage sources:
|
2024-07-09 08:16:46 -07:00
|
|
|
|
|
|
|
- Internal reference (2.5V)
|
|
|
|
- External reference (2.5V to 3.3V)
|
|
|
|
|
|
|
|
The source is determined by the device tree. If ``refio-supply`` is present,
|
2024-10-22 06:22:40 -07:00
|
|
|
then it is used as external reference, else the internal reference is used.
|
2024-07-09 08:16:46 -07:00
|
|
|
|
|
|
|
Oversampling and resolution boost
|
|
|
|
---------------------------------
|
|
|
|
|
|
|
|
This family supports 2 types of oversampling: normal average and rolling
|
|
|
|
average. Only normal average is supported by the driver, as rolling average can
|
|
|
|
be achieved by processing a captured data buffer. The following ratios are
|
|
|
|
available: 1 (oversampling disabled)/2/4/8/16/32.
|
|
|
|
|
|
|
|
When the on-chip oversampling function is enabled the performance of the ADC can
|
|
|
|
exceed the default resolution. To accommodate the performance boost achievable,
|
|
|
|
it is possible to enable an additional two bits of resolution. Because the
|
|
|
|
resolution boost feature can only be enabled when oversampling is enabled and
|
|
|
|
oversampling is not as useful without the resolution boost, the driver
|
|
|
|
automatically enables the resolution boost if and only if oversampling is
|
|
|
|
enabled.
|
|
|
|
|
|
|
|
Since the resolution boost feature causes 16-bit chips to now have 18-bit data
|
|
|
|
which means the storagebits has to change from 16 to 32 bits, we use the new
|
|
|
|
ext_scan_type feature to allow changing the scan_type at runtime. Unfortunately
|
|
|
|
libiio does not support it. So when enabling or disabling oversampling, user
|
|
|
|
must restart iiod using the following command:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
root:~# systemctl restart iiod
|
|
|
|
|
2024-07-31 00:05:48 -07:00
|
|
|
Channel selection and sequencer (single-end chips only)
|
|
|
|
-------------------------------------------------------
|
|
|
|
|
|
|
|
Single-ended chips of this family (ad7386/7/8(-4)) have a 2:1 multiplexer in
|
|
|
|
front of each ADC. They also include additional configuration registers that
|
|
|
|
allow for either manual selection or automatic switching (sequencer mode), of
|
|
|
|
the multiplexer inputs.
|
|
|
|
|
|
|
|
From an IIO point of view, all inputs are exported, i.e ad7386/7/8
|
|
|
|
export 4 channels and ad7386-4/7-4/8-4 export 8 channels.
|
|
|
|
|
|
|
|
Inputs ``AinX0`` of multiplexers correspond to the first half of IIO channels (i.e
|
|
|
|
0-1 or 0-3) and inputs ``AinX1`` correspond to second half (i.e 2-3 or 4-7).
|
|
|
|
Example for AD7386/7/8 (2 channels parts):
|
|
|
|
|
|
|
|
.. code-block::
|
|
|
|
|
|
|
|
IIO | AD7386/7/8
|
|
|
|
| +----------------------------
|
|
|
|
| | _____ ______
|
|
|
|
| | | | | |
|
|
|
|
voltage0 | AinA0 --|--->| | | |
|
|
|
|
| | | mux |----->| ADCA |---
|
|
|
|
voltage2 | AinA1 --|--->| | | |
|
|
|
|
| | |_____| |_____ |
|
|
|
|
| | _____ ______
|
|
|
|
| | | | | |
|
|
|
|
voltage1 | AinB0 --|--->| | | |
|
|
|
|
| | | mux |----->| ADCB |---
|
|
|
|
voltage3 | AinB1 --|--->| | | |
|
|
|
|
| | |_____| |______|
|
|
|
|
| |
|
|
|
|
| +----------------------------
|
|
|
|
|
|
|
|
|
|
|
|
When enabling sequencer mode, the effective sampling rate is divided by two.
|
2024-07-09 08:16:46 -07:00
|
|
|
|
|
|
|
Unimplemented features
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
- 2/4 SDO lines
|
|
|
|
- Rolling average oversampling
|
|
|
|
- Power down mode
|
|
|
|
- CRC indication
|
|
|
|
- Alert
|
|
|
|
|
|
|
|
|
|
|
|
Device buffers
|
|
|
|
==============
|
|
|
|
|
|
|
|
This driver supports IIO triggered buffers.
|
|
|
|
|
|
|
|
See :doc:`iio_devbuf` for more information.
|