mbox series

[v5,0/8] iio: add new backend framework

Message ID 20240112-iio-backend-v5-0-bdecad041ab4@analog.com
Headers show
Series iio: add new backend framework | expand

Message

Nuno Sa via B4 Relay Jan. 12, 2024, 4:40 p.m. UTC
v1:
 https://lore.kernel.org/linux-iio/20231204144925.4fe9922f@jic23-huawei/T/#m222f5175273b81dbfe40b7f0daffcdc67d6cb8ff

v2:
 https://lore.kernel.org/r/20231208-dev-iio-backend-v2-0-5450951895e1@analog.com

v3:
 https://lore.kernel.org/linux-iio/20231213-dev-iio-backend-v3-0-bb9f12a5c6dc@analog.com/

v4:
 https://lore.kernel.org/r/20231220-iio-backend-v4-0-998e9148b692@analog.com

Changes in v5:
 - Patch 2
  * Update commit subject and message;
  * Add '#io-backends-cells' property.
 - Patch 4
  * Also support '#io-backends-cells'.
 - Patch 6
  * Improve Kconfig help message;
  * Only use device_links to control backends access. With this, we can remove
    all the mutex + sync logic as we are now guaranteed that a frontend cannot
    be up and running if one of the backends is gone.
  * Error out if we can't create the device_link (so we can guarantee the above).
  * Improve docs for __devm_iio_backend_get_from_fwnode_lookup();
  * Add a __ prefix to devm_iio_backend_get_from_fwnode_lookup() so it's clear
    that API should not be used (or used with care);
  * Drop devm_iio_backend_get_optional();
  * remove unneeded headers.
 - Patch 7
  * Handle the optional backend in the driver.

The biggest difference is that the backend @ops pointer handling to
reason about the backend existence is gone. Now, we rely on device_links
as that makes sure all consumers (in the link) are unbound before the
provider. Hence, the frontend is guaranteed to be unbound if any of the
backends is gone. That simplifies things a lot...

Keeping the block diagram  so we don't have to follow links
to check one of the typical setups.

                                           -------------------------------------------------------
 ------------------                        | -----------         ------------      -------  FPGA |
 |     ADC        |------------------------| | AXI ADC |---------| DMA CORE |------| RAM |       |
 | (Frontend/IIO) | Serial Data (eg: LVDS) | |(backend)|---------|          |------|     |       |
 |                |------------------------| -----------         ------------      -------       |
 ------------------                        -------------------------------------------------------

---
Nuno Sa (7):
      dt-bindings: adc: ad9467: add new io-backend property
      dt-bindings: adc: axi-adc: update bindings for backend framework
      driver: core: allow modifying device_links flags
      iio: buffer-dmaengine: export buffer alloc and free functions
      iio: add the IIO backend framework
      iio: adc: ad9467: convert to backend framework
      iio: adc: adi-axi-adc: move to backend framework

Olivier Moysan (1):
      of: property: add device link support for io-backends

 .../devicetree/bindings/iio/adc/adi,ad9467.yaml    |   4 +
 .../devicetree/bindings/iio/adc/adi,axi-adc.yaml   |   7 +-
 MAINTAINERS                                        |   8 +
 drivers/base/core.c                                |  14 +-
 drivers/iio/Kconfig                                |   9 +
 drivers/iio/Makefile                               |   1 +
 drivers/iio/adc/Kconfig                            |   4 +-
 drivers/iio/adc/ad9467.c                           | 283 +++++++++-----
 drivers/iio/adc/adi-axi-adc.c                      | 381 +++++--------------
 drivers/iio/buffer/industrialio-buffer-dmaengine.c |   8 +-
 drivers/iio/industrialio-backend.c                 | 411 +++++++++++++++++++++
 drivers/of/property.c                              |   2 +
 include/linux/iio/adc/adi-axi-adc.h                |  68 ----
 include/linux/iio/backend.h                        |  73 ++++
 include/linux/iio/buffer-dmaengine.h               |   3 +
 15 files changed, 806 insertions(+), 470 deletions(-)
---
base-commit: 3f4525f924e21d4f532517b17a20ffa5df7c0db7
change-id: 20231219-iio-backend-a3dc1a6a7a58
--

Thanks!
- Nuno Sá

Comments

Jonathan Cameron Jan. 15, 2024, 4:07 p.m. UTC | #1
> > > +		return ret;
> > > +
> > > +	ret = iio_backend_enable(st->back);
> > > +	if (ret)
> > > +		return ret;  
> > 
> > I'm curious there is no iio_backend_disable() to be done in the exit path?
> >   
> 
> Ehehe something I have in my mind, yes. I'm just not disabling the core because
> it was the same with the previous approach. My goal was to have (more or less)
> the same state before vs after introducing the backend. I was thinking in adding
> a devm_iio_backend_enable() as a follow up patch and use it in here (or actually
> use it for the first axi-dac/dds user as that one will be come from a "clean"
> state).
> 
> If you prefer I can already turn iio_backend_enable() ->
> devm_iio_backend_enable() and use it in this patch.
Might be cleaner to do that.  Or add a big fat comment here to say it'll get
cleaned up in a follow up patch.

> 
> - Nuno Sá
> >