* [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
@ 2011-12-12 10:09 Lars-Peter Clausen
2011-12-13 0:46 ` Greg KH
2011-12-13 0:52 ` Greg KH
0 siblings, 2 replies; 12+ messages in thread
From: Lars-Peter Clausen @ 2011-12-12 10:09 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Jonathan Cameron, devel, linux-iio, Lars-Peter Clausen
Setup the buffer access functions in the buffer allocate function. There is no
need to let each driver handle this on its own.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
---
drivers/staging/iio/accel/adis16201_ring.c | 2 --
drivers/staging/iio/accel/adis16203_ring.c | 2 --
drivers/staging/iio/accel/adis16204_ring.c | 2 --
drivers/staging/iio/accel/adis16209_ring.c | 2 --
drivers/staging/iio/accel/adis16240_ring.c | 2 --
drivers/staging/iio/accel/lis3l02dq.h | 2 --
drivers/staging/iio/accel/lis3l02dq_ring.c | 2 --
drivers/staging/iio/adc/ad7192.c | 2 --
drivers/staging/iio/adc/ad7298_ring.c | 3 ---
drivers/staging/iio/adc/ad7476_ring.c | 2 --
drivers/staging/iio/adc/ad7606_ring.c | 2 --
drivers/staging/iio/adc/ad7793.c | 2 --
drivers/staging/iio/adc/ad7887_ring.c | 2 --
drivers/staging/iio/adc/ad799x_ring.c | 2 --
drivers/staging/iio/adc/max1363_ring.c | 2 --
drivers/staging/iio/gyro/adis16260_ring.c | 2 --
drivers/staging/iio/iio_simple_dummy_buffer.c | 2 --
drivers/staging/iio/impedance-analyzer/ad5933.c | 3 ---
drivers/staging/iio/imu/adis16400_ring.c | 2 --
drivers/staging/iio/kfifo_buf.c | 1 +
drivers/staging/iio/meter/ade7758_ring.c | 2 --
drivers/staging/iio/ring_sw.c | 1 +
22 files changed, 2 insertions(+), 42 deletions(-)
diff --git a/drivers/staging/iio/accel/adis16201_ring.c b/drivers/staging/iio/accel/adis16201_ring.c
index 26c610f..97f9e6b 100644
--- a/drivers/staging/iio/accel/adis16201_ring.c
+++ b/drivers/staging/iio/accel/adis16201_ring.c
@@ -115,9 +115,7 @@ int adis16201_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
ring->scan_timestamp = true;
- ring->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &adis16201_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/accel/adis16203_ring.c b/drivers/staging/iio/accel/adis16203_ring.c
index 064640d..6a8963d 100644
--- a/drivers/staging/iio/accel/adis16203_ring.c
+++ b/drivers/staging/iio/accel/adis16203_ring.c
@@ -117,9 +117,7 @@ int adis16203_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
ring->scan_timestamp = true;
- ring->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &adis16203_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/accel/adis16204_ring.c b/drivers/staging/iio/accel/adis16204_ring.c
index 4081179..5c8ab73 100644
--- a/drivers/staging/iio/accel/adis16204_ring.c
+++ b/drivers/staging/iio/accel/adis16204_ring.c
@@ -112,8 +112,6 @@ int adis16204_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16204_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index 2a6fd334..57254b6 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -113,8 +113,6 @@ int adis16209_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16209_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index e23622d..43ba84e 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -110,8 +110,6 @@ int adis16240_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16240_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/lis3l02dq.h b/drivers/staging/iio/accel/lis3l02dq.h
index 2db383f..ae5f225 100644
--- a/drivers/staging/iio/accel/lis3l02dq.h
+++ b/drivers/staging/iio/accel/lis3l02dq.h
@@ -187,12 +187,10 @@ void lis3l02dq_unconfigure_buffer(struct iio_dev *indio_dev);
#ifdef CONFIG_LIS3L02DQ_BUF_RING_SW
#define lis3l02dq_free_buf iio_sw_rb_free
#define lis3l02dq_alloc_buf iio_sw_rb_allocate
-#define lis3l02dq_access_funcs ring_sw_access_funcs
#endif
#ifdef CONFIG_LIS3L02DQ_BUF_KFIFO
#define lis3l02dq_free_buf iio_kfifo_free
#define lis3l02dq_alloc_buf iio_kfifo_allocate
-#define lis3l02dq_access_funcs kfifo_access_funcs
#endif
irqreturn_t lis3l02dq_data_rdy_trig_poll(int irq, void *private);
#define lis3l02dq_th lis3l02dq_data_rdy_trig_poll
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 98c5c92..ca0a1fe 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -406,8 +406,6 @@ int lis3l02dq_configure_buffer(struct iio_dev *indio_dev)
return -ENOMEM;
indio_dev->buffer = buffer;
- /* Effectively select the buffer implementation */
- indio_dev->buffer->access = &lis3l02dq_access_funcs;
buffer->scan_timestamp = true;
indio_dev->setup_ops = &lis3l02dq_buffer_setup_ops;
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index 66cc507..ab0cd10 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -561,8 +561,6 @@ static int ad7192_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7192_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7298_ring.c b/drivers/staging/iio/adc/ad7298_ring.c
index d1a12dd..feeb0ee 100644
--- a/drivers/staging/iio/adc/ad7298_ring.c
+++ b/drivers/staging/iio/adc/ad7298_ring.c
@@ -131,9 +131,6 @@ int ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
-
indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
&ad7298_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7476_ring.c b/drivers/staging/iio/adc/ad7476_ring.c
index 4e298b2..35a8576 100644
--- a/drivers/staging/iio/adc/ad7476_ring.c
+++ b/drivers/staging/iio/adc/ad7476_ring.c
@@ -98,8 +98,6 @@ int ad7476_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc
= iio_alloc_pollfunc(NULL,
&ad7476_trigger_handler,
diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c
index e8f94a1..1ef9fbc 100644
--- a/drivers/staging/iio/adc/ad7606_ring.c
+++ b/drivers/staging/iio/adc/ad7606_ring.c
@@ -110,8 +110,6 @@ int ad7606_register_ring_funcs_and_init(struct iio_dev *indio_dev)
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&ad7606_trigger_handler_th_bh,
&ad7606_trigger_handler_th_bh,
0,
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
index 4047c5d..637820b 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/staging/iio/adc/ad7793.c
@@ -427,8 +427,6 @@ static int ad7793_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7793_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7887_ring.c b/drivers/staging/iio/adc/ad7887_ring.c
index 85076cd..d180907 100644
--- a/drivers/staging/iio/adc/ad7887_ring.c
+++ b/drivers/staging/iio/adc/ad7887_ring.c
@@ -131,8 +131,6 @@ int ad7887_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7887_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index 5dded9e..28e9a41 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -141,8 +141,6 @@ int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
&ad799x_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index f730b3f..d0a60a3 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -116,8 +116,6 @@ int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_deallocate_sw_rb;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
/* Ring buffer functions - here trigger setup related */
indio_dev->setup_ops = &max1363_ring_setup_ops;
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index 699a615..711f151 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -115,8 +115,6 @@ int adis16260_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16260_ring_setup_ops;
diff --git a/drivers/staging/iio/iio_simple_dummy_buffer.c b/drivers/staging/iio/iio_simple_dummy_buffer.c
index d6a1c0e..bb4daf7 100644
--- a/drivers/staging/iio/iio_simple_dummy_buffer.c
+++ b/drivers/staging/iio/iio_simple_dummy_buffer.c
@@ -142,8 +142,6 @@ int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
}
indio_dev->buffer = buffer;
- /* Tell the core how to access the buffer */
- buffer->access = &kfifo_access_funcs;
/* Enable timestamps by default */
buffer->scan_timestamp = true;
diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
index f02d1c0..4138082 100644
--- a/drivers/staging/iio/impedance-analyzer/ad5933.c
+++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
@@ -607,9 +607,6 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
if (!indio_dev->buffer)
return -ENOMEM;
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
-
/* Ring buffer functions - here trigger setup related */
indio_dev->setup_ops = &ad5933_ring_setup_ops;
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index ac22de5..8daa038 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -187,8 +187,6 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16400_ring_setup_ops;
diff --git a/drivers/staging/iio/kfifo_buf.c b/drivers/staging/iio/kfifo_buf.c
index b69cca5..930029b 100644
--- a/drivers/staging/iio/kfifo_buf.c
+++ b/drivers/staging/iio/kfifo_buf.c
@@ -98,6 +98,7 @@ struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
kf->update_needed = true;
iio_buffer_init(&kf->buffer);
kf->buffer.attrs = &iio_kfifo_attribute_group;
+ kf->buffer->access = kfifo_access_funcs;
__iio_init_kfifo(kf);
return &kf->buffer;
diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
index f29f2b2..c5c522b 100644
--- a/drivers/staging/iio/meter/ade7758_ring.c
+++ b/drivers/staging/iio/meter/ade7758_ring.c
@@ -144,8 +144,6 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
return ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &ade7758_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c
index 4c15cc8..98b66a0 100644
--- a/drivers/staging/iio/ring_sw.c
+++ b/drivers/staging/iio/ring_sw.c
@@ -376,6 +376,7 @@ struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev)
iio_buffer_init(buf);
__iio_init_sw_ring_buffer(ring);
buf->attrs = &iio_ring_attribute_group;
+ buf->access = &ring_sw_access_funcs;
return buf;
}
--
1.7.7.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-12 10:09 Lars-Peter Clausen
@ 2011-12-13 0:46 ` Greg KH
2011-12-13 7:23 ` Jonathan Cameron
2011-12-13 0:52 ` Greg KH
1 sibling, 1 reply; 12+ messages in thread
From: Greg KH @ 2011-12-13 0:46 UTC (permalink / raw)
To: Lars-Peter Clausen; +Cc: Greg Kroah-Hartman, Jonathan Cameron, devel, linux-iio
On Mon, Dec 12, 2011 at 11:09:05AM +0100, Lars-Peter Clausen wrote:
> Setup the buffer access functions in the buffer allocate function. There is no
> need to let each driver handle this on its own.
That's nicer.
So, you have different ways to have "buffers" and the driver doesn't
know what type you have, and it's chosen at build time? Why are you
making the kernel builder make such a decision? Why not just pick one,
that you know works well, and use it?
You would get rid of a whole level of indirection that I really don't
think you need at all, right?
Make a decision, don't force someone else to make it for you...
greg k-h
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-12 10:09 Lars-Peter Clausen
2011-12-13 0:46 ` Greg KH
@ 2011-12-13 0:52 ` Greg KH
1 sibling, 0 replies; 12+ messages in thread
From: Greg KH @ 2011-12-13 0:52 UTC (permalink / raw)
To: Lars-Peter Clausen; +Cc: Greg Kroah-Hartman, Jonathan Cameron, devel, linux-iio
On Mon, Dec 12, 2011 at 11:09:05AM +0100, Lars-Peter Clausen wrote:
> Setup the buffer access functions in the buffer allocate function. There is no
> need to let each driver handle this on its own.
This patch breaks the build, so I can't take it.
Please be more careful in the future, breakages like this stall my
workflow a lot...
greg k-h
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-13 0:46 ` Greg KH
@ 2011-12-13 7:23 ` Jonathan Cameron
2011-12-13 7:38 ` Greg KH
0 siblings, 1 reply; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-13 7:23 UTC (permalink / raw)
To: Greg KH, Lars-Peter Clausen
Cc: Greg Kroah-Hartman, Jonathan Cameron, devel, linux-iio
Greg KH <greg@kroah.com> wrote:
>On Mon, Dec 12, 2011 at 11:09:05AM +010=
0, Lars-Peter Clausen wrote:
>> Setup the buffer access functions in the bu=
ffer allocate function.
>There is no
>> need to let each driver handle this=
on its own.
>
>That's nicer.
>
>So, you have different ways to have "buffe=
rs" and the driver doesn't
>know what type you have, and it's chosen at bui=
ld time? Why are you
>making the kernel builder make such a decision? Why=
not just pick one,
>that you know works well, and use it?
>
>You would get=
rid of a whole level of indirection that I really don't
>think you need at=
all, right?
Because there is not currently a buffer that suits all use ca=
ses.
One might be possible but would involve autoswitching between differen=
t approaches a hence have this indirection anyway, be it burried. Also note=
that some of the buffers are hardware. Plus the pseudo buffer used for in=
kernel push interfaces is different again. That code has only reached RFC =
state so far.
>Make a decision, don't force someone else to make it for yo=
u...
Defaults are sensible. Preventing other peoples use cases are not.
>=
>greg k-h
--
Sent from my Android phone
with K-9 Mail. Please excuse my=
brevity.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-13 7:23 ` Jonathan Cameron
@ 2011-12-13 7:38 ` Greg KH
2011-12-13 8:48 ` J.I. Cameron
2011-12-13 9:08 ` Lars-Peter Clausen
0 siblings, 2 replies; 12+ messages in thread
From: Greg KH @ 2011-12-13 7:38 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Greg KH, Lars-Peter Clausen, Jonathan Cameron, devel, linux-iio
On Tue, Dec 13, 2011 at 07:23:48AM +0000, Jonathan Cameron wrote:
>
>
> Greg KH <greg@kroah.com> wrote:
>
> >On Mon, Dec 12, 2011 at 11:09:05AM +0100, Lars-Peter Clausen wrote:
> >> Setup the buffer access functions in the buffer allocate function.
> >There is no
> >> need to let each driver handle this on its own.
> >
> >That's nicer.
> >
> >So, you have different ways to have "buffers" and the driver doesn't
> >know what type you have, and it's chosen at build time? Why are you
> >making the kernel builder make such a decision? Why not just pick one,
> >that you know works well, and use it?
> >
> >You would get rid of a whole level of indirection that I really don't
> >think you need at all, right?
>
> Because there is not currently a buffer that suits all use cases.
> One might be possible but would involve autoswitching between
> different approaches a hence have this indirection anyway, be it
> burried. Also note that some of the buffers are hardware. Plus the
> pseudo buffer used for in kernel push interfaces is different again.
> That code has only reached RFC state so far.
So who choses the buffer type, the driver, or the kernel configurator,
or something else?
> >Make a decision, don't force someone else to make it for you...
> Defaults are sensible. Preventing other peoples use cases are not.
Ok, but you do agree that this patch is broken as-is, right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-13 7:38 ` Greg KH
@ 2011-12-13 8:48 ` J.I. Cameron
2011-12-14 0:00 ` Greg KH
2011-12-13 9:08 ` Lars-Peter Clausen
1 sibling, 1 reply; 12+ messages in thread
From: J.I. Cameron @ 2011-12-13 8:48 UTC (permalink / raw)
To: Greg KH; +Cc: Greg KH, Lars-Peter Clausen, Jonathan Cameron, devel, linux-iio
On Dec 13 2011, Greg KH wrote:
>On Tue, Dec 13, 2011 at 07:23:48AM +0000, Jonathan Cameron wrote:
>>
>>
>> Greg KH <greg@kroah.com> wrote:
>>
>> >On Mon, Dec 12, 2011 at 11:09:05AM +0100, Lars-Peter Clausen wrote:
>> >> Setup the buffer access functions in the buffer allocate function.
>> >There is no
>> >> need to let each driver handle this on its own.
>> >
>> >That's nicer.
>> >
>> >So, you have different ways to have "buffers" and the driver doesn't
>> >know what type you have, and it's chosen at build time? Why are you
>> >making the kernel builder make such a decision? Why not just pick one,
>> >that you know works well, and use it?
>> >
>> >You would get rid of a whole level of indirection that I really don't
>> >think you need at all, right?
>>
>> Because there is not currently a buffer that suits all use cases.
>> One might be possible but would involve autoswitching between
>> different approaches a hence have this indirection anyway, be it
>> burried. Also note that some of the buffers are hardware. Plus the
>> pseudo buffer used for in kernel push interfaces is different again.
>> That code has only reached RFC state so far.
>
>So who choses the buffer type, the driver, or the kernel configurator,
>or something else?
The driver picks a default (and often only) implementation (or the writer
does anyway - this will get reviewed with the code submission).
Iff there are two usecases requiring different buffer implementations,
then the driver picks the default (or Kconfig settings do anyway). There
is the option of doing at at runtime, but we haven't yet had a usecase
demanding it. The cases where a particular implementation is needed that
isn't the default will tend to be weird high performance stuff, so in those
cases it's typically a hand crafted kernel anyway. Kernel configurator
should normally go with the default (unless he knows he is configuring for
a class of application where the alternative makes sense).
To be honest, the biggest gain from these abstractions so far haven't
really been these but:
1) Ability to push in new implementations - I'm not happy with ring_sw for
starters + we don't have anything that handles really high volumes of data
in there yet. The few drivers that currently allow switching are mainly there
so I can hammer the different buffers and verify they work against the same
userspace code.
2) The abstraction is needed anyway to handle the fact we have multiple data
paths in the new code to do in kernel interfaces (the demux stuff you merged
the other day was step one of that). That works by having a list of buffers
into which the demux unit pushes the data they are wanting. Buffers is a
loose term. Maybe data sinks is better for those uses.
Saying that the road map in my head and the stuff Analog are working on
both require considerably more sophisticated buffers for some use cases.
>
>> >Make a decision, don't force someone else to make it for you...
>> Defaults are sensible. Preventing other peoples use cases are not.
>
>Ok, but you do agree that this patch is broken as-is, right?
Not sure I do. I admit it isn't a patch I really cared about either way,
but it is just providing a trivial bit of boiler plate removal.
The buffer allocation and access functions are always pared and all I see
here is moving the access funcs bit inside the allocation call?
Perhaps I have missunderstood what you don't like?
>
>thanks,
>
>greg k-h
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-13 7:38 ` Greg KH
2011-12-13 8:48 ` J.I. Cameron
@ 2011-12-13 9:08 ` Lars-Peter Clausen
1 sibling, 0 replies; 12+ messages in thread
From: Lars-Peter Clausen @ 2011-12-13 9:08 UTC (permalink / raw)
To: Greg KH; +Cc: Jonathan Cameron, Greg KH, Jonathan Cameron, devel, linux-iio
On 12/13/2011 08:38 AM, Greg KH wrote:
> On Tue, Dec 13, 2011 at 07:23:48AM +0000, Jonathan Cameron wrote:
>>
>>
>> Greg KH <greg@kroah.com> wrote:
>>
>>> On Mon, Dec 12, 2011 at 11:09:05AM +0100, Lars-Peter Clausen wrote:
>>>> Setup the buffer access functions in the buffer allocate function.
>>> There is no
>>>> need to let each driver handle this on its own.
>>>
>>> That's nicer.
>>>
>>> So, you have different ways to have "buffers" and the driver doesn't
>>> know what type you have, and it's chosen at build time? Why are you
>>> making the kernel builder make such a decision? Why not just pick one,
>>> that you know works well, and use it?
>>>
>>> You would get rid of a whole level of indirection that I really don't
>>> think you need at all, right?
>>
>> Because there is not currently a buffer that suits all use cases.
>> One might be possible but would involve autoswitching between
>> different approaches a hence have this indirection anyway, be it
>> burried. Also note that some of the buffers are hardware. Plus the
>> pseudo buffer used for in kernel push interfaces is different again.
>> That code has only reached RFC state so far.
>
> So who choses the buffer type, the driver, or the kernel configurator,
> or something else?
>
>>> Make a decision, don't force someone else to make it for you...
>> Defaults are sensible. Preventing other peoples use cases are not.
>
> Ok, but you do agree that this patch is broken as-is, right?
We have different buffer implementations. Each buffer implementation has their
internal data structure, which is only visible to this buffer implementation.
Each buffer implementation provides a set of functions which work on this data
structure. Also each buffer implementation has one function which allocates the
data structure. So the set of functions the buffer implementation provides will
only work on the data structure allocated by the allocation function this
specific buffer implementation provides. Moving the assignment of access
functions inside the allocation function instead of doing it manually in driver
code is obviously the right thing to do.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-13 8:48 ` J.I. Cameron
@ 2011-12-14 0:00 ` Greg KH
2011-12-14 7:21 ` Jonathan Cameron
0 siblings, 1 reply; 12+ messages in thread
From: Greg KH @ 2011-12-14 0:00 UTC (permalink / raw)
To: J.I. Cameron
Cc: Greg KH, Lars-Peter Clausen, Jonathan Cameron, devel, linux-iio
On Tue, Dec 13, 2011 at 08:48:08AM +0000, J.I. Cameron wrote:
> >>>Make a decision, don't force someone else to make it for you...
> >>Defaults are sensible. Preventing other peoples use cases are not.
> >
> >Ok, but you do agree that this patch is broken as-is, right?
> Not sure I do. I admit it isn't a patch I really cared about either way,
> but it is just providing a trivial bit of boiler plate removal.
> The buffer allocation and access functions are always pared and all I see
> here is moving the access funcs bit inside the allocation call?
>
> Perhaps I have missunderstood what you don't like?
I don't like anything that forces the builder of the kernel to choose
the buffer type, that should be done by the driver, or it should be
dynamic and changable, and you need to provide documentation as to why
you would want to change the buffer type.
greg k-h
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-14 0:00 ` Greg KH
@ 2011-12-14 7:21 ` Jonathan Cameron
0 siblings, 0 replies; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-14 7:21 UTC (permalink / raw)
To: Greg KH; +Cc: Greg KH, Lars-Peter Clausen, Jonathan Cameron, devel, linux-iio
Greg KH <gregkh@suse.de> wrote:
>On Tue, Dec 13, 2011 at 08:48:08AM +000=
0, J.I. Cameron wrote:
>> >>>Make a decision, don't force someone else to m=
ake it for you...
>> >>Defaults are sensible. Preventing other peoples use =
cases are not.
>> >
>> >Ok, but you do agree that this patch is broken as-i=
s, right?
>> Not sure I do. I admit it isn't a patch I really cared about =
either
>way,
>> but it is just providing a trivial bit of boiler plate remo=
val.
>> The buffer allocation and access functions are always pared and all=
I
>see
>> here is moving the access funcs bit inside the allocation call?
=
>>
>> Perhaps I have missunderstood what you don't like?
>
>I don't like a=
nything that forces the builder of the kernel to choose
>the buffer type, t=
hat should be done by the driver, or it should be
>dynamic and changable, a=
nd you need to provide documentation as to why
>you would want to change th=
e buffer type.
Can make it dynamic easily enough . Does indeed need more d=
ocs on the different buffer types. I will get to that at somepoint...
>
>gr=
eg k-h
--
Sent from my Android phone
with K-9 Mail. Please excuse my bre=
vity.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
@ 2011-12-28 11:32 Lars-Peter Clausen
2011-12-31 20:01 ` Jonathan Cameron
0 siblings, 1 reply; 12+ messages in thread
From: Lars-Peter Clausen @ 2011-12-28 11:32 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen
Setup the buffer access functions in the buffer allocate function. There is no
need to let each driver handle this on its own.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
Jonathan, since there has been some discussion around this patch I would like
you to confirm your Acked-by for this patch again, if you still think this
patch is OK as is.
---
drivers/staging/iio/accel/adis16201_ring.c | 2 -
drivers/staging/iio/accel/adis16203_ring.c | 2 -
drivers/staging/iio/accel/adis16204_ring.c | 2 -
drivers/staging/iio/accel/adis16209_ring.c | 2 -
drivers/staging/iio/accel/adis16240_ring.c | 2 -
drivers/staging/iio/accel/lis3l02dq.h | 2 -
drivers/staging/iio/accel/lis3l02dq_ring.c | 2 -
drivers/staging/iio/adc/ad7192.c | 2 -
drivers/staging/iio/adc/ad7298_ring.c | 3 -
drivers/staging/iio/adc/ad7476_ring.c | 2 -
drivers/staging/iio/adc/ad7606_ring.c | 2 -
drivers/staging/iio/adc/ad7793.c | 2 -
drivers/staging/iio/adc/ad7887_ring.c | 2 -
drivers/staging/iio/adc/ad799x_ring.c | 2 -
drivers/staging/iio/adc/max1363_ring.c | 2 -
drivers/staging/iio/gyro/adis16260_ring.c | 2 -
drivers/staging/iio/iio_simple_dummy_buffer.c | 2 -
drivers/staging/iio/impedance-analyzer/ad5933.c | 3 -
drivers/staging/iio/imu/adis16400_ring.c | 2 -
drivers/staging/iio/kfifo_buf.c | 46 +++++++++++-----------
drivers/staging/iio/kfifo_buf.h | 2 -
drivers/staging/iio/meter/ade7758_ring.c | 2 -
drivers/staging/iio/ring_sw.c | 22 +++++-----
drivers/staging/iio/ring_sw.h | 5 --
24 files changed, 34 insertions(+), 83 deletions(-)
diff --git a/drivers/staging/iio/accel/adis16201_ring.c b/drivers/staging/iio/accel/adis16201_ring.c
index 26c610f..97f9e6b 100644
--- a/drivers/staging/iio/accel/adis16201_ring.c
+++ b/drivers/staging/iio/accel/adis16201_ring.c
@@ -115,9 +115,7 @@ int adis16201_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
ring->scan_timestamp = true;
- ring->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &adis16201_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/accel/adis16203_ring.c b/drivers/staging/iio/accel/adis16203_ring.c
index 064640d..6a8963d 100644
--- a/drivers/staging/iio/accel/adis16203_ring.c
+++ b/drivers/staging/iio/accel/adis16203_ring.c
@@ -117,9 +117,7 @@ int adis16203_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
ring->scan_timestamp = true;
- ring->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &adis16203_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/accel/adis16204_ring.c b/drivers/staging/iio/accel/adis16204_ring.c
index 4081179..5c8ab73 100644
--- a/drivers/staging/iio/accel/adis16204_ring.c
+++ b/drivers/staging/iio/accel/adis16204_ring.c
@@ -112,8 +112,6 @@ int adis16204_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16204_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index 2a6fd334..57254b6 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -113,8 +113,6 @@ int adis16209_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16209_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index e23622d..43ba84e 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -110,8 +110,6 @@ int adis16240_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16240_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/lis3l02dq.h b/drivers/staging/iio/accel/lis3l02dq.h
index 2db383f..ae5f225 100644
--- a/drivers/staging/iio/accel/lis3l02dq.h
+++ b/drivers/staging/iio/accel/lis3l02dq.h
@@ -187,12 +187,10 @@ void lis3l02dq_unconfigure_buffer(struct iio_dev *indio_dev);
#ifdef CONFIG_LIS3L02DQ_BUF_RING_SW
#define lis3l02dq_free_buf iio_sw_rb_free
#define lis3l02dq_alloc_buf iio_sw_rb_allocate
-#define lis3l02dq_access_funcs ring_sw_access_funcs
#endif
#ifdef CONFIG_LIS3L02DQ_BUF_KFIFO
#define lis3l02dq_free_buf iio_kfifo_free
#define lis3l02dq_alloc_buf iio_kfifo_allocate
-#define lis3l02dq_access_funcs kfifo_access_funcs
#endif
irqreturn_t lis3l02dq_data_rdy_trig_poll(int irq, void *private);
#define lis3l02dq_th lis3l02dq_data_rdy_trig_poll
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 98c5c92..ca0a1fe 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -406,8 +406,6 @@ int lis3l02dq_configure_buffer(struct iio_dev *indio_dev)
return -ENOMEM;
indio_dev->buffer = buffer;
- /* Effectively select the buffer implementation */
- indio_dev->buffer->access = &lis3l02dq_access_funcs;
buffer->scan_timestamp = true;
indio_dev->setup_ops = &lis3l02dq_buffer_setup_ops;
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index dfeb4ba..654f7fb 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -561,8 +561,6 @@ static int ad7192_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7192_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7298_ring.c b/drivers/staging/iio/adc/ad7298_ring.c
index d1a12dd..feeb0ee 100644
--- a/drivers/staging/iio/adc/ad7298_ring.c
+++ b/drivers/staging/iio/adc/ad7298_ring.c
@@ -131,9 +131,6 @@ int ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
-
indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
&ad7298_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7476_ring.c b/drivers/staging/iio/adc/ad7476_ring.c
index 4e298b2..35a8576 100644
--- a/drivers/staging/iio/adc/ad7476_ring.c
+++ b/drivers/staging/iio/adc/ad7476_ring.c
@@ -98,8 +98,6 @@ int ad7476_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc
= iio_alloc_pollfunc(NULL,
&ad7476_trigger_handler,
diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c
index e8f94a1..1ef9fbc 100644
--- a/drivers/staging/iio/adc/ad7606_ring.c
+++ b/drivers/staging/iio/adc/ad7606_ring.c
@@ -110,8 +110,6 @@ int ad7606_register_ring_funcs_and_init(struct iio_dev *indio_dev)
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&ad7606_trigger_handler_th_bh,
&ad7606_trigger_handler_th_bh,
0,
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
index accf325..fc9ebf1 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/staging/iio/adc/ad7793.c
@@ -427,8 +427,6 @@ static int ad7793_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7793_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7887_ring.c b/drivers/staging/iio/adc/ad7887_ring.c
index 85076cd..d180907 100644
--- a/drivers/staging/iio/adc/ad7887_ring.c
+++ b/drivers/staging/iio/adc/ad7887_ring.c
@@ -131,8 +131,6 @@ int ad7887_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7887_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index 5dded9e..28e9a41 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -141,8 +141,6 @@ int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
&ad799x_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index f730b3f..d0a60a3 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -116,8 +116,6 @@ int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_deallocate_sw_rb;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
/* Ring buffer functions - here trigger setup related */
indio_dev->setup_ops = &max1363_ring_setup_ops;
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index 699a615..711f151 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -115,8 +115,6 @@ int adis16260_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16260_ring_setup_ops;
diff --git a/drivers/staging/iio/iio_simple_dummy_buffer.c b/drivers/staging/iio/iio_simple_dummy_buffer.c
index d6a1c0e..bb4daf7 100644
--- a/drivers/staging/iio/iio_simple_dummy_buffer.c
+++ b/drivers/staging/iio/iio_simple_dummy_buffer.c
@@ -142,8 +142,6 @@ int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
}
indio_dev->buffer = buffer;
- /* Tell the core how to access the buffer */
- buffer->access = &kfifo_access_funcs;
/* Enable timestamps by default */
buffer->scan_timestamp = true;
diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
index f02d1c0..4138082 100644
--- a/drivers/staging/iio/impedance-analyzer/ad5933.c
+++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
@@ -607,9 +607,6 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
if (!indio_dev->buffer)
return -ENOMEM;
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
-
/* Ring buffer functions - here trigger setup related */
indio_dev->setup_ops = &ad5933_ring_setup_ops;
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index ac22de5..8daa038 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -187,8 +187,6 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16400_ring_setup_ops;
diff --git a/drivers/staging/iio/kfifo_buf.c b/drivers/staging/iio/kfifo_buf.c
index e1e9c06..9f3bd59 100644
--- a/drivers/staging/iio/kfifo_buf.c
+++ b/drivers/staging/iio/kfifo_buf.c
@@ -59,21 +59,6 @@ static struct attribute_group iio_kfifo_attribute_group = {
.name = "buffer",
};
-struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
-{
- struct iio_kfifo *kf;
-
- kf = kzalloc(sizeof *kf, GFP_KERNEL);
- if (!kf)
- return NULL;
- kf->update_needed = true;
- iio_buffer_init(&kf->buffer);
- kf->buffer.attrs = &iio_kfifo_attribute_group;
-
- return &kf->buffer;
-}
-EXPORT_SYMBOL(iio_kfifo_allocate);
-
static int iio_get_bytes_per_datum_kfifo(struct iio_buffer *r)
{
return r->bytes_per_datum;
@@ -104,12 +89,6 @@ static int iio_set_length_kfifo(struct iio_buffer *r, int length)
return 0;
}
-void iio_kfifo_free(struct iio_buffer *r)
-{
- kfree(iio_to_kfifo(r));
-}
-EXPORT_SYMBOL(iio_kfifo_free);
-
static int iio_store_to_kfifo(struct iio_buffer *r,
u8 *data,
s64 timestamp)
@@ -137,7 +116,7 @@ static int iio_read_first_n_kfifo(struct iio_buffer *r,
return copied;
}
-const struct iio_buffer_access_funcs kfifo_access_funcs = {
+static const struct iio_buffer_access_funcs kfifo_access_funcs = {
.store_to = &iio_store_to_kfifo,
.read_first_n = &iio_read_first_n_kfifo,
.request_update = &iio_request_update_kfifo,
@@ -146,6 +125,27 @@ const struct iio_buffer_access_funcs kfifo_access_funcs = {
.get_length = &iio_get_length_kfifo,
.set_length = &iio_set_length_kfifo,
};
-EXPORT_SYMBOL(kfifo_access_funcs);
+
+struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
+{
+ struct iio_kfifo *kf;
+
+ kf = kzalloc(sizeof *kf, GFP_KERNEL);
+ if (!kf)
+ return NULL;
+ kf->update_needed = true;
+ iio_buffer_init(&kf->buffer);
+ kf->buffer.attrs = &iio_kfifo_attribute_group;
+ kf->buffer.access = &kfifo_access_funcs;
+
+ return &kf->buffer;
+}
+EXPORT_SYMBOL(iio_kfifo_allocate);
+
+void iio_kfifo_free(struct iio_buffer *r)
+{
+ kfree(iio_to_kfifo(r));
+}
+EXPORT_SYMBOL(iio_kfifo_free);
MODULE_LICENSE("GPL");
diff --git a/drivers/staging/iio/kfifo_buf.h b/drivers/staging/iio/kfifo_buf.h
index cc2bd9a..9f7da01 100644
--- a/drivers/staging/iio/kfifo_buf.h
+++ b/drivers/staging/iio/kfifo_buf.h
@@ -3,8 +3,6 @@
#include "iio.h"
#include "buffer.h"
-extern const struct iio_buffer_access_funcs kfifo_access_funcs;
-
struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev);
void iio_kfifo_free(struct iio_buffer *r);
diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
index f29f2b2..c5c522b 100644
--- a/drivers/staging/iio/meter/ade7758_ring.c
+++ b/drivers/staging/iio/meter/ade7758_ring.c
@@ -144,8 +144,6 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
return ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &ade7758_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c
index 3e24ec4..94d77ce 100644
--- a/drivers/staging/iio/ring_sw.c
+++ b/drivers/staging/iio/ring_sw.c
@@ -329,6 +329,16 @@ static struct attribute_group iio_ring_attribute_group = {
.name = "buffer",
};
+static struct iio_buffer_access_funcs ring_sw_access_funcs = {
+ .store_to = &iio_store_to_sw_rb,
+ .read_first_n = &iio_read_first_n_sw_rb,
+ .request_update = &iio_request_update_sw_rb,
+ .get_bytes_per_datum = &iio_get_bytes_per_datum_sw_rb,
+ .set_bytes_per_datum = &iio_set_bytes_per_datum_sw_rb,
+ .get_length = &iio_get_length_sw_rb,
+ .set_length = &iio_set_length_sw_rb,
+};
+
struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev)
{
struct iio_buffer *buf;
@@ -341,6 +351,7 @@ struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev)
buf = &ring->buf;
iio_buffer_init(buf);
buf->attrs = &iio_ring_attribute_group;
+ buf->access = &ring_sw_access_funcs;
return buf;
}
@@ -352,16 +363,5 @@ void iio_sw_rb_free(struct iio_buffer *r)
}
EXPORT_SYMBOL(iio_sw_rb_free);
-const struct iio_buffer_access_funcs ring_sw_access_funcs = {
- .store_to = &iio_store_to_sw_rb,
- .read_first_n = &iio_read_first_n_sw_rb,
- .request_update = &iio_request_update_sw_rb,
- .get_bytes_per_datum = &iio_get_bytes_per_datum_sw_rb,
- .set_bytes_per_datum = &iio_set_bytes_per_datum_sw_rb,
- .get_length = &iio_get_length_sw_rb,
- .set_length = &iio_set_length_sw_rb,
-};
-EXPORT_SYMBOL(ring_sw_access_funcs);
-
MODULE_DESCRIPTION("Industrialio I/O software ring buffer");
MODULE_LICENSE("GPL");
diff --git a/drivers/staging/iio/ring_sw.h b/drivers/staging/iio/ring_sw.h
index e6a6e2c..7556e21 100644
--- a/drivers/staging/iio/ring_sw.h
+++ b/drivers/staging/iio/ring_sw.h
@@ -25,11 +25,6 @@
#define _IIO_RING_SW_H_
#include "buffer.h"
-/**
- * ring_sw_access_funcs - access functions for a software ring buffer
- **/
-extern const struct iio_buffer_access_funcs ring_sw_access_funcs;
-
struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev);
void iio_sw_rb_free(struct iio_buffer *ring);
#endif /* _IIO_RING_SW_H_ */
--
1.7.7.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
2011-12-28 11:32 [PATCH] staging:iio: Setup buffer access functions when allocating the buffer Lars-Peter Clausen
@ 2011-12-31 20:01 ` Jonathan Cameron
0 siblings, 0 replies; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-31 20:01 UTC (permalink / raw)
To: Lars-Peter Clausen; +Cc: Jonathan Cameron, linux-iio
On 12/28/2011 11:32 AM, Lars-Peter Clausen wrote:
> Setup the buffer access functions in the buffer allocate function. There is no
> need to let each driver handle this on its own.
>
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
There may be arguements against the general approach, but this
is still clearly a good cleanup patch, even if we change everything
at a later date!
Jonathan
>
> ---
> Jonathan, since there has been some discussion around this patch I would like
> you to confirm your Acked-by for this patch again, if you still think this
> patch is OK as is.
> ---
> drivers/staging/iio/accel/adis16201_ring.c | 2 -
> drivers/staging/iio/accel/adis16203_ring.c | 2 -
> drivers/staging/iio/accel/adis16204_ring.c | 2 -
> drivers/staging/iio/accel/adis16209_ring.c | 2 -
> drivers/staging/iio/accel/adis16240_ring.c | 2 -
> drivers/staging/iio/accel/lis3l02dq.h | 2 -
> drivers/staging/iio/accel/lis3l02dq_ring.c | 2 -
> drivers/staging/iio/adc/ad7192.c | 2 -
> drivers/staging/iio/adc/ad7298_ring.c | 3 -
> drivers/staging/iio/adc/ad7476_ring.c | 2 -
> drivers/staging/iio/adc/ad7606_ring.c | 2 -
> drivers/staging/iio/adc/ad7793.c | 2 -
> drivers/staging/iio/adc/ad7887_ring.c | 2 -
> drivers/staging/iio/adc/ad799x_ring.c | 2 -
> drivers/staging/iio/adc/max1363_ring.c | 2 -
> drivers/staging/iio/gyro/adis16260_ring.c | 2 -
> drivers/staging/iio/iio_simple_dummy_buffer.c | 2 -
> drivers/staging/iio/impedance-analyzer/ad5933.c | 3 -
> drivers/staging/iio/imu/adis16400_ring.c | 2 -
> drivers/staging/iio/kfifo_buf.c | 46 +++++++++++-----------
> drivers/staging/iio/kfifo_buf.h | 2 -
> drivers/staging/iio/meter/ade7758_ring.c | 2 -
> drivers/staging/iio/ring_sw.c | 22 +++++-----
> drivers/staging/iio/ring_sw.h | 5 --
> 24 files changed, 34 insertions(+), 83 deletions(-)
>
> diff --git a/drivers/staging/iio/accel/adis16201_ring.c b/drivers/staging/iio/accel/adis16201_ring.c
> index 26c610f..97f9e6b 100644
> --- a/drivers/staging/iio/accel/adis16201_ring.c
> +++ b/drivers/staging/iio/accel/adis16201_ring.c
> @@ -115,9 +115,7 @@ int adis16201_configure_ring(struct iio_dev *indio_dev)
> return ret;
> }
> indio_dev->buffer = ring;
> - /* Effectively select the ring buffer implementation */
> ring->scan_timestamp = true;
> - ring->access = &ring_sw_access_funcs;
> indio_dev->setup_ops = &adis16201_ring_setup_ops;
>
> indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
> diff --git a/drivers/staging/iio/accel/adis16203_ring.c b/drivers/staging/iio/accel/adis16203_ring.c
> index 064640d..6a8963d 100644
> --- a/drivers/staging/iio/accel/adis16203_ring.c
> +++ b/drivers/staging/iio/accel/adis16203_ring.c
> @@ -117,9 +117,7 @@ int adis16203_configure_ring(struct iio_dev *indio_dev)
> return ret;
> }
> indio_dev->buffer = ring;
> - /* Effectively select the ring buffer implementation */
> ring->scan_timestamp = true;
> - ring->access = &ring_sw_access_funcs;
> indio_dev->setup_ops = &adis16203_ring_setup_ops;
>
> indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
> diff --git a/drivers/staging/iio/accel/adis16204_ring.c b/drivers/staging/iio/accel/adis16204_ring.c
> index 4081179..5c8ab73 100644
> --- a/drivers/staging/iio/accel/adis16204_ring.c
> +++ b/drivers/staging/iio/accel/adis16204_ring.c
> @@ -112,8 +112,6 @@ int adis16204_configure_ring(struct iio_dev *indio_dev)
> return ret;
> }
> indio_dev->buffer = ring;
> - /* Effectively select the ring buffer implementation */
> - ring->access = &ring_sw_access_funcs;
> ring->scan_timestamp = true;
> indio_dev->setup_ops = &adis16204_ring_setup_ops;
>
> diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
> index 2a6fd334..57254b6 100644
> --- a/drivers/staging/iio/accel/adis16209_ring.c
> +++ b/drivers/staging/iio/accel/adis16209_ring.c
> @@ -113,8 +113,6 @@ int adis16209_configure_ring(struct iio_dev *indio_dev)
> return ret;
> }
> indio_dev->buffer = ring;
> - /* Effectively select the ring buffer implementation */
> - ring->access = &ring_sw_access_funcs;
> ring->scan_timestamp = true;
> indio_dev->setup_ops = &adis16209_ring_setup_ops;
>
> diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
> index e23622d..43ba84e 100644
> --- a/drivers/staging/iio/accel/adis16240_ring.c
> +++ b/drivers/staging/iio/accel/adis16240_ring.c
> @@ -110,8 +110,6 @@ int adis16240_configure_ring(struct iio_dev *indio_dev)
> return ret;
> }
> indio_dev->buffer = ring;
> - /* Effectively select the ring buffer implementation */
> - ring->access = &ring_sw_access_funcs;
> ring->scan_timestamp = true;
> indio_dev->setup_ops = &adis16240_ring_setup_ops;
>
> diff --git a/drivers/staging/iio/accel/lis3l02dq.h b/drivers/staging/iio/accel/lis3l02dq.h
> index 2db383f..ae5f225 100644
> --- a/drivers/staging/iio/accel/lis3l02dq.h
> +++ b/drivers/staging/iio/accel/lis3l02dq.h
> @@ -187,12 +187,10 @@ void lis3l02dq_unconfigure_buffer(struct iio_dev *indio_dev);
> #ifdef CONFIG_LIS3L02DQ_BUF_RING_SW
> #define lis3l02dq_free_buf iio_sw_rb_free
> #define lis3l02dq_alloc_buf iio_sw_rb_allocate
> -#define lis3l02dq_access_funcs ring_sw_access_funcs
> #endif
> #ifdef CONFIG_LIS3L02DQ_BUF_KFIFO
> #define lis3l02dq_free_buf iio_kfifo_free
> #define lis3l02dq_alloc_buf iio_kfifo_allocate
> -#define lis3l02dq_access_funcs kfifo_access_funcs
> #endif
> irqreturn_t lis3l02dq_data_rdy_trig_poll(int irq, void *private);
> #define lis3l02dq_th lis3l02dq_data_rdy_trig_poll
> diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
> index 98c5c92..ca0a1fe 100644
> --- a/drivers/staging/iio/accel/lis3l02dq_ring.c
> +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
> @@ -406,8 +406,6 @@ int lis3l02dq_configure_buffer(struct iio_dev *indio_dev)
> return -ENOMEM;
>
> indio_dev->buffer = buffer;
> - /* Effectively select the buffer implementation */
> - indio_dev->buffer->access = &lis3l02dq_access_funcs;
>
> buffer->scan_timestamp = true;
> indio_dev->setup_ops = &lis3l02dq_buffer_setup_ops;
> diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
> index dfeb4ba..654f7fb 100644
> --- a/drivers/staging/iio/adc/ad7192.c
> +++ b/drivers/staging/iio/adc/ad7192.c
> @@ -561,8 +561,6 @@ static int ad7192_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> ret = -ENOMEM;
> goto error_ret;
> }
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
> &ad7192_trigger_handler,
> IRQF_ONESHOT,
> diff --git a/drivers/staging/iio/adc/ad7298_ring.c b/drivers/staging/iio/adc/ad7298_ring.c
> index d1a12dd..feeb0ee 100644
> --- a/drivers/staging/iio/adc/ad7298_ring.c
> +++ b/drivers/staging/iio/adc/ad7298_ring.c
> @@ -131,9 +131,6 @@ int ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> ret = -ENOMEM;
> goto error_ret;
> }
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> -
> indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
> &ad7298_trigger_handler,
> IRQF_ONESHOT,
> diff --git a/drivers/staging/iio/adc/ad7476_ring.c b/drivers/staging/iio/adc/ad7476_ring.c
> index 4e298b2..35a8576 100644
> --- a/drivers/staging/iio/adc/ad7476_ring.c
> +++ b/drivers/staging/iio/adc/ad7476_ring.c
> @@ -98,8 +98,6 @@ int ad7476_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> ret = -ENOMEM;
> goto error_ret;
> }
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> indio_dev->pollfunc
> = iio_alloc_pollfunc(NULL,
> &ad7476_trigger_handler,
> diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c
> index e8f94a1..1ef9fbc 100644
> --- a/drivers/staging/iio/adc/ad7606_ring.c
> +++ b/drivers/staging/iio/adc/ad7606_ring.c
> @@ -110,8 +110,6 @@ int ad7606_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> goto error_ret;
> }
>
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> indio_dev->pollfunc = iio_alloc_pollfunc(&ad7606_trigger_handler_th_bh,
> &ad7606_trigger_handler_th_bh,
> 0,
> diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
> index accf325..fc9ebf1 100644
> --- a/drivers/staging/iio/adc/ad7793.c
> +++ b/drivers/staging/iio/adc/ad7793.c
> @@ -427,8 +427,6 @@ static int ad7793_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> ret = -ENOMEM;
> goto error_ret;
> }
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
> &ad7793_trigger_handler,
> IRQF_ONESHOT,
> diff --git a/drivers/staging/iio/adc/ad7887_ring.c b/drivers/staging/iio/adc/ad7887_ring.c
> index 85076cd..d180907 100644
> --- a/drivers/staging/iio/adc/ad7887_ring.c
> +++ b/drivers/staging/iio/adc/ad7887_ring.c
> @@ -131,8 +131,6 @@ int ad7887_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> ret = -ENOMEM;
> goto error_ret;
> }
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
> &ad7887_trigger_handler,
> IRQF_ONESHOT,
> diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
> index 5dded9e..28e9a41 100644
> --- a/drivers/staging/iio/adc/ad799x_ring.c
> +++ b/drivers/staging/iio/adc/ad799x_ring.c
> @@ -141,8 +141,6 @@ int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> ret = -ENOMEM;
> goto error_ret;
> }
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
> &ad799x_trigger_handler,
> IRQF_ONESHOT,
> diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
> index f730b3f..d0a60a3 100644
> --- a/drivers/staging/iio/adc/max1363_ring.c
> +++ b/drivers/staging/iio/adc/max1363_ring.c
> @@ -116,8 +116,6 @@ int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> ret = -ENOMEM;
> goto error_deallocate_sw_rb;
> }
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> /* Ring buffer functions - here trigger setup related */
> indio_dev->setup_ops = &max1363_ring_setup_ops;
>
> diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
> index 699a615..711f151 100644
> --- a/drivers/staging/iio/gyro/adis16260_ring.c
> +++ b/drivers/staging/iio/gyro/adis16260_ring.c
> @@ -115,8 +115,6 @@ int adis16260_configure_ring(struct iio_dev *indio_dev)
> return ret;
> }
> indio_dev->buffer = ring;
> - /* Effectively select the ring buffer implementation */
> - ring->access = &ring_sw_access_funcs;
> ring->scan_timestamp = true;
> indio_dev->setup_ops = &adis16260_ring_setup_ops;
>
> diff --git a/drivers/staging/iio/iio_simple_dummy_buffer.c b/drivers/staging/iio/iio_simple_dummy_buffer.c
> index d6a1c0e..bb4daf7 100644
> --- a/drivers/staging/iio/iio_simple_dummy_buffer.c
> +++ b/drivers/staging/iio/iio_simple_dummy_buffer.c
> @@ -142,8 +142,6 @@ int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
> }
>
> indio_dev->buffer = buffer;
> - /* Tell the core how to access the buffer */
> - buffer->access = &kfifo_access_funcs;
>
> /* Enable timestamps by default */
> buffer->scan_timestamp = true;
> diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
> index f02d1c0..4138082 100644
> --- a/drivers/staging/iio/impedance-analyzer/ad5933.c
> +++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
> @@ -607,9 +607,6 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
> if (!indio_dev->buffer)
> return -ENOMEM;
>
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> -
> /* Ring buffer functions - here trigger setup related */
> indio_dev->setup_ops = &ad5933_ring_setup_ops;
>
> diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
> index ac22de5..8daa038 100644
> --- a/drivers/staging/iio/imu/adis16400_ring.c
> +++ b/drivers/staging/iio/imu/adis16400_ring.c
> @@ -187,8 +187,6 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
> return ret;
> }
> indio_dev->buffer = ring;
> - /* Effectively select the ring buffer implementation */
> - ring->access = &ring_sw_access_funcs;
> ring->scan_timestamp = true;
> indio_dev->setup_ops = &adis16400_ring_setup_ops;
>
> diff --git a/drivers/staging/iio/kfifo_buf.c b/drivers/staging/iio/kfifo_buf.c
> index e1e9c06..9f3bd59 100644
> --- a/drivers/staging/iio/kfifo_buf.c
> +++ b/drivers/staging/iio/kfifo_buf.c
> @@ -59,21 +59,6 @@ static struct attribute_group iio_kfifo_attribute_group = {
> .name = "buffer",
> };
>
> -struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
> -{
> - struct iio_kfifo *kf;
> -
> - kf = kzalloc(sizeof *kf, GFP_KERNEL);
> - if (!kf)
> - return NULL;
> - kf->update_needed = true;
> - iio_buffer_init(&kf->buffer);
> - kf->buffer.attrs = &iio_kfifo_attribute_group;
> -
> - return &kf->buffer;
> -}
> -EXPORT_SYMBOL(iio_kfifo_allocate);
> -
> static int iio_get_bytes_per_datum_kfifo(struct iio_buffer *r)
> {
> return r->bytes_per_datum;
> @@ -104,12 +89,6 @@ static int iio_set_length_kfifo(struct iio_buffer *r, int length)
> return 0;
> }
>
> -void iio_kfifo_free(struct iio_buffer *r)
> -{
> - kfree(iio_to_kfifo(r));
> -}
> -EXPORT_SYMBOL(iio_kfifo_free);
> -
> static int iio_store_to_kfifo(struct iio_buffer *r,
> u8 *data,
> s64 timestamp)
> @@ -137,7 +116,7 @@ static int iio_read_first_n_kfifo(struct iio_buffer *r,
> return copied;
> }
>
> -const struct iio_buffer_access_funcs kfifo_access_funcs = {
> +static const struct iio_buffer_access_funcs kfifo_access_funcs = {
> .store_to = &iio_store_to_kfifo,
> .read_first_n = &iio_read_first_n_kfifo,
> .request_update = &iio_request_update_kfifo,
> @@ -146,6 +125,27 @@ const struct iio_buffer_access_funcs kfifo_access_funcs = {
> .get_length = &iio_get_length_kfifo,
> .set_length = &iio_set_length_kfifo,
> };
> -EXPORT_SYMBOL(kfifo_access_funcs);
> +
> +struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
> +{
> + struct iio_kfifo *kf;
> +
> + kf = kzalloc(sizeof *kf, GFP_KERNEL);
> + if (!kf)
> + return NULL;
> + kf->update_needed = true;
> + iio_buffer_init(&kf->buffer);
> + kf->buffer.attrs = &iio_kfifo_attribute_group;
> + kf->buffer.access = &kfifo_access_funcs;
> +
> + return &kf->buffer;
> +}
> +EXPORT_SYMBOL(iio_kfifo_allocate);
> +
> +void iio_kfifo_free(struct iio_buffer *r)
> +{
> + kfree(iio_to_kfifo(r));
> +}
> +EXPORT_SYMBOL(iio_kfifo_free);
>
> MODULE_LICENSE("GPL");
> diff --git a/drivers/staging/iio/kfifo_buf.h b/drivers/staging/iio/kfifo_buf.h
> index cc2bd9a..9f7da01 100644
> --- a/drivers/staging/iio/kfifo_buf.h
> +++ b/drivers/staging/iio/kfifo_buf.h
> @@ -3,8 +3,6 @@
> #include "iio.h"
> #include "buffer.h"
>
> -extern const struct iio_buffer_access_funcs kfifo_access_funcs;
> -
> struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev);
> void iio_kfifo_free(struct iio_buffer *r);
>
> diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
> index f29f2b2..c5c522b 100644
> --- a/drivers/staging/iio/meter/ade7758_ring.c
> +++ b/drivers/staging/iio/meter/ade7758_ring.c
> @@ -144,8 +144,6 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
> return ret;
> }
>
> - /* Effectively select the ring buffer implementation */
> - indio_dev->buffer->access = &ring_sw_access_funcs;
> indio_dev->setup_ops = &ade7758_ring_setup_ops;
>
> indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
> diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c
> index 3e24ec4..94d77ce 100644
> --- a/drivers/staging/iio/ring_sw.c
> +++ b/drivers/staging/iio/ring_sw.c
> @@ -329,6 +329,16 @@ static struct attribute_group iio_ring_attribute_group = {
> .name = "buffer",
> };
>
> +static struct iio_buffer_access_funcs ring_sw_access_funcs = {
> + .store_to = &iio_store_to_sw_rb,
> + .read_first_n = &iio_read_first_n_sw_rb,
> + .request_update = &iio_request_update_sw_rb,
> + .get_bytes_per_datum = &iio_get_bytes_per_datum_sw_rb,
> + .set_bytes_per_datum = &iio_set_bytes_per_datum_sw_rb,
> + .get_length = &iio_get_length_sw_rb,
> + .set_length = &iio_set_length_sw_rb,
> +};
> +
> struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev)
> {
> struct iio_buffer *buf;
> @@ -341,6 +351,7 @@ struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev)
> buf = &ring->buf;
> iio_buffer_init(buf);
> buf->attrs = &iio_ring_attribute_group;
> + buf->access = &ring_sw_access_funcs;
>
> return buf;
> }
> @@ -352,16 +363,5 @@ void iio_sw_rb_free(struct iio_buffer *r)
> }
> EXPORT_SYMBOL(iio_sw_rb_free);
>
> -const struct iio_buffer_access_funcs ring_sw_access_funcs = {
> - .store_to = &iio_store_to_sw_rb,
> - .read_first_n = &iio_read_first_n_sw_rb,
> - .request_update = &iio_request_update_sw_rb,
> - .get_bytes_per_datum = &iio_get_bytes_per_datum_sw_rb,
> - .set_bytes_per_datum = &iio_set_bytes_per_datum_sw_rb,
> - .get_length = &iio_get_length_sw_rb,
> - .set_length = &iio_set_length_sw_rb,
> -};
> -EXPORT_SYMBOL(ring_sw_access_funcs);
> -
> MODULE_DESCRIPTION("Industrialio I/O software ring buffer");
> MODULE_LICENSE("GPL");
> diff --git a/drivers/staging/iio/ring_sw.h b/drivers/staging/iio/ring_sw.h
> index e6a6e2c..7556e21 100644
> --- a/drivers/staging/iio/ring_sw.h
> +++ b/drivers/staging/iio/ring_sw.h
> @@ -25,11 +25,6 @@
> #define _IIO_RING_SW_H_
> #include "buffer.h"
>
> -/**
> - * ring_sw_access_funcs - access functions for a software ring buffer
> - **/
> -extern const struct iio_buffer_access_funcs ring_sw_access_funcs;
> -
> struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev);
> void iio_sw_rb_free(struct iio_buffer *ring);
> #endif /* _IIO_RING_SW_H_ */
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] staging:iio: Setup buffer access functions when allocating the buffer
@ 2012-01-03 10:02 Lars-Peter Clausen
0 siblings, 0 replies; 12+ messages in thread
From: Lars-Peter Clausen @ 2012-01-03 10:02 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: Jonathan Cameron, devel, linux-iio, Lars-Peter Clausen
Setup the buffer access functions in the buffer allocate function. There is no
need to let each driver handle this on its own.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
---
drivers/staging/iio/accel/adis16201_ring.c | 2 -
drivers/staging/iio/accel/adis16203_ring.c | 2 -
drivers/staging/iio/accel/adis16204_ring.c | 2 -
drivers/staging/iio/accel/adis16209_ring.c | 2 -
drivers/staging/iio/accel/adis16240_ring.c | 2 -
drivers/staging/iio/accel/lis3l02dq.h | 2 -
drivers/staging/iio/accel/lis3l02dq_ring.c | 2 -
drivers/staging/iio/adc/ad7192.c | 2 -
drivers/staging/iio/adc/ad7298_ring.c | 3 -
drivers/staging/iio/adc/ad7476_ring.c | 2 -
drivers/staging/iio/adc/ad7606_ring.c | 2 -
drivers/staging/iio/adc/ad7793.c | 2 -
drivers/staging/iio/adc/ad7887_ring.c | 2 -
drivers/staging/iio/adc/ad799x_ring.c | 2 -
drivers/staging/iio/adc/max1363_ring.c | 2 -
drivers/staging/iio/gyro/adis16260_ring.c | 2 -
drivers/staging/iio/iio_simple_dummy_buffer.c | 2 -
drivers/staging/iio/impedance-analyzer/ad5933.c | 3 -
drivers/staging/iio/imu/adis16400_ring.c | 2 -
drivers/staging/iio/kfifo_buf.c | 46 +++++++++++-----------
drivers/staging/iio/kfifo_buf.h | 2 -
drivers/staging/iio/meter/ade7758_ring.c | 2 -
drivers/staging/iio/ring_sw.c | 22 +++++-----
drivers/staging/iio/ring_sw.h | 5 --
24 files changed, 34 insertions(+), 83 deletions(-)
diff --git a/drivers/staging/iio/accel/adis16201_ring.c b/drivers/staging/iio/accel/adis16201_ring.c
index 26c610f..97f9e6b 100644
--- a/drivers/staging/iio/accel/adis16201_ring.c
+++ b/drivers/staging/iio/accel/adis16201_ring.c
@@ -115,9 +115,7 @@ int adis16201_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
ring->scan_timestamp = true;
- ring->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &adis16201_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/accel/adis16203_ring.c b/drivers/staging/iio/accel/adis16203_ring.c
index 064640d..6a8963d 100644
--- a/drivers/staging/iio/accel/adis16203_ring.c
+++ b/drivers/staging/iio/accel/adis16203_ring.c
@@ -117,9 +117,7 @@ int adis16203_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
ring->scan_timestamp = true;
- ring->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &adis16203_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/accel/adis16204_ring.c b/drivers/staging/iio/accel/adis16204_ring.c
index 4081179..5c8ab73 100644
--- a/drivers/staging/iio/accel/adis16204_ring.c
+++ b/drivers/staging/iio/accel/adis16204_ring.c
@@ -112,8 +112,6 @@ int adis16204_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16204_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index 2a6fd334..57254b6 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -113,8 +113,6 @@ int adis16209_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16209_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index e23622d..43ba84e 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -110,8 +110,6 @@ int adis16240_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16240_ring_setup_ops;
diff --git a/drivers/staging/iio/accel/lis3l02dq.h b/drivers/staging/iio/accel/lis3l02dq.h
index 2db383f..ae5f225 100644
--- a/drivers/staging/iio/accel/lis3l02dq.h
+++ b/drivers/staging/iio/accel/lis3l02dq.h
@@ -187,12 +187,10 @@ void lis3l02dq_unconfigure_buffer(struct iio_dev *indio_dev);
#ifdef CONFIG_LIS3L02DQ_BUF_RING_SW
#define lis3l02dq_free_buf iio_sw_rb_free
#define lis3l02dq_alloc_buf iio_sw_rb_allocate
-#define lis3l02dq_access_funcs ring_sw_access_funcs
#endif
#ifdef CONFIG_LIS3L02DQ_BUF_KFIFO
#define lis3l02dq_free_buf iio_kfifo_free
#define lis3l02dq_alloc_buf iio_kfifo_allocate
-#define lis3l02dq_access_funcs kfifo_access_funcs
#endif
irqreturn_t lis3l02dq_data_rdy_trig_poll(int irq, void *private);
#define lis3l02dq_th lis3l02dq_data_rdy_trig_poll
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 98c5c92..ca0a1fe 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -406,8 +406,6 @@ int lis3l02dq_configure_buffer(struct iio_dev *indio_dev)
return -ENOMEM;
indio_dev->buffer = buffer;
- /* Effectively select the buffer implementation */
- indio_dev->buffer->access = &lis3l02dq_access_funcs;
buffer->scan_timestamp = true;
indio_dev->setup_ops = &lis3l02dq_buffer_setup_ops;
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index dfeb4ba..654f7fb 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -561,8 +561,6 @@ static int ad7192_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7192_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7298_ring.c b/drivers/staging/iio/adc/ad7298_ring.c
index d1a12dd..feeb0ee 100644
--- a/drivers/staging/iio/adc/ad7298_ring.c
+++ b/drivers/staging/iio/adc/ad7298_ring.c
@@ -131,9 +131,6 @@ int ad7298_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
-
indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
&ad7298_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7476_ring.c b/drivers/staging/iio/adc/ad7476_ring.c
index 4e298b2..35a8576 100644
--- a/drivers/staging/iio/adc/ad7476_ring.c
+++ b/drivers/staging/iio/adc/ad7476_ring.c
@@ -98,8 +98,6 @@ int ad7476_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc
= iio_alloc_pollfunc(NULL,
&ad7476_trigger_handler,
diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c
index e8f94a1..1ef9fbc 100644
--- a/drivers/staging/iio/adc/ad7606_ring.c
+++ b/drivers/staging/iio/adc/ad7606_ring.c
@@ -110,8 +110,6 @@ int ad7606_register_ring_funcs_and_init(struct iio_dev *indio_dev)
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&ad7606_trigger_handler_th_bh,
&ad7606_trigger_handler_th_bh,
0,
diff --git a/drivers/staging/iio/adc/ad7793.c b/drivers/staging/iio/adc/ad7793.c
index accf325..fc9ebf1 100644
--- a/drivers/staging/iio/adc/ad7793.c
+++ b/drivers/staging/iio/adc/ad7793.c
@@ -427,8 +427,6 @@ static int ad7793_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7793_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad7887_ring.c b/drivers/staging/iio/adc/ad7887_ring.c
index 85076cd..d180907 100644
--- a/drivers/staging/iio/adc/ad7887_ring.c
+++ b/drivers/staging/iio/adc/ad7887_ring.c
@@ -131,8 +131,6 @@ int ad7887_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&ad7887_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/ad799x_ring.c b/drivers/staging/iio/adc/ad799x_ring.c
index 5dded9e..28e9a41 100644
--- a/drivers/staging/iio/adc/ad799x_ring.c
+++ b/drivers/staging/iio/adc/ad799x_ring.c
@@ -141,8 +141,6 @@ int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->pollfunc = iio_alloc_pollfunc(NULL,
&ad799x_trigger_handler,
IRQF_ONESHOT,
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index f730b3f..d0a60a3 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -116,8 +116,6 @@ int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev)
ret = -ENOMEM;
goto error_deallocate_sw_rb;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
/* Ring buffer functions - here trigger setup related */
indio_dev->setup_ops = &max1363_ring_setup_ops;
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index 699a615..711f151 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -115,8 +115,6 @@ int adis16260_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16260_ring_setup_ops;
diff --git a/drivers/staging/iio/iio_simple_dummy_buffer.c b/drivers/staging/iio/iio_simple_dummy_buffer.c
index d6a1c0e..bb4daf7 100644
--- a/drivers/staging/iio/iio_simple_dummy_buffer.c
+++ b/drivers/staging/iio/iio_simple_dummy_buffer.c
@@ -142,8 +142,6 @@ int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
}
indio_dev->buffer = buffer;
- /* Tell the core how to access the buffer */
- buffer->access = &kfifo_access_funcs;
/* Enable timestamps by default */
buffer->scan_timestamp = true;
diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
index f02d1c0..4138082 100644
--- a/drivers/staging/iio/impedance-analyzer/ad5933.c
+++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
@@ -607,9 +607,6 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
if (!indio_dev->buffer)
return -ENOMEM;
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
-
/* Ring buffer functions - here trigger setup related */
indio_dev->setup_ops = &ad5933_ring_setup_ops;
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index ac22de5..8daa038 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -187,8 +187,6 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
return ret;
}
indio_dev->buffer = ring;
- /* Effectively select the ring buffer implementation */
- ring->access = &ring_sw_access_funcs;
ring->scan_timestamp = true;
indio_dev->setup_ops = &adis16400_ring_setup_ops;
diff --git a/drivers/staging/iio/kfifo_buf.c b/drivers/staging/iio/kfifo_buf.c
index e1e9c06..9f3bd59 100644
--- a/drivers/staging/iio/kfifo_buf.c
+++ b/drivers/staging/iio/kfifo_buf.c
@@ -59,21 +59,6 @@ static struct attribute_group iio_kfifo_attribute_group = {
.name = "buffer",
};
-struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
-{
- struct iio_kfifo *kf;
-
- kf = kzalloc(sizeof *kf, GFP_KERNEL);
- if (!kf)
- return NULL;
- kf->update_needed = true;
- iio_buffer_init(&kf->buffer);
- kf->buffer.attrs = &iio_kfifo_attribute_group;
-
- return &kf->buffer;
-}
-EXPORT_SYMBOL(iio_kfifo_allocate);
-
static int iio_get_bytes_per_datum_kfifo(struct iio_buffer *r)
{
return r->bytes_per_datum;
@@ -104,12 +89,6 @@ static int iio_set_length_kfifo(struct iio_buffer *r, int length)
return 0;
}
-void iio_kfifo_free(struct iio_buffer *r)
-{
- kfree(iio_to_kfifo(r));
-}
-EXPORT_SYMBOL(iio_kfifo_free);
-
static int iio_store_to_kfifo(struct iio_buffer *r,
u8 *data,
s64 timestamp)
@@ -137,7 +116,7 @@ static int iio_read_first_n_kfifo(struct iio_buffer *r,
return copied;
}
-const struct iio_buffer_access_funcs kfifo_access_funcs = {
+static const struct iio_buffer_access_funcs kfifo_access_funcs = {
.store_to = &iio_store_to_kfifo,
.read_first_n = &iio_read_first_n_kfifo,
.request_update = &iio_request_update_kfifo,
@@ -146,6 +125,27 @@ const struct iio_buffer_access_funcs kfifo_access_funcs = {
.get_length = &iio_get_length_kfifo,
.set_length = &iio_set_length_kfifo,
};
-EXPORT_SYMBOL(kfifo_access_funcs);
+
+struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev)
+{
+ struct iio_kfifo *kf;
+
+ kf = kzalloc(sizeof *kf, GFP_KERNEL);
+ if (!kf)
+ return NULL;
+ kf->update_needed = true;
+ iio_buffer_init(&kf->buffer);
+ kf->buffer.attrs = &iio_kfifo_attribute_group;
+ kf->buffer.access = &kfifo_access_funcs;
+
+ return &kf->buffer;
+}
+EXPORT_SYMBOL(iio_kfifo_allocate);
+
+void iio_kfifo_free(struct iio_buffer *r)
+{
+ kfree(iio_to_kfifo(r));
+}
+EXPORT_SYMBOL(iio_kfifo_free);
MODULE_LICENSE("GPL");
diff --git a/drivers/staging/iio/kfifo_buf.h b/drivers/staging/iio/kfifo_buf.h
index cc2bd9a..9f7da01 100644
--- a/drivers/staging/iio/kfifo_buf.h
+++ b/drivers/staging/iio/kfifo_buf.h
@@ -3,8 +3,6 @@
#include "iio.h"
#include "buffer.h"
-extern const struct iio_buffer_access_funcs kfifo_access_funcs;
-
struct iio_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev);
void iio_kfifo_free(struct iio_buffer *r);
diff --git a/drivers/staging/iio/meter/ade7758_ring.c b/drivers/staging/iio/meter/ade7758_ring.c
index f29f2b2..c5c522b 100644
--- a/drivers/staging/iio/meter/ade7758_ring.c
+++ b/drivers/staging/iio/meter/ade7758_ring.c
@@ -144,8 +144,6 @@ int ade7758_configure_ring(struct iio_dev *indio_dev)
return ret;
}
- /* Effectively select the ring buffer implementation */
- indio_dev->buffer->access = &ring_sw_access_funcs;
indio_dev->setup_ops = &ade7758_ring_setup_ops;
indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c
index 3e24ec4..eeac0da 100644
--- a/drivers/staging/iio/ring_sw.c
+++ b/drivers/staging/iio/ring_sw.c
@@ -329,6 +329,16 @@ static struct attribute_group iio_ring_attribute_group = {
.name = "buffer",
};
+static const struct iio_buffer_access_funcs ring_sw_access_funcs = {
+ .store_to = &iio_store_to_sw_rb,
+ .read_first_n = &iio_read_first_n_sw_rb,
+ .request_update = &iio_request_update_sw_rb,
+ .get_bytes_per_datum = &iio_get_bytes_per_datum_sw_rb,
+ .set_bytes_per_datum = &iio_set_bytes_per_datum_sw_rb,
+ .get_length = &iio_get_length_sw_rb,
+ .set_length = &iio_set_length_sw_rb,
+};
+
struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev)
{
struct iio_buffer *buf;
@@ -341,6 +351,7 @@ struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev)
buf = &ring->buf;
iio_buffer_init(buf);
buf->attrs = &iio_ring_attribute_group;
+ buf->access = &ring_sw_access_funcs;
return buf;
}
@@ -352,16 +363,5 @@ void iio_sw_rb_free(struct iio_buffer *r)
}
EXPORT_SYMBOL(iio_sw_rb_free);
-const struct iio_buffer_access_funcs ring_sw_access_funcs = {
- .store_to = &iio_store_to_sw_rb,
- .read_first_n = &iio_read_first_n_sw_rb,
- .request_update = &iio_request_update_sw_rb,
- .get_bytes_per_datum = &iio_get_bytes_per_datum_sw_rb,
- .set_bytes_per_datum = &iio_set_bytes_per_datum_sw_rb,
- .get_length = &iio_get_length_sw_rb,
- .set_length = &iio_set_length_sw_rb,
-};
-EXPORT_SYMBOL(ring_sw_access_funcs);
-
MODULE_DESCRIPTION("Industrialio I/O software ring buffer");
MODULE_LICENSE("GPL");
diff --git a/drivers/staging/iio/ring_sw.h b/drivers/staging/iio/ring_sw.h
index e6a6e2c..7556e21 100644
--- a/drivers/staging/iio/ring_sw.h
+++ b/drivers/staging/iio/ring_sw.h
@@ -25,11 +25,6 @@
#define _IIO_RING_SW_H_
#include "buffer.h"
-/**
- * ring_sw_access_funcs - access functions for a software ring buffer
- **/
-extern const struct iio_buffer_access_funcs ring_sw_access_funcs;
-
struct iio_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev);
void iio_sw_rb_free(struct iio_buffer *ring);
#endif /* _IIO_RING_SW_H_ */
--
1.7.7.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2012-01-03 10:02 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-28 11:32 [PATCH] staging:iio: Setup buffer access functions when allocating the buffer Lars-Peter Clausen
2011-12-31 20:01 ` Jonathan Cameron
-- strict thread matches above, loose matches on Subject: below --
2012-01-03 10:02 Lars-Peter Clausen
2011-12-12 10:09 Lars-Peter Clausen
2011-12-13 0:46 ` Greg KH
2011-12-13 7:23 ` Jonathan Cameron
2011-12-13 7:38 ` Greg KH
2011-12-13 8:48 ` J.I. Cameron
2011-12-14 0:00 ` Greg KH
2011-12-14 7:21 ` Jonathan Cameron
2011-12-13 9:08 ` Lars-Peter Clausen
2011-12-13 0:52 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).