staging:iio: add caching of the number of bytes in a scan.
Signed-off-by: Jonathan Cameron <jic23@kernel.org> Acked-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f1264809eb
commit
420fe2e947
@ -66,9 +66,8 @@ static irqreturn_t adis16201_trigger_handler(int irq, void *p)
|
||||
|
||||
int i = 0;
|
||||
s16 *data;
|
||||
size_t datasize = ring->access->get_bytes_per_datum(ring);
|
||||
|
||||
data = kmalloc(datasize, GFP_KERNEL);
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL) {
|
||||
dev_err(&st->us->dev, "memory alloc failed in ring bh");
|
||||
return -ENOMEM;
|
||||
|
@ -66,9 +66,8 @@ static irqreturn_t adis16203_trigger_handler(int irq, void *p)
|
||||
|
||||
int i = 0;
|
||||
s16 *data;
|
||||
size_t datasize = ring->access->get_bytes_per_datum(ring);
|
||||
|
||||
data = kmalloc(datasize, GFP_KERNEL);
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL) {
|
||||
dev_err(&st->us->dev, "memory alloc failed in ring bh");
|
||||
return -ENOMEM;
|
||||
|
@ -63,9 +63,8 @@ static irqreturn_t adis16204_trigger_handler(int irq, void *p)
|
||||
struct iio_buffer *ring = indio_dev->buffer;
|
||||
int i = 0;
|
||||
s16 *data;
|
||||
size_t datasize = ring->access->get_bytes_per_datum(ring);
|
||||
|
||||
data = kmalloc(datasize, GFP_KERNEL);
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL) {
|
||||
dev_err(&st->us->dev, "memory alloc failed in ring bh");
|
||||
return -ENOMEM;
|
||||
|
@ -61,12 +61,10 @@ static irqreturn_t adis16209_trigger_handler(int irq, void *p)
|
||||
struct iio_dev *indio_dev = pf->indio_dev;
|
||||
struct adis16209_state *st = iio_priv(indio_dev);
|
||||
struct iio_buffer *ring = indio_dev->buffer;
|
||||
|
||||
int i = 0;
|
||||
s16 *data;
|
||||
size_t datasize = ring->access->get_bytes_per_datum(ring);
|
||||
|
||||
data = kmalloc(datasize , GFP_KERNEL);
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL) {
|
||||
dev_err(&st->us->dev, "memory alloc failed in ring bh");
|
||||
return -ENOMEM;
|
||||
|
@ -61,9 +61,8 @@ 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);
|
||||
|
||||
data = kmalloc(datasize, GFP_KERNEL);
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL) {
|
||||
dev_err(&st->us->dev, "memory alloc failed in ring bh");
|
||||
return -ENOMEM;
|
||||
|
@ -137,9 +137,9 @@ static irqreturn_t lis3l02dq_trigger_handler(int irq, void *p)
|
||||
struct iio_dev *indio_dev = pf->indio_dev;
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
int len = 0;
|
||||
size_t datasize = buffer->access->get_bytes_per_datum(buffer);
|
||||
char *data = kmalloc(datasize, GFP_KERNEL);
|
||||
char *data;
|
||||
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL) {
|
||||
dev_err(indio_dev->dev.parent,
|
||||
"memory alloc failed in buffer bh");
|
||||
|
@ -51,8 +51,7 @@ static void ad7606_poll_bh_to_ring(struct work_struct *work_s)
|
||||
__u8 *buf;
|
||||
int ret;
|
||||
|
||||
buf = kzalloc(ring->access->get_bytes_per_datum(ring),
|
||||
GFP_KERNEL);
|
||||
buf = kzalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (buf == NULL)
|
||||
return;
|
||||
|
||||
|
@ -66,9 +66,8 @@ static irqreturn_t adis16260_trigger_handler(int irq, void *p)
|
||||
struct iio_buffer *ring = indio_dev->buffer;
|
||||
int i = 0;
|
||||
s16 *data;
|
||||
size_t datasize = ring->access->get_bytes_per_datum(ring);
|
||||
|
||||
data = kmalloc(datasize , GFP_KERNEL);
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL) {
|
||||
dev_err(&st->us->dev, "memory alloc failed in ring bh");
|
||||
return -ENOMEM;
|
||||
|
@ -299,6 +299,7 @@ struct iio_buffer_setup_ops {
|
||||
* and owner
|
||||
* @event_interface: [INTERN] event chrdevs associated with interrupt lines
|
||||
* @buffer: [DRIVER] any buffer present
|
||||
* @scan_bytes: [INTERN] num bytes captured to be fed to buffer demux
|
||||
* @mlock: [INTERN] lock used to prevent simultaneous device state
|
||||
* changes
|
||||
* @available_scan_masks: [DRIVER] optional array of allowed bitmasks
|
||||
@ -335,6 +336,7 @@ struct iio_dev {
|
||||
struct iio_event_interface *event_interface;
|
||||
|
||||
struct iio_buffer *buffer;
|
||||
int scan_bytes;
|
||||
struct mutex mlock;
|
||||
|
||||
const unsigned long *available_scan_masks;
|
||||
|
@ -48,12 +48,9 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p)
|
||||
struct iio_dev *indio_dev = pf->indio_dev;
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
int len = 0;
|
||||
/*
|
||||
* The datasize is obtained from the buffer. It was stored when
|
||||
* the preenable setup function was called.
|
||||
*/
|
||||
size_t datasize = buffer->access->get_bytes_per_datum(buffer);
|
||||
u16 *data = kmalloc(datasize, GFP_KERNEL);
|
||||
u16 *data;
|
||||
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -119,12 +119,12 @@ static irqreturn_t adis16400_trigger_handler(int irq, void *p)
|
||||
struct iio_buffer *ring = indio_dev->buffer;
|
||||
int i = 0, j, ret = 0;
|
||||
s16 *data;
|
||||
size_t datasize = ring->access->get_bytes_per_datum(ring);
|
||||
|
||||
/* Asumption that long is enough for maximum channels */
|
||||
unsigned long mask = *indio_dev->active_scan_mask;
|
||||
int scan_count = bitmap_weight(indio_dev->active_scan_mask,
|
||||
indio_dev->masklength);
|
||||
data = kmalloc(datasize , GFP_KERNEL);
|
||||
data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
|
||||
if (data == NULL) {
|
||||
dev_err(&st->us->dev, "memory alloc failed in ring bh");
|
||||
return -ENOMEM;
|
||||
|
@ -536,13 +536,13 @@ static int iio_compute_scan_bytes(struct iio_dev *indio_dev, const long *mask,
|
||||
int iio_sw_buffer_preenable(struct iio_dev *indio_dev)
|
||||
{
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
unsigned bytes;
|
||||
dev_dbg(&indio_dev->dev, "%s\n", __func__);
|
||||
|
||||
/* How much space will the demuxed element take? */
|
||||
bytes = iio_compute_scan_bytes(indio_dev, buffer->scan_mask,
|
||||
indio_dev->scan_bytes =
|
||||
iio_compute_scan_bytes(indio_dev, buffer->scan_mask,
|
||||
buffer->scan_timestamp);
|
||||
buffer->access->set_bytes_per_datum(buffer, bytes);
|
||||
buffer->access->set_bytes_per_datum(buffer, indio_dev->scan_bytes);
|
||||
|
||||
/* What scan mask do we actually have ?*/
|
||||
if (indio_dev->available_scan_masks)
|
||||
|
Loading…
Reference in New Issue
Block a user