Re: [PATCH 08/10] iio: backend: add new functionality

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 28 Mar 2024 16:42:38 +0100
Nuno Sá <noname.nuno@xxxxxxxxx> 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@xxxxxxxxxx> wrote:
> >   
> > > From: Nuno Sa <nuno.sa@xxxxxxxxxx>
> > > 
> > > 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.

>   
> > 
> >   
> > > +	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.

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

Jonathan






[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux