# SPDX-License-Identifier: GPL-2.0-only
#
# Industrial I/O generic buffer implementations
#
# When adding new entries keep the list in alphabetical order

config IIO_BUFFER_CB
	tristate "IIO callback buffer used for push in-kernel interfaces"
	help
	  Should be selected by any drivers that do in-kernel push
	  usage.  That is, those where the data is pushed to the consumer.

config IIO_BUFFER_DMA
	tristate "Industrial I/O DMA buffer infrastructure"
	help
	  Provides the generic IIO DMA buffer infrastructure that can be used by
	  drivers for devices with DMA support to implement the IIO buffer.

	  Should be selected by drivers that want to use the generic DMA buffer
	  infrastructure.

config IIO_BUFFER_DMAENGINE
	tristate "Industrial I/O DMA buffer integration with DMAEngine"
	select IIO_BUFFER_DMA
	help
	  Provides a bonding of the generic IIO DMA buffer infrastructure with the
	  DMAEngine framework. This can be used by converter drivers with a DMA port
	  connected to an external DMA controller which is supported by the
	  DMAEngine framework.

	  Should be selected by drivers that want to use this functionality.

config IIO_BUFFER_HW_CONSUMER
	tristate "Industrial I/O HW buffering"
	help
	  Provides a way to bonding when an IIO device has a direct connection
	  to another device in hardware. In this case buffers for data transfers
	  are handled by hardware.

	  Should be selected by drivers that want to use the generic Hw consumer
	  interface.

config IIO_KFIFO_BUF
	tristate "Industrial I/O buffering based on kfifo"
	help
	  A simple fifo based on kfifo.  Note that this currently provides
	  no buffer events so it is up to userspace to work out how
	  often to read from the buffer.

config IIO_TRIGGERED_BUFFER
	tristate "Industrial I/O triggered buffer support"
	select IIO_TRIGGER
	select IIO_KFIFO_BUF
	help
	  Provides helper functions for setting up triggered buffers.
