Message ID | 20240815-ad7606_add_iio_backend_support-v1-0-cea3e11b1aa4@baylibre.com |
---|---|
Headers | show |
Series | Add iio backend compatibility for ad7606 | expand |
On Thu, Aug 15, 2024 at 12:11:56PM +0000, Guillaume Stols wrote: > Add the required properties for iio-backend support, as well as an > example and the conditions to mutually exclude interruption and > conversion trigger with iio-backend. > The iio-backend's function is to controls the communication, and thus the > interruption pin won't be available anymore. > As a consequence, the conversion pin must be controlled externally since > we will miss information about when every single conversion cycle (i.e > conversion + data transfert) ends, hence a PWM is introduced to trigger > the conversions. > > Signed-off-by: Guillaume Stols <gstols@baylibre.com> > --- > .../devicetree/bindings/iio/adc/adi,ad7606.yaml | 75 +++++++++++++++++++++- > 1 file changed, 72 insertions(+), 3 deletions(-) > > diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml > index c0008d36320f..4b324f7e3207 100644 > --- a/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml > +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml > @@ -114,13 +114,28 @@ properties: > assumed that the pins are hardwired to VDD. > type: boolean > > + pwms: > + description: > + In case the conversion is triggered by a PWM instead of a GPIO plugged to > + the CONVST pin, the PWM must be referenced. > + minItems: 1 > + maxItems: 2 > + > + pwm-names: > + minItems: 1 > + maxItems: 2 You need to describe what the pwms are. > + io-backends: > + description: > + A reference to the iio-backend, which is responsible handling the BUSY > + pin's falling edge and communication. > + An example of backend can be found at > + http://analogdevicesinc.github.io/hdl/library/axi_ad7606x/index.html > + > required: > - compatible > - - reg > - avcc-supply > - vdrive-supply > - - interrupts > - - adi,conversion-start-gpios > > # This checks if reg is a chipselect so the device is on an SPI > # bus, the if-clause will fail if reg is a tuple such as for a > @@ -137,6 +152,35 @@ then: > - spi-cpol > > allOf: > + # Communication is handled either by the backend or an interrupt. This comment seems misplaced, but also superfluous? > + - if: > + properties: > + pwms: false > + then: > + required: > + - adi,conversion-start-gpios > + > + - if: > + properties: > + adi,conversion-start-gpios: false > + then: > + required: > + - pwms > + > + - if: > + properties: > + interrupts: false > + then: > + required: > + - io-backends > + > + - if: > + properties: > + io-backends: false > + then: > + required: > + - interrupts > + > - if: > properties: > compatible: > @@ -178,12 +222,37 @@ allOf: > adi,sw-mode: false > else: > properties: > + pwms: > + maxItems: 1 > + pwm-names: > + maxItems: 1 > adi,conversion-start-gpios: > maxItems: 1 > > unevaluatedProperties: false > > examples: > + - | > + #include <dt-bindings/gpio/gpio.h> > + / { > + adi_adc { > + compatible = "adi,ad7606b"; Just two space indent for examples please. Cheers, Conor. > + > + pwms = <&axi_pwm_gen 0 0>; > + > + avcc-supply = <&adc_vref>; > + vdrive-supply = <&vdd_supply>; > + > + reset-gpios = <&gpio0 91 GPIO_ACTIVE_HIGH>; > + standby-gpios = <&gpio0 90 GPIO_ACTIVE_LOW>; > + adi,range-gpios = <&gpio0 89 GPIO_ACTIVE_HIGH>; > + adi,oversampling-ratio-gpios = <&gpio0 88 GPIO_ACTIVE_HIGH > + &gpio0 87 GPIO_ACTIVE_HIGH > + &gpio0 86 GPIO_ACTIVE_HIGH>; > + io-backends = <&iio_backend>; > + }; > + }; > + > - | > #include <dt-bindings/gpio/gpio.h> > #include <dt-bindings/interrupt-controller/irq.h> > > -- > 2.34.1 >
On Thu, Aug 15, 2024 at 12:11:54PM +0000, Guillaume Stols wrote:
> This series aims to add iio backend support for AD7606X ADCs.
Just to point out, your cc list is partially bogus as it contains:
20240705211452.1157967-2-u.kleine-koenig@baylibre.com,
20240712171821.1470833-2-u.kleine-koenig@baylibre.com,
cover.1721040875.git.u.kleine-koenig@baylibre.com,
Cheers,
Conor.
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> --- Guillaume Stols (8): dt-bindings: iio: adc: ad7606: Make corrections on spi conditions dt-bindings: iio: adc: ad7606: Add iio backend bindings Documentation: iio: Document ad7606 driver pwm: Export pwm_get_state_hw platform: add platform_get_device_match_data() helper iio: adc: ad7606: Add PWM support for conversion trigger iio: adc: ad7606: Switch to xxx_get_device_match_data iio:adc:ad7606: Add iio-backend support .../devicetree/bindings/iio/adc/adi,ad7606.yaml | 90 ++++- Documentation/iio/ad7606.rst | 142 ++++++++ drivers/base/platform.c | 12 + drivers/iio/adc/Kconfig | 3 +- drivers/iio/adc/ad7606.c | 363 +++++++++++++-------- drivers/iio/adc/ad7606.h | 151 ++++++++- drivers/iio/adc/ad7606_par.c | 120 ++++++- drivers/iio/adc/ad7606_spi.c | 31 +- drivers/pwm/core.c | 3 +- include/linux/platform_device.h | 1 + include/linux/pwm.h | 1 + 11 files changed, 733 insertions(+), 184 deletions(-) --- base-commit: 7cad163c39cb642ed587d3eeb37a5637ee02740f change-id: 20240725-ad7606_add_iio_backend_support-c401305a6924 prerequisite-message-id: 20240705211452.1157967-2-u.kleine-koenig@baylibre.com prerequisite-patch-id: 0e21153cd012f41ba9db52357fd08219af53e26c prerequisite-message-id: 20240712171821.1470833-2-u.kleine-koenig@baylibre.com prerequisite-patch-id: b22c91bbc4e3412f8e7e1f796ed18570ae021c96 prerequisite-message-id: cover.1721040875.git.u.kleine-koenig@baylibre.com prerequisite-patch-id: bfc36d041b9e5d417c6b18268dd91171d627d04e prerequisite-patch-id: adec4b066442de64275ebc3bd310ebaea99a0e8d prerequisite-patch-id: b536b9607ae40bd58f3e56c4ccd304b7880b5b90 prerequisite-patch-id: fe43e064fe174b830d5a11f83e3cd7252089820e prerequisite-patch-id: a1cd565094d86ff473724db1fd6dbb61aca996dd prerequisite-patch-id: d7b5d697839f0a6cea0aa37810df4d02a7762ead prerequisite-patch-id: e86302e513cfdf80831da4d79a7a950eecf7c557 prerequisite-patch-id: 05b25465694c5640e42e67d2059e84f34e259670 Best regards,