Skip to content

Commit

Permalink
staging:iio:adis16400: Use triggered buffer setup helper function
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Lars-Peter Clausen authored and Jonathan Cameron committed Jan 26, 2013
1 parent cd888a1 commit 1ffe2e7
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 52 deletions.
13 changes: 1 addition & 12 deletions drivers/staging/iio/imu/adis16400_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -981,18 +981,10 @@ static int adis16400_probe(struct spi_device *spi)
if (ret)
goto error_free_dev;

ret = iio_buffer_register(indio_dev,
st->variant->channels,
st->variant->num_channels);
if (ret) {
dev_err(&spi->dev, "failed to initialize the ring\n");
goto error_unreg_ring_funcs;
}

if (spi->irq) {
ret = adis_probe_trigger(&st->adis, indio_dev);
if (ret)
goto error_uninitialize_ring;
goto error_unreg_ring_funcs;
}

/* Get the device into a sane initial state */
Expand All @@ -1008,8 +1000,6 @@ static int adis16400_probe(struct spi_device *spi)
error_remove_trigger:
if (spi->irq)
adis_remove_trigger(&st->adis);
error_uninitialize_ring:
iio_buffer_unregister(indio_dev);
error_unreg_ring_funcs:
adis16400_unconfigure_ring(indio_dev);
error_free_dev:
Expand All @@ -1029,7 +1019,6 @@ static int adis16400_remove(struct spi_device *spi)

if (spi->irq)
adis_remove_trigger(&st->adis);
iio_buffer_unregister(indio_dev);
adis16400_unconfigure_ring(indio_dev);

iio_device_free(indio_dev);
Expand Down
47 changes: 7 additions & 40 deletions drivers/staging/iio/imu/adis16400_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -159,47 +160,13 @@ static irqreturn_t adis16400_trigger_handler(int irq, void *p)
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);
}

0 comments on commit 1ffe2e7

Please sign in to comment.