• Octavian Purdila's avatar
    iio: add support for hardware fifo · f4f4673b
    Octavian Purdila authored
    Some devices have hardware buffers that can store a number of samples
    for later consumption. Hardware usually provides interrupts to notify
    the processor when the FIFO is full or when it has reached a certain
    watermark level. This helps with reducing the number of interrupts to
    the host processor and thus it helps decreasing the power consumption.
    
    This patch enables usage of hardware FIFOs for IIO devices in
    conjunction with software device buffers. When the hardware FIFO is
    enabled the samples are stored in the hardware FIFO. The samples are
    later flushed to the device software buffer when the number of entries
    in the hardware FIFO reaches the hardware watermark or when a flush
    operation is triggered by the user when doing a non-blocking read
    on an empty software device buffer.
    
    In order to implement hardware FIFO support the device drivers must
    implement the following new operations: setting and getting the
    hardware FIFO watermark level, flushing the hardware FIFO to the
    software device buffer. The device must also expose information about
    the hardware FIFO such it's minimum and maximum watermark and if
    necessary a list of supported watermark values. Finally, the device
    driver must activate the hardware FIFO when the device buffer is
    enabled, if the current device settings allows it.
    
    The software device buffer watermark is passed by the IIO core to the
    device driver as a hint for the hardware FIFO watermark. The device
    driver can adjust this value to allow for hardware limitations (such
    as capping it to the maximum hardware watermark or adjust it to a
    value that is supported by the hardware). It can also disable the
    hardware watermark (and implicitly the hardware FIFO) it this value is
    below the minimum hardware watermark.
    
    Since a driver may support hardware FIFO only when not in triggered
    buffer mode (due to different semantics of hardware FIFO sampling and
    triggered sampling) this patch changes the IIO core code to allow
    falling back to non-triggered buffered mode if no trigger is enabled.
    Signed-off-by: default avatarOctavian Purdila <octavian.purdila@intel.com>
    Reviewed-by: default avatarLars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
    f4f4673b
industrialio-buffer.c 31.4 KB