summaryrefslogtreecommitdiff
path: root/drivers/staging/iio/adc/ad799x_ring.c
diff options
context:
space:
mode:
authorMichael Hennerich <michael.hennerich@analog.com>2010-10-12 10:30:51 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2010-10-12 08:59:32 -0700
commit1139df53533e8a4327f3867c6b32202ac62b19ee (patch)
treee852ff3cb37a543d99b872645456f95287867396 /drivers/staging/iio/adc/ad799x_ring.c
parent668413e9e7ad0bc53eeba2465dafd66dbc817996 (diff)
staging: iio: adc: ad799x miscellaneous cleanups
-Simplify by using iio_alloc_pollfunc helper function -Print in_scale in decimal format. -Simplify ring pointer dereferences Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Acked-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/adc/ad799x_ring.c')
-rw-r--r--drivers/staging/iio/adc/ad799x_ring.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index c6871fa068ed..975cdcbf0830 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -32,6 +32,7 @@ int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask)
struct iio_ring_buffer *ring = st->indio_dev->ring;
int count = 0, ret;
u16 *ring_data;
+
if (!(ring->scan_mask & mask)) {
ret = -EBUSY;
goto error_ret;
@@ -70,6 +71,7 @@ error_ret:
**/
static int ad799x_ring_preenable(struct iio_dev *indio_dev)
{
+ struct iio_ring_buffer *ring = indio_dev->ring;
struct ad799x_state *st = indio_dev->dev_data;
size_t d_size;
unsigned long numvals;
@@ -80,16 +82,15 @@ static int ad799x_ring_preenable(struct iio_dev *indio_dev)
*/
if (st->id == ad7997 || st->id == ad7998)
- ad799x_set_scan_mode(st, st->indio_dev->ring->scan_mask);
+ ad799x_set_scan_mode(st, ring->scan_mask);
- numvals = st->indio_dev->ring->scan_count;
+ numvals = ring->scan_count;
- if (indio_dev->ring->access.set_bytes_per_datum) {
+ if (ring->access.set_bytes_per_datum) {
d_size = numvals*2 + sizeof(s64);
if (d_size % 8)
d_size += 8 - (d_size % 8);
- indio_dev->ring->access.set_bytes_per_datum(indio_dev->ring,
- d_size);
+ ring->access.set_bytes_per_datum(ring, d_size);
}
return 0;
@@ -124,14 +125,15 @@ static void ad799x_poll_bh_to_ring(struct work_struct *work_s)
struct ad799x_state *st = container_of(work_s, struct ad799x_state,
poll_work);
struct iio_dev *indio_dev = st->indio_dev;
- struct iio_sw_ring_buffer *ring = iio_to_sw_ring(indio_dev->ring);
+ struct iio_ring_buffer *ring = indio_dev->ring;
+ struct iio_sw_ring_buffer *ring_sw = iio_to_sw_ring(indio_dev->ring);
s64 time_ns;
__u8 *rxbuf;
int b_sent;
size_t d_size;
u8 cmd;
- unsigned long numvals = st->indio_dev->ring->scan_count;
+ unsigned long numvals = ring->scan_count;
/* Ensure the timestamp is 8 byte aligned */
d_size = numvals*2 + sizeof(s64);
@@ -158,14 +160,13 @@ static void ad799x_poll_bh_to_ring(struct work_struct *work_s)
case ad7991:
case ad7995:
case ad7999:
- cmd = st->config | (st->indio_dev->ring->scan_mask <<
- AD799X_CHANNEL_SHIFT);
+ cmd = st->config | (ring->scan_mask << AD799X_CHANNEL_SHIFT);
break;
case ad7992:
case ad7993:
case ad7994:
- cmd = (st->indio_dev->ring->scan_mask <<
- AD799X_CHANNEL_SHIFT) | AD7998_CONV_RES_REG;
+ cmd = (ring->scan_mask << AD799X_CHANNEL_SHIFT) |
+ AD7998_CONV_RES_REG;
break;
case ad7997:
case ad7998:
@@ -184,7 +185,7 @@ static void ad799x_poll_bh_to_ring(struct work_struct *work_s)
memcpy(rxbuf + d_size - sizeof(s64), &time_ns, sizeof(time_ns));
- indio_dev->ring->access.store_to(&ring->buf, rxbuf, time_ns);
+ ring->access.store_to(&ring_sw->buf, rxbuf, time_ns);
done:
kfree(rxbuf);
atomic_dec(&st->protect_ring);
@@ -203,14 +204,9 @@ int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
}
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&st->indio_dev->ring->access);
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &ad799x_poll_func_th);
+ if (ret)
goto error_deallocate_sw_rb;
- }
- /* Configure the polling function called on trigger interrupts */
- indio_dev->pollfunc->poll_func_main = &ad799x_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
/* Ring buffer functions - here trigger setup related */