Commit a458c55c authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Jonathan Cameron

staging:iio:adis_lib: Use triggered buffer setup helper function

Use the triggered buffer helper functions to setup and tear down the buffer for
the adis library 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: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 9d5e9fdf
...@@ -23,8 +23,7 @@ config IIO_ADIS_LIB ...@@ -23,8 +23,7 @@ config IIO_ADIS_LIB
config IIO_ADIS_LIB_BUFFER config IIO_ADIS_LIB_BUFFER
bool bool
select IIO_TRIGGER select IIO_TRIGGERED_BUFFER
select IIO_SW_RING
help help
A set of buffer helper functions for the Analog Devices ADIS* device A set of buffer helper functions for the Analog Devices ADIS* device
family. family.
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
#include <linux/iio/iio.h> #include <linux/iio/iio.h>
#include <linux/iio/buffer.h> #include <linux/iio/buffer.h>
#include "../ring_sw.h"
#include <linux/iio/trigger_consumer.h> #include <linux/iio/trigger_consumer.h>
#include <linux/iio/triggered_buffer.h>
#include "adis.h" #include "adis.h"
...@@ -83,56 +83,6 @@ static irqreturn_t adis_trigger_handler(int irq, void *p) ...@@ -83,56 +83,6 @@ static irqreturn_t adis_trigger_handler(int irq, void *p)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static const struct iio_buffer_setup_ops adis_buffer_setup_ops = {
.preenable = &iio_sw_buffer_preenable,
.postenable = &iio_triggered_buffer_postenable,
.predisable = &iio_triggered_buffer_predisable,
};
static int adis_buffer_setup(struct iio_dev *indio_dev,
irqreturn_t (*trigger_handler)(int, void *))
{
int ret = 0;
struct iio_buffer *buffer;
if (!trigger_handler)
trigger_handler = &adis_trigger_handler;
buffer = iio_sw_rb_allocate(indio_dev);
if (!buffer) {
ret = -ENOMEM;
return ret;
}
indio_dev->buffer = buffer;
indio_dev->setup_ops = &adis_buffer_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
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;
}
static void adis_buffer_cleanup(struct iio_dev *indio_dev)
{
iio_dealloc_pollfunc(indio_dev->pollfunc);
iio_sw_rb_free(indio_dev->buffer);
}
/** /**
* adis_setup_buffer_and_trigger() - Sets up buffer and trigger for the adis device * adis_setup_buffer_and_trigger() - Sets up buffer and trigger for the adis device
* @adis: The adis device. * @adis: The adis device.
...@@ -154,30 +104,23 @@ int adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev, ...@@ -154,30 +104,23 @@ int adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev,
{ {
int ret; int ret;
ret = adis_buffer_setup(indio_dev, trigger_handler); if (!trigger_handler)
trigger_handler = adis_trigger_handler;
ret = iio_triggered_buffer_setup(indio_dev, &iio_pollfunc_store_time,
trigger_handler, NULL);
if (ret) if (ret)
return ret; return ret;
ret = iio_buffer_register(indio_dev,
indio_dev->channels,
indio_dev->num_channels);
if (ret) {
dev_err(&adis->spi->dev, "Failed to initialize buffer %d\n",
ret);
goto error_unreg_buffer_funcs;
}
if (adis->spi->irq) { if (adis->spi->irq) {
ret = adis_probe_trigger(adis, indio_dev); ret = adis_probe_trigger(adis, indio_dev);
if (ret) if (ret)
goto error_uninitialize_buffer; goto error_buffer_cleanup;
} }
return 0; return 0;
error_uninitialize_buffer: error_buffer_cleanup:
iio_buffer_unregister(indio_dev); iio_triggered_buffer_cleanup(indio_dev);
error_unreg_buffer_funcs:
adis_buffer_cleanup(indio_dev);
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(adis_setup_buffer_and_trigger); EXPORT_SYMBOL_GPL(adis_setup_buffer_and_trigger);
...@@ -194,7 +137,6 @@ void adis_cleanup_buffer_and_trigger(struct adis *adis, ...@@ -194,7 +137,6 @@ void adis_cleanup_buffer_and_trigger(struct adis *adis,
{ {
if (adis->spi->irq) if (adis->spi->irq)
adis_remove_trigger(adis); adis_remove_trigger(adis);
iio_buffer_unregister(indio_dev); iio_triggered_buffer_cleanup(indio_dev);
adis_buffer_cleanup(indio_dev);
} }
EXPORT_SYMBOL_GPL(adis_cleanup_buffer_and_trigger); EXPORT_SYMBOL_GPL(adis_cleanup_buffer_and_trigger);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment