#
# Industrial I/O subsytem configuration
#

menuconfig IIO
	tristate "Industrial I/O support"
	depends on GENERIC_HARDIRQS
	help
	  The industrial I/O subsystem provides a unified framework for
	  drivers for many different types of embedded sensors using a
	  number of different physical interfaces (i2c, spi, etc). See
	  drivers/staging/iio/Documentation for more information.
if IIO
config IIO_ST_HWMON
	tristate "Hwmon driver that uses channels specified via iio maps"
	depends on HWMON
	help
	  This is a platform driver that in combination with a suitable
	  map allows IIO devices to provide  basic hwmon functionality
	  for those channels specified in the map.

config IIO_BUFFER
	bool "Enable buffer support within IIO"
	help
	  Provide core support for various buffer based data
	  acquisition methods.

if IIO_BUFFER

config IIO_SW_RING
       select IIO_TRIGGER
	tristate "Industrial I/O lock free software ring"
	help
	  Example software ring buffer implementation.  The design aim
	  of this particular realization was to minimize write locking
	  with the intention that some devices would be able to write
	  in interrupt context.

config IIO_KFIFO_BUF
	select IIO_TRIGGER
	tristate "Industrial I/O buffering based on kfifo"
	help
	  A simple fifo based on kfifo.  Use this if you want a fifo
	  rather than a ring buffer. Note that this currently provides
	  no buffer events so it is up to userspace to work out how
	  often to read from the buffer.

endif # IIO_BUFFER

config IIO_TRIGGER
	boolean "Enable triggered sampling support"
	help
	  Provides IIO core support for triggers.  Currently these
	  are used to initialize capture of samples to push into
	  ring buffers.  The triggers are effectively a 'capture
	  data now' interrupt.

config IIO_CONSUMERS_PER_TRIGGER
       int "Maximum number of consumers per trigger"
       depends on IIO_TRIGGER
       default "2"
       help
	This value controls the maximum number of consumers that a
	given trigger may handle. Default is 2.

source "drivers/staging/iio/accel/Kconfig"
source "drivers/staging/iio/adc/Kconfig"
source "drivers/staging/iio/addac/Kconfig"
source "drivers/staging/iio/cdc/Kconfig"
source "drivers/staging/iio/dac/Kconfig"
source "drivers/staging/iio/dds/Kconfig"
source "drivers/staging/iio/gyro/Kconfig"
source "drivers/staging/iio/impedance-analyzer/Kconfig"
source "drivers/staging/iio/imu/Kconfig"
source "drivers/staging/iio/light/Kconfig"
source "drivers/staging/iio/magnetometer/Kconfig"
source "drivers/staging/iio/meter/Kconfig"
source "drivers/staging/iio/resolver/Kconfig"
source "drivers/staging/iio/trigger/Kconfig"

config IIO_DUMMY_EVGEN
       tristate

config IIO_SIMPLE_DUMMY
       tristate "An example driver with no hardware requirements"
       help
	 Driver intended mainly as documentation for how to write
	 a driver. May also be useful for testing userspace code
	 without hardware.

if IIO_SIMPLE_DUMMY

config IIO_SIMPLE_DUMMY_EVENTS
       boolean "Event generation support"
       select IIO_DUMMY_EVGEN
       help
         Add some dummy events to the simple dummy driver.

config IIO_SIMPLE_DUMMY_BUFFER
       boolean "Buffered capture support"
       depends on IIO_KFIFO_BUF
       help
         Add buffered data capture to the simple dummy driver.

endif # IIO_SIMPLE_DUMMY

endif # IIO
