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