Commit 4f5495d0 authored by Jonathan Cameron's avatar Jonathan Cameron Committed by Greg Kroah-Hartman

staging;iio:adc:ad7606 use iio_sw_buffer_preenable rather than local equiv

Other than a few slight refactorings the local version was pretty standard
so replace it and rework to get rid of st->d_size which it setup.
Signed-off-by: default avatarJonathan Cameron <jic23@cam.ac.uk>
Acked-by: default avatarMichael Hennerich <michael.hennerich@analog.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 68b41aef
......@@ -68,7 +68,6 @@ struct ad7606_state {
struct regulator *reg;
struct work_struct poll_work;
wait_queue_head_t wq_data_avail;
size_t d_size;
const struct ad7606_bus_ops *bops;
int irq;
unsigned id;
......
......@@ -42,37 +42,6 @@ int ad7606_scan_from_ring(struct iio_dev *indio_dev, unsigned ch)
return ret;
}
/**
* ad7606_ring_preenable() setup the parameters of the ring before enabling
*
* The complex nature of the setting of the nuber of bytes per datum is due
* to this driver currently ensuring that the timestamp is stored at an 8
* byte boundary.
**/
static int ad7606_ring_preenable(struct iio_dev *indio_dev)
{
struct ad7606_state *st = iio_priv(indio_dev);
struct iio_buffer *ring = indio_dev->buffer;
size_t d_size;
d_size = st->chip_info->num_channels *
st->chip_info->channels[0].scan_type.storagebits / 8;
if (ring->scan_timestamp) {
d_size += sizeof(s64);
if (d_size % sizeof(s64))
d_size += sizeof(s64) - (d_size % sizeof(s64));
}
if (ring->access->set_bytes_per_datum)
ring->access->set_bytes_per_datum(ring, d_size);
st->d_size = d_size;
return 0;
}
/**
* ad7606_trigger_handler_th() th/bh of trigger launched polling to ring buffer
*
......@@ -106,7 +75,8 @@ static void ad7606_poll_bh_to_ring(struct work_struct *work_s)
__u8 *buf;
int ret;
buf = kzalloc(st->d_size, GFP_KERNEL);
buf = kzalloc(ring->access->get_bytes_per_datum(ring),
GFP_KERNEL);
if (buf == NULL)
return;
......@@ -137,8 +107,8 @@ static void ad7606_poll_bh_to_ring(struct work_struct *work_s)
time_ns = iio_get_time_ns();
if (ring->scan_timestamp)
memcpy(buf + st->d_size - sizeof(s64),
&time_ns, sizeof(time_ns));
*((s64 *)(buf + ring->access->get_bytes_per_datum(ring) -
sizeof(s64))) = time_ns;
ring->access->store_to(indio_dev->buffer, buf, time_ns);
done:
......@@ -148,7 +118,7 @@ static void ad7606_poll_bh_to_ring(struct work_struct *work_s)
}
static const struct iio_buffer_setup_ops ad7606_ring_setup_ops = {
.preenable = &ad7606_ring_preenable,
.preenable = &iio_sw_buffer_preenable,
.postenable = &iio_triggered_buffer_postenable,
.predisable = &iio_triggered_buffer_predisable,
};
......@@ -166,6 +136,8 @@ int ad7606_register_ring_funcs_and_init(struct iio_dev *indio_dev)
/* Effectively select the ring buffer implementation */
indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->buffer->bpe =
st->chip_info->channels[0].scan_type.storagebits / 8;
indio_dev->pollfunc = iio_alloc_pollfunc(&ad7606_trigger_handler_th_bh,
&ad7606_trigger_handler_th_bh,
0,
......
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