iio: Add new operating mode for non triggered sw buffers
authorKarol Wrona <k.wrona@samsung.com>
Wed, 7 Jan 2015 18:36:11 +0000 (19:36 +0100)
committerJonathan Cameron <jic23@kernel.org>
Sun, 25 Jan 2015 22:53:38 +0000 (22:53 +0000)
There was a need for non triggered software buffer type.  It can be used when
triggered model does not fit and INDIO_BUFFER_HARDWARE causes confusion because
the data stream can be obtained not directly form hardware backend.

Suggested-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Karol Wrona <k.wrona@samsung.com>
Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/industrialio-buffer.c
include/linux/iio/iio.h

index 403b72878b0b550c983510f5b66a061e563991d6..71333140d42c4815a5b8e336fb54a107c55c92a9 100644 (file)
@@ -639,6 +639,8 @@ static int __iio_update_buffers(struct iio_dev *indio_dev,
                indio_dev->currentmode = INDIO_BUFFER_TRIGGERED;
        } else if (indio_dev->modes & INDIO_BUFFER_HARDWARE) {
                indio_dev->currentmode = INDIO_BUFFER_HARDWARE;
+       } else if (indio_dev->modes & INDIO_BUFFER_SOFTWARE) {
+               indio_dev->currentmode = INDIO_BUFFER_SOFTWARE;
        } else { /* Should never be reached */
                ret = -EINVAL;
                goto error_run_postdisable;
index 878d861b061059a5cbff99fcb0aea9904c611ed5..590202024857bccbbbf7b3ef1b11c14dcc0480d8 100644 (file)
@@ -286,10 +286,11 @@ static inline s64 iio_get_time_ns(void)
 /* Device operating modes */
 #define INDIO_DIRECT_MODE              0x01
 #define INDIO_BUFFER_TRIGGERED         0x02
+#define INDIO_BUFFER_SOFTWARE          0x04
 #define INDIO_BUFFER_HARDWARE          0x08
 
 #define INDIO_ALL_BUFFER_MODES                                 \
-       (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE)
+       (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE | INDIO_BUFFER_SOFTWARE)
 
 #define INDIO_MAX_RAW_ELEMENTS         4
 
@@ -593,7 +594,8 @@ void devm_iio_trigger_free(struct device *dev, struct iio_trigger *iio_trig);
 static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
 {
        return indio_dev->currentmode
-               & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE);
+               & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE |
+                  INDIO_BUFFER_SOFTWARE);
 }
 
 /**