diff options
author | Jonathan Cameron <jic23@cam.ac.uk> | 2011-05-18 14:42:24 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-19 16:15:03 -0700 |
commit | 5565a450248d827afa949aab157873d4b9be329e (patch) | |
tree | ef63d8173f83e685b00cdf41435575cfd34d84f2 /drivers/staging/iio/accel/adis16240_ring.c | |
parent | 38d15f06f942306050a063abd111467d39c5cc37 (diff) |
staging:iio: rationalization of different buffer implementation hooks.
1) move a generic helper function out of ring_sw. It applies to other buffers as well.
2) Get rid of a lot of left over function definitions.
3) Move all the access functions into static structures.
4) Introduce and use a static structure for the setup functions, preenable etc.
Some driver conversions thanks to Michael Hennerich (pulled out of patches
that would otherwise sit after this).
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/accel/adis16240_ring.c')
-rw-r--r-- | drivers/staging/iio/accel/adis16240_ring.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c index bddd6990b3d..8450f7f0e53 100644 --- a/drivers/staging/iio/accel/adis16240_ring.c +++ b/drivers/staging/iio/accel/adis16240_ring.c @@ -68,7 +68,7 @@ static irqreturn_t adis16240_trigger_handler(int irq, void *p) int i = 0; s16 *data; - size_t datasize = ring->access.get_bytes_per_datum(ring); + size_t datasize = ring->access->get_bytes_per_datum(ring); data = kmalloc(datasize, GFP_KERNEL); if (data == NULL) { @@ -85,7 +85,7 @@ static irqreturn_t adis16240_trigger_handler(int irq, void *p) if (ring->scan_timestamp) *((s64 *)(data + ((i + 3)/4)*4)) = pf->timestamp; - ring->access.store_to(ring, (u8 *)data, pf->timestamp); + ring->access->store_to(ring, (u8 *)data, pf->timestamp); iio_trigger_notify_done(st->indio_dev->trig); kfree(data); @@ -100,6 +100,12 @@ void adis16240_unconfigure_ring(struct iio_dev *indio_dev) iio_sw_rb_free(indio_dev->ring); } +static const struct iio_ring_setup_ops adis16240_ring_setup_ops = { + .preenable = &iio_sw_ring_preenable, + .postenable = &iio_triggered_ring_postenable, + .predisable = &iio_triggered_ring_predisable, +}; + int adis16240_configure_ring(struct iio_dev *indio_dev) { int ret = 0; @@ -112,12 +118,10 @@ int adis16240_configure_ring(struct iio_dev *indio_dev) } indio_dev->ring = ring; /* Effectively select the ring buffer implementation */ - iio_ring_sw_register_funcs(&ring->access); + ring->access = &ring_sw_access_funcs; ring->bpe = 2; ring->scan_timestamp = true; - ring->preenable = &iio_sw_ring_preenable; - ring->postenable = &iio_triggered_ring_postenable; - ring->predisable = &iio_triggered_ring_predisable; + ring->setup_ops = &adis16240_ring_setup_ops; ring->owner = THIS_MODULE; /* Set default scan mode */ |