Re: [RFC PATCH 0/3] iio: buffer: add output buffer support for chrdev

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

 



On Mon, 2020-03-30 at 17:57 +0300, Alexandru Ardelean wrote:

I goofed Michael's email on the first run.
Sorry for the spam.

> [This description is also present on patch 3/3, there have been some
> cosmetic stuff since that one that I did not remove. These patches
> probably won't make it in a final version, but they're there because
> I changed my mind a few times and got to this RFC]
> 
> There have been some offline discussions about how to go about this.
> Since I wasn't involved in any of those discussions, this kind of tries to
> re-build things from various bits.
> It's incomplete work, since I don't have a clear idea of what the
> accepted/acceptable
> approach would be.
> 
> 1. First approach is: we keep 1 buffer per device, and we make it either
> in/out, which means that for devices that for devices that have both in/out
> 2 iio_dev instances are required, or an ADC needs to be connected on the in
> path and a DAC on out-path. This is predominantly done in the ADI tree.
> 
> 2. One discussion/proposal was to have multiple buffers per-device. But the
> details are vague since they were relayed to me.
> One detail was, to have indexes for devices that have more than 1
> buffer:
> 
> Iio_deviceX:
>         buffer
>         scan_elements
> 
> Iio_deviceX:
>         BufferY
>         scan_elementsY
>         BufferZ
>         scan_elementsZ
> 
> I am not sure how feasible this is for a single chrdev, as when you look at
> the fileops that get assigned to a chrdev, it looks like it can have at
> most two buffers (one for input, out for output).
> 
> Multiplexing input buffers can work (from ADCs), but demultiplexing output
> buffers into a DAC, not so well. Especially on a single chrdev.
> 
> Question 1: do we want to support more than 2 buffers per chrdev?
> 
> This is what ADI currently has in it's tree (and works).
> 
> Example, ADC:
>  # ls iio\:device3/buffer/
>  data_available  enable  length  length_align_bytes  watermark
>  #  ls iio\:device3/scan_elements/
>  in_voltage0_en  in_voltage0_index  in_voltage0_type  in_voltage1_en  in_volta
> ge1_index  in_voltage1_type
> 
> Example, DAC:
>  #  ls iio\:device4/buffer/
>  data_available  enable  length  length_align_bytes  watermark
>  # ls iio\:device4/scan_elements/
>  out_voltage0_en     out_voltage0_type  out_voltage1_index  out_voltage2_en   
>   out_voltage2_type  out_voltage3_index
>  out_voltage0_index  out_voltage1_en    out_voltage1_type   out_voltage2_index
>   out_voltage3_en    out_voltage3_type
> 
> The direction of each element is encoded into the filename of each channel.
> 
> Another question is:
>  Does it make sense to have more than 1 'scan_elements' folder?
>  That is, for devices that would have both in & out channels.
> 
> For 'buffer' folders I was thinking that it may make sense to have,
> 'buffer_in' && 'buffer_out'.
> 
> So, one idea is:
> 
> Iio_deviceX:
>         buffer_in
>         buffer_out
>         scan_elements
> 
> Currently, this patch kind of implements 2 buffers per iio_dev/chrdev.
> But the format is:
> 
> Iio_deviceX:
>         buffer_in
>         buffer_out
>         scan_elements_in
>         scan_elements_out
> 
> Obviously it shouldn't work as-is [as it wasn't tested], but at least gives
> some glimpse of where this could go.
> 
> 3. A side question is about the 'iio_buffer -> pollq' field. I was
> wondering if it would make sense to move that on to 'iio_dev  pollq' if
> adding multiple buffers are added per-device. It almost makes sense to
> unify the 'pollq' on indio_dev.
> But, it looks a bit difficult, and would require some more change [which is
> doable] if it makes sense for whatever reason.
> The only reason to do it, is because the iio_buffer_fileops has a .poll =
> iio_buffer_poll() function attached to it. Adding multiple buffers for an
> IIO device may require some consideration on the iio_buffer_poll() function
> as well.
> 
> Alexandru Ardelean (3):
>   iio: core: rename 'indio_dev->buffer_list' ->
>     'indio_dev->active_buffers'
>   iio: buffer: extend short-hand use for 'indio_dev->buffer'
>   iio: buffer: add output buffer support for chrdev
> 
>  .../buffer/industrialio-buffer-dmaengine.c    |   3 +-
>  drivers/iio/industrialio-buffer.c             | 267 +++++++++++++-----
>  drivers/iio/industrialio-core.c               |   5 +-
>  include/linux/iio/buffer.h                    |   9 +
>  include/linux/iio/buffer_impl.h               |   7 +
>  include/linux/iio/iio.h                       |  12 +-
>  6 files changed, 225 insertions(+), 78 deletions(-)
> 




[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