Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5565a450 authored by Jonathan Cameron's avatar Jonathan Cameron Committed by Greg Kroah-Hartman
Browse files

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: default avatarJonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 38d15f06
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ 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);
	size_t datasize = ring->access->get_bytes_per_datum(ring);

	data = kmalloc(datasize, GFP_KERNEL);
	if (data == NULL) {
@@ -86,7 +86,7 @@ static irqreturn_t adis16201_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);
@@ -101,6 +101,12 @@ void adis16201_unconfigure_ring(struct iio_dev *indio_dev)
	iio_sw_rb_free(indio_dev->ring);
}

static const struct iio_ring_setup_ops adis16201_ring_setup_ops = {
	.preenable = &iio_sw_ring_preenable,
	.postenable = &iio_triggered_ring_postenable,
	.predisable = &iio_triggered_ring_predisable,
};

int adis16201_configure_ring(struct iio_dev *indio_dev)
{
	int ret = 0;
@@ -113,12 +119,10 @@ int adis16201_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->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->access = &ring_sw_access_funcs;
	ring->setup_ops = &adis16201_ring_setup_ops;
	ring->owner = THIS_MODULE;

	/* Set default scan mode */
+10 −6
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ 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);
	size_t datasize = ring->access->get_bytes_per_datum(ring);

	data = kmalloc(datasize, GFP_KERNEL);
	if (data == NULL) {
@@ -91,7 +91,7 @@ static irqreturn_t adis16203_trigger_handler(int irq, void *p)
	if (ring->scan_timestamp)
		*((s64 *)(data + ((i + 3)/4)*4)) = pf->timestamp;

	ring->access.store_to(ring,
	ring->access->store_to(ring,
			      (u8 *)data,
			      pf->timestamp);

@@ -108,6 +108,12 @@ void adis16203_unconfigure_ring(struct iio_dev *indio_dev)
	iio_sw_rb_free(indio_dev->ring);
}

static const struct iio_ring_setup_ops adis16203_ring_setup_ops = {
	.preenable = &iio_sw_ring_preenable,
	.postenable = &iio_triggered_ring_postenable,
	.predisable = &iio_triggered_ring_predisable,
};

int adis16203_configure_ring(struct iio_dev *indio_dev)
{
	int ret = 0;
@@ -120,12 +126,10 @@ int adis16203_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->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->access = &ring_sw_access_funcs;
	ring->setup_ops = &adis16203_ring_setup_ops;
	ring->owner = THIS_MODULE;

	/* Set default scan mode */
+10 −6
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ static irqreturn_t adis16204_trigger_handler(int irq, void *p)
	struct iio_ring_buffer *ring = indio_dev->ring;
	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) {
@@ -88,7 +88,7 @@ static irqreturn_t adis16204_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);
@@ -103,6 +103,12 @@ void adis16204_unconfigure_ring(struct iio_dev *indio_dev)
	iio_sw_rb_free(indio_dev->ring);
}

static const struct iio_ring_setup_ops adis16204_ring_setup_ops = {
	.preenable = &iio_sw_ring_preenable,
	.postenable = &iio_triggered_ring_postenable,
	.predisable = &iio_triggered_ring_predisable,
};

int adis16204_configure_ring(struct iio_dev *indio_dev)
{
	int ret = 0;
@@ -115,12 +121,10 @@ int adis16204_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 = &adis16204_ring_setup_ops;
	ring->owner = THIS_MODULE;

	/* Set default scan mode */
+10 −6
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ static irqreturn_t adis16209_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) {
@@ -88,7 +88,7 @@ static irqreturn_t adis16209_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);
@@ -103,6 +103,12 @@ void adis16209_unconfigure_ring(struct iio_dev *indio_dev)
	iio_sw_rb_free(indio_dev->ring);
}

static const struct iio_ring_setup_ops adis16209_ring_setup_ops = {
	.preenable = &iio_sw_ring_preenable,
	.postenable = &iio_triggered_ring_postenable,
	.predisable = &iio_triggered_ring_predisable,
};

int adis16209_configure_ring(struct iio_dev *indio_dev)
{
	int ret = 0;
@@ -115,12 +121,10 @@ int adis16209_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 = &adis16209_ring_setup_ops;
	ring->owner = THIS_MODULE;

	/* Set default scan mode */
+10 −6
Original line number Diff line number Diff line
@@ -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 */
Loading