summaryrefslogtreecommitdiffstats
path: root/drivers/staging/iio/imu/adis16400_ring.c
diff options
context:
space:
mode:
authorLars-Peter Clausen2013-01-16 13:48:00 +0100
committerJonathan Cameron2013-01-26 11:07:48 +0100
commit1ffe2e7ac000b7a7c01b22cd64cc3d4ef01a9def (patch)
tree76b0468259a59e667e86d3a127cfaa1c02f72e93 /drivers/staging/iio/imu/adis16400_ring.c
parentstaging:iio:adis16400: Use adis library (diff)
downloadkernel-qcow2-linux-1ffe2e7ac000b7a7c01b22cd64cc3d4ef01a9def.tar.gz
kernel-qcow2-linux-1ffe2e7ac000b7a7c01b22cd64cc3d4ef01a9def.tar.xz
kernel-qcow2-linux-1ffe2e7ac000b7a7c01b22cd64cc3d4ef01a9def.zip
staging:iio:adis16400: Use triggered buffer setup helper function
Use the triggered buffer helper functions to setup and tear down the buffer for the adis16400 instead of doing this manually. This also means that we switch away from the deprecated sw_ring buffer and use the kfifo buffer now instead. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/staging/iio/imu/adis16400_ring.c')
-rw-r--r--drivers/staging/iio/imu/adis16400_ring.c47
1 files changed, 7 insertions, 40 deletions
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index 6c5b0be71900..e421278e8d79 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -7,7 +7,8 @@
#include <linux/export.h>
#include <linux/iio/iio.h>
-#include "../ring_sw.h"
+#include <linux/iio/buffer.h>
+#include <linux/iio/triggered_buffer.h>
#include <linux/iio/trigger_consumer.h>
#include "adis16400.h"
@@ -159,47 +160,13 @@ done:
return IRQ_HANDLED;
}
-void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
+int adis16400_configure_ring(struct iio_dev *indio_dev)
{
- iio_dealloc_pollfunc(indio_dev->pollfunc);
- iio_sw_rb_free(indio_dev->buffer);
+ return iio_triggered_buffer_setup(indio_dev, &iio_pollfunc_store_time,
+ &adis16400_trigger_handler, NULL);
}
-static const struct iio_buffer_setup_ops adis16400_ring_setup_ops = {
- .preenable = &iio_sw_buffer_preenable,
- .postenable = &iio_triggered_buffer_postenable,
- .predisable = &iio_triggered_buffer_predisable,
-};
-
-int adis16400_configure_ring(struct iio_dev *indio_dev)
+void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
{
- int ret = 0;
- struct iio_buffer *ring;
-
- ring = iio_sw_rb_allocate(indio_dev);
- if (!ring) {
- ret = -ENOMEM;
- return ret;
- }
- indio_dev->buffer = ring;
- ring->scan_timestamp = true;
- indio_dev->setup_ops = &adis16400_ring_setup_ops;
-
- indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
- &adis16400_trigger_handler,
- IRQF_ONESHOT,
- indio_dev,
- "%s_consumer%d",
- indio_dev->name,
- indio_dev->id);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
- goto error_iio_sw_rb_free;
- }
-
- indio_dev->modes |= INDIO_BUFFER_TRIGGERED;
- return 0;
-error_iio_sw_rb_free:
- iio_sw_rb_free(indio_dev->buffer);
- return ret;
+ iio_triggered_buffer_cleanup(indio_dev);
}