Linux IIO development
 help / color / mirror / Atom feed
From: "Nuno Sá" <noname.nuno@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>
Cc: Nuno Sa via B4 Relay <devnull+nuno.sa.analog.com@kernel.org>,
	 nuno.sa@analog.com, linux-iio@vger.kernel.org,
	devicetree@vger.kernel.org,
	 Dragos Bogdan <dragos.bogdan@analog.com>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Michael Hennerich <Michael.Hennerich@analog.com>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Olivier Moysan <olivier.moysan@foss.st.com>
Subject: Re: [PATCH 08/10] iio: backend: add new functionality
Date: Thu, 28 Mar 2024 17:54:59 +0100	[thread overview]
Message-ID: <1e5e8b0764b3a42059be4c20724d475c83e5d241.camel@gmail.com> (raw)
In-Reply-To: <20240328155929.20848a6a@jic23-huawei>

On Thu, 2024-03-28 at 15:59 +0000, Jonathan Cameron wrote:
> On Thu, 28 Mar 2024 16:42:38 +0100
> Nuno Sá <noname.nuno@gmail.com> wrote:
> 
> > On Thu, 2024-03-28 at 15:16 +0000, Jonathan Cameron wrote:
> > > On Thu, 28 Mar 2024 14:22:32 +0100
> > > Nuno Sa via B4 Relay <devnull+nuno.sa.analog.com@kernel.org> wrote:
> > >   
> > > > From: Nuno Sa <nuno.sa@analog.com>
> > > > 
> > > > This adds the needed backend ops for supporting a backend inerfacing
> > > > with an high speed dac. The new ops are:
> > > > 
> > > > * data_source_set();
> > > > * set_sampling_freq();
> > > > * extend_chan_spec();
> > > > * ext_info_set();
> > > > * ext_info_get().
> > > > 
> > > > Also to note the new helpers that are meant to be used by the backends
> > > > +		return 0;
> > > > +	/*
> > > > +	 * !\NOTE: this will break as soon as we have multiple backends on
> > > > one
> > > > +	 * frontend and all of them extend channels. In that case, the core
> > > > +	 * backend code has no way to get the correct backend given the
> > > > +	 * iio device.
> > > > +	 *
> > > > +	 * One solution for this could be introducing a new backend
> > > > +	 * dedicated callback in struct iio_info so we can callback into the
> > > > +	 * frontend so it can give us the right backend given a chan_spec.
> > > > +	 */  
> > > 
> > > Hmm. This is indeed messy.  Could we associate it with the buffer as presuably
> > > a front end with multiple backends is using multiple IIO buffers?
> > >   
> > 
> > Hmm, the assumption of having multiple buffers seems plausible to me but
> > considering
> > the example we have in hands it would be cumbersome to get the backend.
> > Considering
> > iio_backend_ext_info_get(), how could we get the backend if it was associated to
> > one
> > of the IIO buffers? I think we would need more "intrusive" changes to make that
> > work
> > or do you have something in mind=
> 
> Nope. Just trying to get my head around the associations. I hadn't thought about
> how to make that visible in the code.  Probably a callabck anyway.
> 
> >  
> > > As you say a dance via the front end would work fine.  
> > 
> > I'm happy you're also open for a proper solution already. I mention this in the
> > cover. My idea was something like (consider the iio_backend_ext_info_get()):
> > 
> > if (!indio_dev->info->get_iio_backend())
> > 	return -EOPNOTSUPP;
> > 
> > back = indio_dev->info->get_iio_backend(indio_dev, chan_spec);
> > 
> > It would be nice to have some "default/generic" implementation for cases where we
> > only have one backend per frontend so that the frontend would not need to define
> > the
> > callback.
> Agreed - either a default that means if the callback isn't provided we get the
> single backend or if that proves fiddly at least a standard callback we can
> use in all such cases.
> 

I'll have to think a bit about it. We may need some association/link between iio_dev
and iio_backend in order to "if the callback isn't provided we get the single
backend". The easiest that comes to my mind without much thinking would be to use
iio_device_set_drvdata()/iio_device_get_drvdata() in case the frontend does not
provide a callback. This would already force callers to assign the indio_dev->info
pointer before this call. Not that nice but acceptable if properly documented I
guess.

Anyways, I'll see if I can think of something better...

> >   
> > > 
> > >   
> > > > +	iio_device_set_drvdata(indio_dev, back);
> > > > +
> > > > +	/* Don't allow backends to get creative and force their own handlers
> > > > */
> > > > +	for (ext_info = chan->ext_info; ext_info->name; ext_info++) {
> > > > +		if (ext_info->read != iio_backend_ext_info_get)
> > > > +			return -EINVAL;
> > > > +		if (ext_info->write != iio_backend_ext_info_set)
> > > > +			return -EINVAL;
> > > > +	}
> > > > +
> > > > +	return 0;
> > > > +}
> > > > +EXPORT_SYMBOL_NS_GPL(iio_backend_extend_chan_spec, IIO_BACKEND);  
> > >   
> > > > diff --git a/include/linux/iio/backend.h b/include/linux/iio/backend.h
> > > > index a6d79381866e..09ff2f8f9fd8 100644
> > > > --- a/include/linux/iio/backend.h
> > > > +++ b/include/linux/iio/backend.h
> > > > @@ -4,6 +4,7 @@
> > > >  
> > > >  #include <linux/types.h>
> > > >  
> > > > +struct iio_chan_spec;
> > > >  struct fwnode_handle;
> > > >  struct iio_backend;
> > > >  struct device;
> > > > @@ -15,6 +16,26 @@ enum iio_backend_data_type {
> > > >  	IIO_BACKEND_DATA_TYPE_MAX
> > > >  };
> > > >  
> > > > +enum iio_backend_data_source {
> > > > +	IIO_BACKEND_INTERNAL_CW,  
> > > 
> > > CW?  Either expand out what ever that is in definition of add a comment
> > > at least.  
> > 
> > Continuous wave :)
> 
> Spell that out.
> 
> > 
> > >   
> > > > +	IIO_BACKEND_EXTERNAL,  
> > > What does external mean in this case?  
> > 
> > In this particular case comes from a DMA source (IP). I thought external to be
> > more
> > generic but if you prefer, I can do something like IIO_BACKEND_DMA?
> 
> So from another IP block?   For that to be reasonably 'generic' we'd need a way
> to known where it was coming from.
> 

Yeps, in this case comes from the IIO DMA buffer which in HW means a DMA IP core...

> Now I remember advantage of reviewing on weekends - fewer replies during the
> reviews :)
> 

:)

- Nuno Sá

  reply	other threads:[~2024-03-28 16:55 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-28 13:22 [PATCH 00/10] iio: dac: support IIO backends on the output direction Nuno Sa via B4 Relay
2024-03-28 13:22 ` [PATCH 01/10] iio: buffer: add helper for setting direction Nuno Sa via B4 Relay
2024-03-28 14:36   ` Jonathan Cameron
2024-03-28 15:18     ` Nuno Sá
2024-03-28 15:54       ` Jonathan Cameron
2024-03-28 13:22 ` [PATCH 02/10] iio: buffer-dma: Rename iio_dma_buffer_data_available() Nuno Sa via B4 Relay
2024-03-28 13:22 ` [PATCH 03/10] iio: buffer-dma: Enable buffer write support Nuno Sa via B4 Relay
2024-03-28 13:22 ` [PATCH 04/10] iio: buffer-dmaengine: Support specifying buffer direction Nuno Sa via B4 Relay
2024-03-28 13:22 ` [PATCH 05/10] iio: buffer-dmaengine: Enable write support Nuno Sa via B4 Relay
2024-03-28 13:22 ` [PATCH 06/10] dt-bindings: iio: dac: add bindings doc for AXI DAC driver Nuno Sa via B4 Relay
2024-03-29 18:46   ` David Lechner
2024-04-02  7:51     ` Nuno Sá
2024-04-01 13:59   ` Rob Herring
2024-04-04 10:03     ` Nuno Sá
2024-03-28 13:22 ` [PATCH 07/10] dt-bindings: iio: dac: add bindings doc for AD9739A Nuno Sa via B4 Relay
2024-03-29 19:06   ` David Lechner
2024-03-30 18:27     ` Krzysztof Kozlowski
2024-04-02  7:49       ` Nuno Sá
2024-04-02  7:50     ` Nuno Sá
2024-04-01 14:02   ` Rob Herring
2024-03-28 13:22 ` [PATCH 08/10] iio: backend: add new functionality Nuno Sa via B4 Relay
2024-03-28 15:16   ` Jonathan Cameron
2024-03-28 15:42     ` Nuno Sá
2024-03-28 15:59       ` Jonathan Cameron
2024-03-28 16:54         ` Nuno Sá [this message]
2024-03-28 13:22 ` [PATCH 09/10] iio: dac: add support for AXI DAC IP core Nuno Sa via B4 Relay
2024-03-28 15:35   ` Jonathan Cameron
2024-03-28 16:43     ` Nuno Sá
2024-03-28 13:22 ` [PATCH 10/10] iio: dac: support the ad9739a RF DAC Nuno Sa via B4 Relay
2024-03-28 15:51   ` Jonathan Cameron
2024-03-28 16:37     ` Nuno Sá
2024-03-28 16:52       ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1e5e8b0764b3a42059be4c20724d475c83e5d241.camel@gmail.com \
    --to=noname.nuno@gmail.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=devnull+nuno.sa.analog.com@kernel.org \
    --cc=dragos.bogdan@analog.com \
    --cc=jic23@kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=nuno.sa@analog.com \
    --cc=olivier.moysan@foss.st.com \
    --cc=robh@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox