[PATCH v5 0/8] Add iio backend compatibility for ad7606

Guillaume Stols posted 8 patches 1 month, 1 week ago
.../devicetree/bindings/iio/adc/adi,ad7606.yaml    |  72 ++-
Documentation/iio/ad7606.rst                       | 145 ++++++
Documentation/iio/index.rst                        |   1 +
MAINTAINERS                                        |   1 +
drivers/iio/adc/Kconfig                            |   2 +
drivers/iio/adc/ad7606.c                           | 576 +++++++++++++++------
drivers/iio/adc/ad7606.h                           |  51 +-
drivers/iio/adc/ad7606_par.c                       | 122 ++++-
drivers/iio/adc/ad7606_spi.c                       |  96 ++--
9 files changed, 838 insertions(+), 228 deletions(-)
[PATCH v5 0/8] Add iio backend compatibility for ad7606
Posted by Guillaume Stols 1 month, 1 week ago
This series aims to add iio backend support for AD7606X ADCs.

In a nutshell, iio backend is a paradigm to shift the logic establishing
the connexion between iio buffers and backend buffers into the backend's
driver.  This provides a more stable programming interface to the driver
developers, and give more flexibility in the way the hardware communicates.

The support will be first added on AD7606B, and on next patches AD7606C16
and AD7606C18 will be added.  The series have been tested on a Zedboard,
using the latest HDL available, i.e
https://github.com/analogdevicesinc/hdl/commit/7d0a4cee1b5fa403f175af513d7eb804c3bd75d0
and an AD7606B FMCZ EKV.  This HDL handles both the conversion trigger
(through a PWM), and the end of conversion interruption, and is compatible
with axi-adc, which is "iio-backendable".

More information about this HDL design can be found at:
https://wiki.analog.com/resources/eval/user-guides/ad7606x-fmc/hdl

The support is thus separated in two parts:

- PWM support was first added.  My first intention was to make it available
  for any version of the driver, but the time required to handle the
  interruption is not neglectable, and I saw drifts that would eventually
  cause an overlapping SPI read with a new conversion trigger, whith
  catastrphic consequences. To mitigate this, CRC check must be
  implemented, but indeed increasing the samplerate causes more sample to
  be lost.  Therefore, I decided to only allow PWM for iio-backend
  powered device as a first intention, leaving open the possibility to
  add the general compatibility afterwards.

- IIO backend support was added: Once the PWM support was ready, the driver
  can be extended to iio-backend. The iio-backend powered version of the
  driver is a platform driver, and an exemple devicetree node is available
  in the bindings.

The following features will be added in subsequent patch series:
 - software mode for iio backend
 - 18 bits mode (AD7606C18)
 - single read (IIO_CHAN_READ_RAW)

Signed-off-by: Guillaume Stols <gstols@baylibre.com>
---
Changes in v5:
- Removal of an useless instruction move.
- Removal of extra checks on the PWM setters functions.
- Renaming of buffer postenable/predisable functions.
- Usage of device_property_present to check if there is a backend
  property instead of trying to load the backend.
- Improvement of error handling on PWM GPIO emulation, displaying an
  error in the kernel log in case the duty cycle set fails.
- Link to v4: https://lore.kernel.org/r/20241009-ad7606_add_iio_backend_support-v4-0-6971a8c0f1d5@baylibre.com

Changes in v4:
- Removal of accepted patches.
- Correction on fsleep (missing semicolon and incorrect spelling !).
- Correction on buffer initialization that should not be conditionned by
  the presence or not of a PWM, but by the presence of a backend.
- Addition of blank lines between blocks.
- Modification of some declaration to switch variables to static.
- Link to v3: https://lore.kernel.org/r/20241004-ad7606_add_iio_backend_support-v3-0-38757012ce82@baylibre.com

Changes in v3:
- Rebase on top of the series adding ad7606C16 and AD7606C18 support.
- Addition of pwm-names actual values and improvement in the
  description.
- Introduction of .num_adc_channels field in ad7606_chip_info that
  defines the number of hardware inputs.
- Introduction of ad7606_bus_info which couples hardware and wiring
  informations.
- Addition of a delay in the scan_direct function for the backend.
- Link to v2: https://lore.kernel.org/r/20240920-ad7606_add_iio_backend_support-v2-0-0e78782ae7d0@baylibre.com

Changes in v2:
- Logical change in dt-bindings, using a flag for the interface instead of
  infering it from the value of the "reg" property.
- Removal of get_platform_match_data addition, instead the logic is
  directly used in the file.
- Removal of use and export of pwm_get_state_hw, returning the configured
  frequency instead of the running one.
- Correction on various typos, whitespaces, bad order of includes.
- Separation of SPI conditions and PWM disabling for no backend in other
  commits.
- Link to v1: https://lore.kernel.org/r/20240815-ad7606_add_iio_backend_support-v1-0-cea3e11b1aa4@baylibre.com

---
Guillaume Stols (8):
      dt-bindings: iio: adc: ad7606: Remove spi-cpha from required
      dt-bindings: iio: adc: ad7606: Add iio backend bindings
      Documentation: iio: Document ad7606 driver
      iio: adc: ad7606: Add PWM support for conversion trigger
      iio: adc: ad7606: Add compatibility to fw_nodes
      iio: adc: ad7606: Introduce num_adc_channels
      iio: adc: ad7606: Add iio-backend support
      iio: adc: ad7606: Disable PWM usage for non backend version

 .../devicetree/bindings/iio/adc/adi,ad7606.yaml    |  72 ++-
 Documentation/iio/ad7606.rst                       | 145 ++++++
 Documentation/iio/index.rst                        |   1 +
 MAINTAINERS                                        |   1 +
 drivers/iio/adc/Kconfig                            |   2 +
 drivers/iio/adc/ad7606.c                           | 576 +++++++++++++++------
 drivers/iio/adc/ad7606.h                           |  51 +-
 drivers/iio/adc/ad7606_par.c                       | 122 ++++-
 drivers/iio/adc/ad7606_spi.c                       |  96 ++--
 9 files changed, 838 insertions(+), 228 deletions(-)
---
base-commit: 465644ac29536d10178b5ca4684d0b84765b9fa4
change-id: 20240725-ad7606_add_iio_backend_support-c401305a6924

Best regards,
--
Guillaume Stols <gstols@baylibre.com>
Re: [PATCH v5 0/8] Add iio backend compatibility for ad7606
Posted by Jonathan Cameron 1 month, 1 week ago
On Tue, 15 Oct 2024 13:56:13 +0000
Guillaume Stols <gstols@baylibre.com> wrote:

> This series aims to add iio backend support for AD7606X ADCs.
> 
> In a nutshell, iio backend is a paradigm to shift the logic establishing
> the connexion between iio buffers and backend buffers into the backend's
> driver.  This provides a more stable programming interface to the driver
> developers, and give more flexibility in the way the hardware communicates.
> 
> The support will be first added on AD7606B, and on next patches AD7606C16
> and AD7606C18 will be added.  The series have been tested on a Zedboard,
> using the latest HDL available, i.e
> https://github.com/analogdevicesinc/hdl/commit/7d0a4cee1b5fa403f175af513d7eb804c3bd75d0
> and an AD7606B FMCZ EKV.  This HDL handles both the conversion trigger
> (through a PWM), and the end of conversion interruption, and is compatible
> with axi-adc, which is "iio-backendable".
> 
> More information about this HDL design can be found at:
> https://wiki.analog.com/resources/eval/user-guides/ad7606x-fmc/hdl
> 
Applied and pushed out as testing. Please check I didn't mess up the few
minor tweaks needed.
Re: [PATCH v5 0/8] Add iio backend compatibility for ad7606
Posted by Guillaume Stols 1 month ago
On 10/19/24 16:53, Jonathan Cameron wrote:
> On Tue, 15 Oct 2024 13:56:13 +0000
> Guillaume Stols <gstols@baylibre.com> wrote:
>
>> This series aims to add iio backend support for AD7606X ADCs.
>>
>> In a nutshell, iio backend is a paradigm to shift the logic establishing
>> the connexion between iio buffers and backend buffers into the backend's
>> driver.  This provides a more stable programming interface to the driver
>> developers, and give more flexibility in the way the hardware communicates.
>>
>> The support will be first added on AD7606B, and on next patches AD7606C16
>> and AD7606C18 will be added.  The series have been tested on a Zedboard,
>> using the latest HDL available, i.e
>> https://github.com/analogdevicesinc/hdl/commit/7d0a4cee1b5fa403f175af513d7eb804c3bd75d0
>> and an AD7606B FMCZ EKV.  This HDL handles both the conversion trigger
>> (through a PWM), and the end of conversion interruption, and is compatible
>> with axi-adc, which is "iio-backendable".
>>
>> More information about this HDL design can be found at:
>> https://wiki.analog.com/resources/eval/user-guides/ad7606x-fmc/hdl
>>
> Applied and pushed out as testing. Please check I didn't mess up the few
> minor tweaks needed.

Hi Jonathan, thank you for the fixes and the merge. Just tested it, 
didnt notice any bug.

FYI Next step is software mode enablement for IIO backend enabled devices.

Best regards,

Guillaume