* [PATCH 0/6] Various cleanups.
@ 2010-06-25 15:55 Jonathan Cameron
2010-06-25 15:55 ` [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name Jonathan Cameron
2010-06-28 8:16 ` [PATCH 0/6] Various cleanups Barry Song
0 siblings, 2 replies; 15+ messages in thread
From: Jonathan Cameron @ 2010-06-25 15:55 UTC (permalink / raw)
To: linux-iio; +Cc: Barry.Song, Jonathan Cameron
This patch set is the result of taking a look at Barry Song's
RFC. The idea was to get the simple uncontroversial elements
of that in place before we move on to discussion of the more
involved elements.
One or two general cleanups have slipped in here as well.
Jonathan Cameron (6):
staging:iio: Use kasprintf to allocate and fill trig->name
staging:iio:lis3l02dq remove unused set_ring_length function
staging:iio: Add and convert drivers to use iio_alloc_pollfunc
staging:iio: Add iio_triggered_ring postenable and predisable + use
in drivers
staging:iio: remove timestamp field from trigger and pass instead
through pollfuncs
staging:iio: replace combine_8_to_16 with be16_to_cpup where
possible.
drivers/staging/iio/accel/adis16209_ring.c | 51 ++++---------------
drivers/staging/iio/accel/adis16209_trigger.c | 10 ++--
drivers/staging/iio/accel/adis16240_ring.c | 51 ++++---------------
drivers/staging/iio/accel/adis16240_trigger.c | 10 ++--
drivers/staging/iio/accel/lis3l02dq_ring.c | 53 +++++---------------
drivers/staging/iio/adc/max1363_ring.c | 45 ++---------------
drivers/staging/iio/gyro/adis16260_ring.c | 51 ++++---------------
drivers/staging/iio/gyro/adis16260_trigger.c | 10 ++--
drivers/staging/iio/imu/adis16300_ring.c | 51 ++++---------------
drivers/staging/iio/imu/adis16300_trigger.c | 10 ++--
drivers/staging/iio/imu/adis16350_ring.c | 51 ++++---------------
drivers/staging/iio/imu/adis16350_trigger.c | 10 ++--
drivers/staging/iio/imu/adis16400_ring.c | 51 ++++---------------
drivers/staging/iio/imu/adis16400_trigger.c | 10 ++--
drivers/staging/iio/industrialio-trigger.c | 48 ++++++++++++++----
drivers/staging/iio/trigger.h | 24 ++++++---
drivers/staging/iio/trigger/iio-trig-gpio.c | 12 ++---
.../staging/iio/trigger/iio-trig-periodic-rtc.c | 15 ++----
18 files changed, 164 insertions(+), 399 deletions(-)
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name
2010-06-25 15:55 [PATCH 0/6] Various cleanups Jonathan Cameron
@ 2010-06-25 15:55 ` Jonathan Cameron
2010-06-25 15:55 ` [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function Jonathan Cameron
2010-06-29 10:18 ` [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name Barry Song
2010-06-28 8:16 ` [PATCH 0/6] Various cleanups Barry Song
1 sibling, 2 replies; 15+ messages in thread
From: Jonathan Cameron @ 2010-06-25 15:55 UTC (permalink / raw)
To: linux-iio; +Cc: Barry.Song, Jonathan Cameron
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
Trigger names were allocated then filled. kasprintf does thins
in one go and removes unnecessary restriction on name length.
drivers/staging/iio/accel/adis16209_trigger.c | 7 +++----
drivers/staging/iio/accel/adis16240_trigger.c | 7 +++----
drivers/staging/iio/accel/lis3l02dq_ring.c | 8 ++++----
drivers/staging/iio/gyro/adis16260_trigger.c | 7 +++----
drivers/staging/iio/imu/adis16300_trigger.c | 7 +++----
drivers/staging/iio/imu/adis16350_trigger.c | 7 +++----
drivers/staging/iio/imu/adis16400_trigger.c | 7 +++----
drivers/staging/iio/industrialio-trigger.c | 9 +++------
drivers/staging/iio/trigger.h | 4 ----
drivers/staging/iio/trigger/iio-trig-gpio.c | 9 ++-------
.../staging/iio/trigger/iio-trig-periodic-rtc.c | 12 +++---------
11 files changed, 30 insertions(+), 54 deletions(-)
diff --git a/drivers/staging/iio/accel/adis16209_trigger.c b/drivers/staging/iio/accel/adis16209_trigger.c
index 4a0507c..cd901a4 100644
--- a/drivers/staging/iio/accel/adis16209_trigger.c
+++ b/drivers/staging/iio/accel/adis16209_trigger.c
@@ -83,14 +83,13 @@ int adis16209_probe_trigger(struct iio_dev *indio_dev)
struct adis16209_state *st = indio_dev->dev_data;
st->trig = iio_allocate_trigger();
- st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
+ st->trig->name = kasprintf(GFP_KERNEL,
+ "adis16209-dev%d",
+ indio_dev->id);
if (!st->trig->name) {
ret = -ENOMEM;
goto error_free_trig;
}
- snprintf((char *)st->trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "adis16209-dev%d", indio_dev->id);
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->private_data = st;
diff --git a/drivers/staging/iio/accel/adis16240_trigger.c b/drivers/staging/iio/accel/adis16240_trigger.c
index df1312e..d58b405 100644
--- a/drivers/staging/iio/accel/adis16240_trigger.c
+++ b/drivers/staging/iio/accel/adis16240_trigger.c
@@ -83,14 +83,13 @@ int adis16240_probe_trigger(struct iio_dev *indio_dev)
struct adis16240_state *st = indio_dev->dev_data;
st->trig = iio_allocate_trigger();
- st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
+ st->trig->name = kasprintf(GFP_KERNEL,
+ "adis16240-dev%d",
+ indio_dev->id);
if (!st->trig->name) {
ret = -ENOMEM;
goto error_free_trig;
}
- snprintf((char *)st->trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "adis16240-dev%d", indio_dev->id);
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->private_data = st;
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index e4e202e..69e2787 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -495,14 +495,14 @@ int lis3l02dq_probe_trigger(struct iio_dev *indio_dev)
if (!state->trig)
return -ENOMEM;
- state->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
+ state->trig->name = kasprintf(GFP_KERNEL,
+ "lis3l02dq-dev%d",
+ indio_dev->id);
if (!state->trig->name) {
ret = -ENOMEM;
goto error_free_trig;
}
- snprintf((char *)state->trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "lis3l02dq-dev%d", indio_dev->id);
+
state->trig->dev.parent = &state->us->dev;
state->trig->owner = THIS_MODULE;
state->trig->private_data = state;
diff --git a/drivers/staging/iio/gyro/adis16260_trigger.c b/drivers/staging/iio/gyro/adis16260_trigger.c
index b3c5659..54afd9e 100644
--- a/drivers/staging/iio/gyro/adis16260_trigger.c
+++ b/drivers/staging/iio/gyro/adis16260_trigger.c
@@ -83,14 +83,13 @@ int adis16260_probe_trigger(struct iio_dev *indio_dev)
struct adis16260_state *st = indio_dev->dev_data;
st->trig = iio_allocate_trigger();
- st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
+ st->trig->name = kasprintf(GFP_KERNEL,
+ "adis16260-dev%d",
+ indio_dev->id);
if (!st->trig->name) {
ret = -ENOMEM;
goto error_free_trig;
}
- snprintf((char *)st->trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "adis16260-dev%d", indio_dev->id);
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->private_data = st;
diff --git a/drivers/staging/iio/imu/adis16300_trigger.c b/drivers/staging/iio/imu/adis16300_trigger.c
index 54edb20..a55f383 100644
--- a/drivers/staging/iio/imu/adis16300_trigger.c
+++ b/drivers/staging/iio/imu/adis16300_trigger.c
@@ -86,14 +86,13 @@ int adis16300_probe_trigger(struct iio_dev *indio_dev)
struct adis16300_state *st = indio_dev->dev_data;
st->trig = iio_allocate_trigger();
- st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
+ st->trig->name = kasprintf(GFP_KERNEL,
+ "adis16300-dev%d",
+ indio_dev->id);
if (!st->trig->name) {
ret = -ENOMEM;
goto error_free_trig;
}
- snprintf((char *)st->trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "adis16300-dev%d", indio_dev->id);
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->private_data = st;
diff --git a/drivers/staging/iio/imu/adis16350_trigger.c b/drivers/staging/iio/imu/adis16350_trigger.c
index 1ffa75d..fbe246a 100644
--- a/drivers/staging/iio/imu/adis16350_trigger.c
+++ b/drivers/staging/iio/imu/adis16350_trigger.c
@@ -86,14 +86,13 @@ int adis16350_probe_trigger(struct iio_dev *indio_dev)
struct adis16350_state *st = indio_dev->dev_data;
st->trig = iio_allocate_trigger();
- st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
+ st->trig->name = kasprintf(GFP_KERNEL,
+ "adis16350-dev%d",
+ indio_dev->id);
if (!st->trig->name) {
ret = -ENOMEM;
goto error_free_trig;
}
- snprintf((char *)st->trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "adis16350-dev%d", indio_dev->id);
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->private_data = st;
diff --git a/drivers/staging/iio/imu/adis16400_trigger.c b/drivers/staging/iio/imu/adis16400_trigger.c
index 3b3250a..bf7c603 100644
--- a/drivers/staging/iio/imu/adis16400_trigger.c
+++ b/drivers/staging/iio/imu/adis16400_trigger.c
@@ -86,14 +86,13 @@ int adis16400_probe_trigger(struct iio_dev *indio_dev)
struct adis16400_state *st = indio_dev->dev_data;
st->trig = iio_allocate_trigger();
- st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
+ st->trig->name = kasprintf(GFP_KERNEL,
+ "adis16400-dev%d",
+ indio_dev->id);
if (!st->trig->name) {
ret = -ENOMEM;
goto error_free_trig;
}
- snprintf((char *)st->trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "adis16400-dev%d", indio_dev->id);
st->trig->dev.parent = &st->us->dev;
st->trig->owner = THIS_MODULE;
st->trig->private_data = st;
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 5682e61..3c06808 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -296,10 +296,9 @@ static ssize_t iio_trigger_read_current(struct device *dev,
struct iio_dev *dev_info = dev_get_drvdata(dev);
int len = 0;
if (dev_info->trig)
- len = snprintf(buf,
- IIO_TRIGGER_NAME_LENGTH,
- "%s\n",
- dev_info->trig->name);
+ len = sprintf(buf,
+ "%s\n",
+ dev_info->trig->name);
return len;
}
@@ -324,8 +323,6 @@ static ssize_t iio_trigger_write_current(struct device *dev,
}
mutex_unlock(&dev_info->mlock);
- len = len < IIO_TRIGGER_NAME_LENGTH ? len : IIO_TRIGGER_NAME_LENGTH;
-
dev_info->trig = iio_trigger_find_by_name(buf, len);
if (oldtrig && dev_info->trig != oldtrig)
iio_put_trigger(oldtrig);
diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h
index 784e7b6..89610b5 100644
--- a/drivers/staging/iio/trigger.h
+++ b/drivers/staging/iio/trigger.h
@@ -8,10 +8,6 @@
*/
#ifndef _IIO_TRIGGER_H_
#define _IIO_TRIGGER_H_
-#define IIO_TRIGGER_NAME_LENGTH 20
-#define IIO_TRIGGER_ID_PREFIX "iio:trigger"
-#define IIO_TRIGGER_ID_FORMAT IIO_TRIGGER_ID_PREFIX "%d"
-
/**
* struct iio_trigger - industrial I/O trigger device
diff --git a/drivers/staging/iio/trigger/iio-trig-gpio.c b/drivers/staging/iio/trigger/iio-trig-gpio.c
index 1da285d..3c0614e 100644
--- a/drivers/staging/iio/trigger/iio-trig-gpio.c
+++ b/drivers/staging/iio/trigger/iio-trig-gpio.c
@@ -93,16 +93,11 @@ static int iio_gpio_trigger_probe(struct platform_device *pdev)
trig->private_data = trig_info;
trig_info->irq = irq;
trig->owner = THIS_MODULE;
- trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH,
- GFP_KERNEL);
- if (!trig->name) {
+ trig->name = kasprintf(GFP_KERNEL, "irqtrig%d", irq);
+ if (trig->name == NULL) {
ret = -ENOMEM;
goto error_free_trig_info;
}
- snprintf((char *)trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "irqtrig%d", irq);
-
ret = request_irq(irq, iio_gpio_trigger_poll,
irqflags, trig->name, trig);
if (ret) {
diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
index 4ee3ae1..d8c58cb 100644
--- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
+++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
@@ -25,7 +25,6 @@ static DEFINE_MUTEX(iio_prtc_trigger_list_lock);
struct iio_prtc_trigger_info {
struct rtc_device *rtc;
int frequency;
- char *name;
struct rtc_task task;
};
@@ -78,8 +77,7 @@ static ssize_t iio_trig_periodic_read_name(struct device *dev,
char *buf)
{
struct iio_trigger *trig = dev_get_drvdata(dev);
- struct iio_prtc_trigger_info *trig_info = trig->private_data;
- return sprintf(buf, "%s\n", trig_info->name);
+ return sprintf(buf, "%s\n", trig->name);
}
static DEVICE_ATTR(name, S_IRUGO,
@@ -129,16 +127,12 @@ static int iio_trig_periodic_rtc_probe(struct platform_device *dev)
trig->private_data = trig_info;
trig->owner = THIS_MODULE;
trig->set_trigger_state = &iio_trig_periodic_rtc_set_state;
- trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
+ trig->name = kasprintf(GFP_KERNEL, "periodic%s", pdata[i]);
if (trig->name == NULL) {
ret = -ENOMEM;
goto error_free_trig_info;
}
- snprintf((char *)trig->name,
- IIO_TRIGGER_NAME_LENGTH,
- "periodic%s",
- pdata[i]);
- trig_info->name = (char *)trig->name;
+
/* RTC access */
trig_info->rtc
= rtc_class_open(pdata[i]);
--
1.6.4.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function
2010-06-25 15:55 ` [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name Jonathan Cameron
@ 2010-06-25 15:55 ` Jonathan Cameron
2010-06-25 15:55 ` [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc Jonathan Cameron
2010-06-30 4:21 ` [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function Barry Song
2010-06-29 10:18 ` [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name Barry Song
1 sibling, 2 replies; 15+ messages in thread
From: Jonathan Cameron @ 2010-06-25 15:55 UTC (permalink / raw)
To: linux-iio; +Cc: Barry.Song, Jonathan Cameron
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
drivers/staging/iio/accel/lis3l02dq_ring.c | 8 --------
1 files changed, 0 insertions(+), 8 deletions(-)
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 69e2787..a33599d 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -591,12 +591,4 @@ void lis3l02dq_uninitialize_ring(struct iio_ring_buffer *ring)
iio_ring_buffer_unregister(ring);
}
-int lis3l02dq_set_ring_length(struct iio_dev *indio_dev, int length)
-{
- /* Set sensible defaults for the ring buffer */
- if (indio_dev->ring->access.set_length)
- return indio_dev->ring->access.set_length(indio_dev->ring, 500);
- return 0;
-}
-
--
1.6.4.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc
2010-06-25 15:55 ` [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function Jonathan Cameron
@ 2010-06-25 15:55 ` Jonathan Cameron
2010-06-25 15:55 ` [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers Jonathan Cameron
2010-06-28 6:35 ` [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc Barry Song
2010-06-30 4:21 ` [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function Barry Song
1 sibling, 2 replies; 15+ messages in thread
From: Jonathan Cameron @ 2010-06-25 15:55 UTC (permalink / raw)
To: linux-iio; +Cc: Barry.Song, Jonathan Cameron
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
Simple core function removes a lot of cut an paste code.
This is of general use when pollfuncs are used.
drivers/staging/iio/accel/adis16209_ring.c | 11 ++++-------
drivers/staging/iio/accel/adis16240_ring.c | 11 ++++-------
drivers/staging/iio/accel/lis3l02dq_ring.c | 9 +++------
drivers/staging/iio/adc/max1363_ring.c | 9 ++-------
drivers/staging/iio/gyro/adis16260_ring.c | 11 ++++-------
drivers/staging/iio/imu/adis16300_ring.c | 11 ++++-------
drivers/staging/iio/imu/adis16350_ring.c | 11 ++++-------
drivers/staging/iio/imu/adis16400_ring.c | 11 ++++-------
drivers/staging/iio/industrialio-trigger.c | 13 +++++++++++++
drivers/staging/iio/trigger.h | 5 ++++-
10 files changed, 46 insertions(+), 56 deletions(-)
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index 8959ad8..e8f7264 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -241,13 +241,10 @@ int adis16209_configure_ring(struct iio_dev *indio_dev)
ring->predisable = &adis16209_data_rdy_ring_predisable;
ring->owner = THIS_MODULE;
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
- goto error_iio_sw_rb_free;;
- }
- indio_dev->pollfunc->poll_func_main = &adis16209_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16209_poll_func_th);
+ if (ret)
+ goto error_iio_sw_rb_free;
+
indio_dev->modes |= INDIO_RING_TRIGGERED;
return 0;
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index 490d80e..ab52bcf 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -229,13 +229,10 @@ int adis16240_configure_ring(struct iio_dev *indio_dev)
ring->predisable = &adis16240_data_rdy_ring_predisable;
ring->owner = THIS_MODULE;
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
- goto error_iio_sw_rb_free;;
- }
- indio_dev->pollfunc->poll_func_main = &adis16240_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16240_poll_func_th);
+ if (ret)
+ goto error_iio_sw_rb_free;
+
indio_dev->modes |= INDIO_RING_TRIGGERED;
return 0;
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index a33599d..38c7340 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -566,13 +566,9 @@ int lis3l02dq_configure_ring(struct iio_dev *indio_dev)
ring->predisable = &lis3l02dq_data_rdy_ring_predisable;
ring->owner = THIS_MODULE;
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &lis3l02dq_poll_func_th);
+ if (ret)
goto error_iio_sw_rb_free;;
- }
- indio_dev->pollfunc->poll_func_main = &lis3l02dq_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
indio_dev->modes |= INDIO_RING_TRIGGERED;
return 0;
@@ -592,3 +588,4 @@ void lis3l02dq_uninitialize_ring(struct iio_ring_buffer *ring)
}
+
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index a49b3d7..def7ffb 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -223,14 +223,9 @@ int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev)
}
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&st->indio_dev->ring->access);
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &max1363_poll_func_th);
+ if (ret)
goto error_deallocate_sw_rb;
- }
- /* Configure the polling function called on trigger interrupts */
- indio_dev->pollfunc->poll_func_main = &max1363_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
/* Ring buffer functions - here trigger setup related */
indio_dev->ring->postenable = &max1363_ring_postenable;
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index 2fe7f02..bf3c2e8 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -231,13 +231,10 @@ int adis16260_configure_ring(struct iio_dev *indio_dev)
ring->predisable = &adis16260_data_rdy_ring_predisable;
ring->owner = THIS_MODULE;
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
- goto error_iio_sw_rb_free;;
- }
- indio_dev->pollfunc->poll_func_main = &adis16260_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16260_poll_func_th);
+ if (ret)
+ goto error_iio_sw_rb_free;
+
indio_dev->modes |= INDIO_RING_TRIGGERED;
return 0;
diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/iio/imu/adis16300_ring.c
index 17ceb72..de39187 100644
--- a/drivers/staging/iio/imu/adis16300_ring.c
+++ b/drivers/staging/iio/imu/adis16300_ring.c
@@ -256,13 +256,10 @@ int adis16300_configure_ring(struct iio_dev *indio_dev)
ring->predisable = &adis16300_data_rdy_ring_predisable;
ring->owner = THIS_MODULE;
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
- goto error_iio_sw_rb_free;;
- }
- indio_dev->pollfunc->poll_func_main = &adis16300_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16300_poll_func_th);
+ if (ret)
+ goto error_iio_sw_rb_free;
+
indio_dev->modes |= INDIO_RING_TRIGGERED;
return 0;
diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/iio/imu/adis16350_ring.c
index 2a0a465..be9ce31 100644
--- a/drivers/staging/iio/imu/adis16350_ring.c
+++ b/drivers/staging/iio/imu/adis16350_ring.c
@@ -261,13 +261,10 @@ int adis16350_configure_ring(struct iio_dev *indio_dev)
ring->predisable = &adis16350_data_rdy_ring_predisable;
ring->owner = THIS_MODULE;
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
- goto error_iio_sw_rb_free;;
- }
- indio_dev->pollfunc->poll_func_main = &adis16350_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16350_poll_func_th);
+ if (ret)
+ goto error_iio_sw_rb_free;
+
indio_dev->modes |= INDIO_RING_TRIGGERED;
return 0;
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index 5d94cdc..da24384 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -268,13 +268,10 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
ring->predisable = &adis16400_data_rdy_ring_predisable;
ring->owner = THIS_MODULE;
- indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
- if (indio_dev->pollfunc == NULL) {
- ret = -ENOMEM;
- goto error_iio_sw_rb_free;;
- }
- indio_dev->pollfunc->poll_func_main = &adis16400_poll_func_th;
- indio_dev->pollfunc->private_data = indio_dev;
+ ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16400_poll_func_th);
+ if (ret)
+ goto error_iio_sw_rb_free;
+
indio_dev->modes |= INDIO_RING_TRIGGERED;
return 0;
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 3c06808..18ed09b 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -399,3 +399,16 @@ int iio_device_unregister_trigger_consumer(struct iio_dev *dev_info)
}
EXPORT_SYMBOL(iio_device_unregister_trigger_consumer);
+int iio_alloc_pollfunc(struct iio_dev *indio_dev,
+ void (*immediate)(struct iio_dev *indio_dev),
+ void (*main)(struct iio_dev *private_data))
+{
+ indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
+ if (indio_dev->pollfunc == NULL)
+ return -ENOMEM;
+ indio_dev->pollfunc->poll_func_immediate = immediate;
+ indio_dev->pollfunc->poll_func_main = main;
+ indio_dev->pollfunc->private_data = indio_dev;
+ return 0;
+}
+EXPORT_SYMBOL(iio_alloc_pollfunc);
diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h
index 89610b5..10e9732 100644
--- a/drivers/staging/iio/trigger.h
+++ b/drivers/staging/iio/trigger.h
@@ -148,9 +148,12 @@ struct iio_poll_func {
};
+int iio_alloc_pollfunc(struct iio_dev *indio_dev,
+ void (*immediate)(struct iio_dev *indio_dev),
+ void (*main)(struct iio_dev *private_data));
+
struct iio_trigger *iio_allocate_trigger(void);
void iio_free_trigger(struct iio_trigger *trig);
-
#endif /* _IIO_TRIGGER_H_ */
--
1.6.4.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers
2010-06-25 15:55 ` [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc Jonathan Cameron
@ 2010-06-25 15:55 ` Jonathan Cameron
2010-06-25 15:55 ` [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs Jonathan Cameron
2010-06-28 6:35 ` [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers Barry Song
2010-06-28 6:35 ` [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc Barry Song
1 sibling, 2 replies; 15+ messages in thread
From: Jonathan Cameron @ 2010-06-25 15:55 UTC (permalink / raw)
To: linux-iio; +Cc: Barry.Song, Jonathan Cameron
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
Directly lifted form Barry Song's RFC. This pair apply to all current
triggered sw ring buffer fills. We may want to futher unify things
but to keep things easy to review lets do it in stages.
drivers/staging/iio/accel/adis16209_ring.c | 20 +--------------
drivers/staging/iio/accel/adis16240_ring.c | 20 +--------------
drivers/staging/iio/accel/lis3l02dq_ring.c | 21 +---------------
drivers/staging/iio/adc/max1363_ring.c | 34 +--------------------------
drivers/staging/iio/gyro/adis16260_ring.c | 20 +--------------
drivers/staging/iio/imu/adis16300_ring.c | 20 +--------------
drivers/staging/iio/imu/adis16350_ring.c | 20 +--------------
drivers/staging/iio/imu/adis16400_ring.c | 20 +--------------
drivers/staging/iio/industrialio-trigger.c | 18 ++++++++++++++
drivers/staging/iio/trigger.h | 7 +++++
10 files changed, 41 insertions(+), 159 deletions(-)
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index e8f7264..3b42a65 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -186,22 +186,6 @@ static int adis16209_data_rdy_ring_preenable(struct iio_dev *indio_dev)
return 0;
}
-static int adis16209_data_rdy_ring_postenable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_attach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
-static int adis16209_data_rdy_ring_predisable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_dettach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
void adis16209_unconfigure_ring(struct iio_dev *indio_dev)
{
kfree(indio_dev->pollfunc);
@@ -237,8 +221,8 @@ int adis16209_configure_ring(struct iio_dev *indio_dev)
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&ring->access);
ring->preenable = &adis16209_data_rdy_ring_preenable;
- ring->postenable = &adis16209_data_rdy_ring_postenable;
- ring->predisable = &adis16209_data_rdy_ring_predisable;
+ ring->postenable = &iio_triggered_ring_postenable;
+ ring->predisable = &iio_triggered_ring_predisable;
ring->owner = THIS_MODULE;
ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16209_poll_func_th);
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index ab52bcf..08fef63 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -176,22 +176,6 @@ static int adis16240_data_rdy_ring_preenable(struct iio_dev *indio_dev)
return 0;
}
-static int adis16240_data_rdy_ring_postenable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_attach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
-static int adis16240_data_rdy_ring_predisable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_dettach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
void adis16240_unconfigure_ring(struct iio_dev *indio_dev)
{
kfree(indio_dev->pollfunc);
@@ -225,8 +209,8 @@ int adis16240_configure_ring(struct iio_dev *indio_dev)
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&ring->access);
ring->preenable = &adis16240_data_rdy_ring_preenable;
- ring->postenable = &adis16240_data_rdy_ring_postenable;
- ring->predisable = &adis16240_data_rdy_ring_predisable;
+ ring->postenable = &iio_triggered_ring_postenable;
+ ring->predisable = &iio_triggered_ring_predisable;
ring->owner = THIS_MODULE;
ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16240_poll_func_th);
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index 38c7340..bc0de78 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -339,23 +339,6 @@ static int lis3l02dq_data_rdy_ring_preenable(struct iio_dev *indio_dev)
return 0;
}
-static int lis3l02dq_data_rdy_ring_postenable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_attach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
-static int lis3l02dq_data_rdy_ring_predisable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_dettach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
-
/* Caller responsible for locking as necessary. */
static int
__lis3l02dq_write_data_ready_config(struct device *dev,
@@ -562,8 +545,8 @@ int lis3l02dq_configure_ring(struct iio_dev *indio_dev)
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&ring->access);
ring->preenable = &lis3l02dq_data_rdy_ring_preenable;
- ring->postenable = &lis3l02dq_data_rdy_ring_postenable;
- ring->predisable = &lis3l02dq_data_rdy_ring_predisable;
+ ring->postenable = &iio_triggered_ring_postenable;
+ ring->predisable = &iio_triggered_ring_predisable;
ring->owner = THIS_MODULE;
ret = iio_alloc_pollfunc(indio_dev, NULL, &lis3l02dq_poll_func_th);
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index def7ffb..896973d 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -106,36 +106,6 @@ static int max1363_ring_preenable(struct iio_dev *indio_dev)
}
/**
- * max1363_ring_postenable() typical ring post enable
- *
- * Only not moved into the core for the hardware ring buffer cases
- * that are more sophisticated.
- **/
-static int max1363_ring_postenable(struct iio_dev *indio_dev)
-{
- if (indio_dev->trig == NULL)
- return 0;
- return iio_trigger_attach_poll_func(indio_dev->trig,
- indio_dev->pollfunc);
-}
-
-/**
- * max1363_ring_predisable() runs just prior to ring buffer being disabled
- *
- * Typical predisable function which ensures that no trigger events can
- * occur before we disable the ring buffer (and hence would have no idea
- * what to do with them)
- **/
-static int max1363_ring_predisable(struct iio_dev *indio_dev)
-{
- if (indio_dev->trig)
- return iio_trigger_dettach_poll_func(indio_dev->trig,
- indio_dev->pollfunc);
- else
- return 0;
-}
-
-/**
* max1363_poll_func_th() th of trigger launched polling to ring buffer
*
* As sampling only occurs on i2c comms occuring, leave timestamping until
@@ -228,9 +198,9 @@ int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev)
goto error_deallocate_sw_rb;
/* Ring buffer functions - here trigger setup related */
- indio_dev->ring->postenable = &max1363_ring_postenable;
+ indio_dev->ring->postenable = &iio_triggered_ring_postenable;
indio_dev->ring->preenable = &max1363_ring_preenable;
- indio_dev->ring->predisable = &max1363_ring_predisable;
+ indio_dev->ring->predisable = &iio_triggered_ring_predisable;
INIT_WORK(&st->poll_work, &max1363_poll_bh_to_ring);
/* Flag that polled ring buffering is possible */
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index bf3c2e8..05e7a69 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -179,22 +179,6 @@ static int adis16260_data_rdy_ring_preenable(struct iio_dev *indio_dev)
return 0;
}
-static int adis16260_data_rdy_ring_postenable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_attach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
-static int adis16260_data_rdy_ring_predisable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_dettach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
void adis16260_unconfigure_ring(struct iio_dev *indio_dev)
{
kfree(indio_dev->pollfunc);
@@ -227,8 +211,8 @@ int adis16260_configure_ring(struct iio_dev *indio_dev)
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&ring->access);
ring->preenable = &adis16260_data_rdy_ring_preenable;
- ring->postenable = &adis16260_data_rdy_ring_postenable;
- ring->predisable = &adis16260_data_rdy_ring_predisable;
+ ring->postenable = &iio_triggered_ring_postenable;
+ ring->predisable = &iio_triggered_ring_predisable;
ring->owner = THIS_MODULE;
ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16260_poll_func_th);
diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/iio/imu/adis16300_ring.c
index de39187..4dee670 100644
--- a/drivers/staging/iio/imu/adis16300_ring.c
+++ b/drivers/staging/iio/imu/adis16300_ring.c
@@ -200,22 +200,6 @@ static int adis16300_data_rdy_ring_preenable(struct iio_dev *indio_dev)
return 0;
}
-static int adis16300_data_rdy_ring_postenable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_attach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
-static int adis16300_data_rdy_ring_predisable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_dettach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
void adis16300_unconfigure_ring(struct iio_dev *indio_dev)
{
kfree(indio_dev->pollfunc);
@@ -252,8 +236,8 @@ int adis16300_configure_ring(struct iio_dev *indio_dev)
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&ring->access);
ring->preenable = &adis16300_data_rdy_ring_preenable;
- ring->postenable = &adis16300_data_rdy_ring_postenable;
- ring->predisable = &adis16300_data_rdy_ring_predisable;
+ ring->postenable = &iio_triggered_ring_postenable;
+ ring->predisable = &iio_triggered_ring_predisable;
ring->owner = THIS_MODULE;
ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16300_poll_func_th);
diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/iio/imu/adis16350_ring.c
index be9ce31..c70816d 100644
--- a/drivers/staging/iio/imu/adis16350_ring.c
+++ b/drivers/staging/iio/imu/adis16350_ring.c
@@ -203,22 +203,6 @@ static int adis16350_data_rdy_ring_preenable(struct iio_dev *indio_dev)
return 0;
}
-static int adis16350_data_rdy_ring_postenable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_attach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
-static int adis16350_data_rdy_ring_predisable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_dettach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
void adis16350_unconfigure_ring(struct iio_dev *indio_dev)
{
kfree(indio_dev->pollfunc);
@@ -257,8 +241,8 @@ int adis16350_configure_ring(struct iio_dev *indio_dev)
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&ring->access);
ring->preenable = &adis16350_data_rdy_ring_preenable;
- ring->postenable = &adis16350_data_rdy_ring_postenable;
- ring->predisable = &adis16350_data_rdy_ring_predisable;
+ ring->postenable = &iio_triggered_ring_postenable;
+ ring->predisable = &iio_triggered_ring_predisable;
ring->owner = THIS_MODULE;
ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16350_poll_func_th);
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index da24384..8f7d257 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -209,22 +209,6 @@ static int adis16400_data_rdy_ring_preenable(struct iio_dev *indio_dev)
return 0;
}
-static int adis16400_data_rdy_ring_postenable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_attach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
-static int adis16400_data_rdy_ring_predisable(struct iio_dev *indio_dev)
-{
- return indio_dev->trig
- ? iio_trigger_dettach_poll_func(indio_dev->trig,
- indio_dev->pollfunc)
- : 0;
-}
-
void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
{
kfree(indio_dev->pollfunc);
@@ -264,8 +248,8 @@ int adis16400_configure_ring(struct iio_dev *indio_dev)
/* Effectively select the ring buffer implementation */
iio_ring_sw_register_funcs(&ring->access);
ring->preenable = &adis16400_data_rdy_ring_preenable;
- ring->postenable = &adis16400_data_rdy_ring_postenable;
- ring->predisable = &adis16400_data_rdy_ring_predisable;
+ ring->postenable = &iio_triggered_ring_postenable;
+ ring->predisable = &iio_triggered_ring_predisable;
ring->owner = THIS_MODULE;
ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16400_poll_func_th);
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 18ed09b..0f8ba14 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -412,3 +412,21 @@ int iio_alloc_pollfunc(struct iio_dev *indio_dev,
return 0;
}
EXPORT_SYMBOL(iio_alloc_pollfunc);
+
+int iio_triggered_ring_postenable(struct iio_dev *indio_dev)
+{
+ return indio_dev->trig
+ ? iio_trigger_attach_poll_func(indio_dev->trig,
+ indio_dev->pollfunc)
+ : 0;
+}
+EXPORT_SYMBOL(iio_triggered_ring_postenable);
+
+int iio_triggered_ring_predisable(struct iio_dev *indio_dev)
+{
+ return indio_dev->trig
+ ? iio_trigger_dettach_poll_func(indio_dev->trig,
+ indio_dev->pollfunc)
+ : 0;
+}
+EXPORT_SYMBOL(iio_triggered_ring_predisable);
diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h
index 10e9732..832de15 100644
--- a/drivers/staging/iio/trigger.h
+++ b/drivers/staging/iio/trigger.h
@@ -152,6 +152,13 @@ int iio_alloc_pollfunc(struct iio_dev *indio_dev,
void (*immediate)(struct iio_dev *indio_dev),
void (*main)(struct iio_dev *private_data));
+/*
+ * Two functions for common case where all that happens is a pollfunc
+ * is attached and detached form a trigger
+ */
+int iio_triggered_ring_postenable(struct iio_dev *indio_dev);
+int iio_triggered_ring_predisable(struct iio_dev *indio_dev);
+
struct iio_trigger *iio_allocate_trigger(void);
void iio_free_trigger(struct iio_trigger *trig);
--
1.6.4.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs
2010-06-25 15:55 ` [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers Jonathan Cameron
@ 2010-06-25 15:55 ` Jonathan Cameron
2010-06-25 15:55 ` [PATCH 6/6] staging:iio: replace combine_8_to_16 with be16_to_cpup where possible Jonathan Cameron
2010-06-29 10:30 ` [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs Barry Song
2010-06-28 6:35 ` [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers Barry Song
1 sibling, 2 replies; 15+ messages in thread
From: Jonathan Cameron @ 2010-06-25 15:55 UTC (permalink / raw)
To: linux-iio; +Cc: Barry.Song, Jonathan Cameron
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
Noticed this in passing. The trig->timestamp value was simply
used to pass the timestamp into iio_trigger_poll and to functions
called from there. Lets move it to a function parameter to make
code easier to follow.
drivers/staging/iio/accel/adis16209_ring.c | 4 ++--
drivers/staging/iio/accel/adis16209_trigger.c | 3 +--
drivers/staging/iio/accel/adis16240_ring.c | 4 ++--
drivers/staging/iio/accel/adis16240_trigger.c | 3 +--
drivers/staging/iio/accel/lis3l02dq_ring.c | 9 ++++-----
drivers/staging/iio/adc/max1363_ring.c | 2 +-
drivers/staging/iio/gyro/adis16260_ring.c | 4 ++--
drivers/staging/iio/gyro/adis16260_trigger.c | 3 +--
drivers/staging/iio/imu/adis16300_ring.c | 4 ++--
drivers/staging/iio/imu/adis16300_trigger.c | 3 +--
drivers/staging/iio/imu/adis16350_ring.c | 4 ++--
drivers/staging/iio/imu/adis16350_trigger.c | 3 +--
drivers/staging/iio/imu/adis16400_ring.c | 4 ++--
drivers/staging/iio/imu/adis16400_trigger.c | 3 +--
drivers/staging/iio/industrialio-trigger.c | 10 +++++-----
drivers/staging/iio/trigger.h | 12 +++++++-----
drivers/staging/iio/trigger/iio-trig-gpio.c | 3 ++-
.../staging/iio/trigger/iio-trig-periodic-rtc.c | 3 ++-
18 files changed, 39 insertions(+), 42 deletions(-)
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index 3b42a65..ad71538 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -68,10 +68,10 @@ static struct attribute_group adis16209_scan_el_group = {
* adis16209_poll_func_th() top half interrupt handler called by trigger
* @private_data: iio_dev
**/
-static void adis16209_poll_func_th(struct iio_dev *indio_dev)
+static void adis16209_poll_func_th(struct iio_dev *indio_dev, s64 time)
{
struct adis16209_state *st = iio_dev_get_devdata(indio_dev);
- st->last_timestamp = indio_dev->trig->timestamp;
+ st->last_timestamp = time;
schedule_work(&st->work_trigger_to_ring);
}
diff --git a/drivers/staging/iio/accel/adis16209_trigger.c b/drivers/staging/iio/accel/adis16209_trigger.c
index cd901a4..1487eff 100644
--- a/drivers/staging/iio/accel/adis16209_trigger.c
+++ b/drivers/staging/iio/accel/adis16209_trigger.c
@@ -23,8 +23,7 @@ static int adis16209_data_rdy_trig_poll(struct iio_dev *dev_info,
struct adis16209_state *st = iio_dev_get_devdata(dev_info);
struct iio_trigger *trig = st->trig;
- trig->timestamp = timestamp;
- iio_trigger_poll(trig);
+ iio_trigger_poll(trig, timestamp);
return IRQ_HANDLED;
}
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index 08fef63..5cced2e 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -62,10 +62,10 @@ static struct attribute_group adis16240_scan_el_group = {
* adis16240_poll_func_th() top half interrupt handler called by trigger
* @private_data: iio_dev
**/
-static void adis16240_poll_func_th(struct iio_dev *indio_dev)
+static void adis16240_poll_func_th(struct iio_dev *indio_dev, s64 time)
{
struct adis16240_state *st = iio_dev_get_devdata(indio_dev);
- st->last_timestamp = indio_dev->trig->timestamp;
+ st->last_timestamp = time;
schedule_work(&st->work_trigger_to_ring);
}
diff --git a/drivers/staging/iio/accel/adis16240_trigger.c b/drivers/staging/iio/accel/adis16240_trigger.c
index d58b405..2ba71fd 100644
--- a/drivers/staging/iio/accel/adis16240_trigger.c
+++ b/drivers/staging/iio/accel/adis16240_trigger.c
@@ -23,8 +23,7 @@ static int adis16240_data_rdy_trig_poll(struct iio_dev *dev_info,
struct adis16240_state *st = iio_dev_get_devdata(dev_info);
struct iio_trigger *trig = st->trig;
- trig->timestamp = timestamp;
- iio_trigger_poll(trig);
+ iio_trigger_poll(trig, timestamp);
return IRQ_HANDLED;
}
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
index bc0de78..28d95ed 100644
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
@@ -103,10 +103,10 @@ static struct attribute_group lis3l02dq_scan_el_group = {
* lis3l02dq_poll_func_th() top half interrupt handler called by trigger
* @private_data: iio_dev
**/
-static void lis3l02dq_poll_func_th(struct iio_dev *indio_dev)
+static void lis3l02dq_poll_func_th(struct iio_dev *indio_dev, s64 time)
{
- struct lis3l02dq_state *st = iio_dev_get_devdata(indio_dev);
- st->last_timestamp = indio_dev->trig->timestamp;
+ struct lis3l02dq_state *st = iio_dev_get_devdata(indio_dev);
+ st->last_timestamp = time;
schedule_work(&st->work_trigger_to_ring);
/* Indicate that this interrupt is being handled */
@@ -128,8 +128,7 @@ static int lis3l02dq_data_rdy_trig_poll(struct iio_dev *dev_info,
struct lis3l02dq_state *st = iio_dev_get_devdata(dev_info);
struct iio_trigger *trig = st->trig;
- trig->timestamp = timestamp;
- iio_trigger_poll(trig);
+ iio_trigger_poll(trig, timestamp);
return IRQ_HANDLED;
}
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c
index 896973d..1e0ad9d 100644
--- a/drivers/staging/iio/adc/max1363_ring.c
+++ b/drivers/staging/iio/adc/max1363_ring.c
@@ -112,7 +112,7 @@ static int max1363_ring_preenable(struct iio_dev *indio_dev)
* then. Some triggers will generate their own time stamp. Currently
* there is no way of notifying them when no one cares.
**/
-static void max1363_poll_func_th(struct iio_dev *indio_dev)
+static void max1363_poll_func_th(struct iio_dev *indio_dev, s64 time)
{
struct max1363_state *st = indio_dev->dev_data;
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index 05e7a69..97d7660 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -59,10 +59,10 @@ static struct attribute_group adis16260_scan_el_group = {
* adis16260_poll_func_th() top half interrupt handler called by trigger
* @private_data: iio_dev
**/
-static void adis16260_poll_func_th(struct iio_dev *indio_dev)
+static void adis16260_poll_func_th(struct iio_dev *indio_dev, s64 time)
{
struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
- st->last_timestamp = indio_dev->trig->timestamp;
+ st->last_timestamp = time;
schedule_work(&st->work_trigger_to_ring);
}
diff --git a/drivers/staging/iio/gyro/adis16260_trigger.c b/drivers/staging/iio/gyro/adis16260_trigger.c
index 54afd9e..de01537 100644
--- a/drivers/staging/iio/gyro/adis16260_trigger.c
+++ b/drivers/staging/iio/gyro/adis16260_trigger.c
@@ -23,8 +23,7 @@ static int adis16260_data_rdy_trig_poll(struct iio_dev *dev_info,
struct adis16260_state *st = iio_dev_get_devdata(dev_info);
struct iio_trigger *trig = st->trig;
- trig->timestamp = timestamp;
- iio_trigger_poll(trig);
+ iio_trigger_poll(trig, timestamp);
return IRQ_HANDLED;
}
diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/iio/imu/adis16300_ring.c
index 4dee670..6b25f12 100644
--- a/drivers/staging/iio/imu/adis16300_ring.c
+++ b/drivers/staging/iio/imu/adis16300_ring.c
@@ -75,10 +75,10 @@ static struct attribute_group adis16300_scan_el_group = {
* adis16300_poll_func_th() top half interrupt handler called by trigger
* @private_data: iio_dev
**/
-static void adis16300_poll_func_th(struct iio_dev *indio_dev)
+static void adis16300_poll_func_th(struct iio_dev *indio_dev, s64 time)
{
struct adis16300_state *st = iio_dev_get_devdata(indio_dev);
- st->last_timestamp = indio_dev->trig->timestamp;
+ st->last_timestamp = time;
schedule_work(&st->work_trigger_to_ring);
/* Indicate that this interrupt is being handled */
diff --git a/drivers/staging/iio/imu/adis16300_trigger.c b/drivers/staging/iio/imu/adis16300_trigger.c
index a55f383..64036cd 100644
--- a/drivers/staging/iio/imu/adis16300_trigger.c
+++ b/drivers/staging/iio/imu/adis16300_trigger.c
@@ -23,8 +23,7 @@ static int adis16300_data_rdy_trig_poll(struct iio_dev *dev_info,
struct adis16300_state *st = iio_dev_get_devdata(dev_info);
struct iio_trigger *trig = st->trig;
- trig->timestamp = timestamp;
- iio_trigger_poll(trig);
+ iio_trigger_poll(trig, timestamp);
return IRQ_HANDLED;
}
diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/iio/imu/adis16350_ring.c
index c70816d..28c13ef 100644
--- a/drivers/staging/iio/imu/adis16350_ring.c
+++ b/drivers/staging/iio/imu/adis16350_ring.c
@@ -81,10 +81,10 @@ static struct attribute_group adis16350_scan_el_group = {
* adis16350_poll_func_th() top half interrupt handler called by trigger
* @private_data: iio_dev
**/
-static void adis16350_poll_func_th(struct iio_dev *indio_dev)
+static void adis16350_poll_func_th(struct iio_dev *indio_dev, s64 time)
{
struct adis16350_state *st = iio_dev_get_devdata(indio_dev);
- st->last_timestamp = indio_dev->trig->timestamp;
+ st->last_timestamp = time;
schedule_work(&st->work_trigger_to_ring);
}
diff --git a/drivers/staging/iio/imu/adis16350_trigger.c b/drivers/staging/iio/imu/adis16350_trigger.c
index fbe246a..76edccc 100644
--- a/drivers/staging/iio/imu/adis16350_trigger.c
+++ b/drivers/staging/iio/imu/adis16350_trigger.c
@@ -23,8 +23,7 @@ static int adis16350_data_rdy_trig_poll(struct iio_dev *dev_info,
struct adis16350_state *st = iio_dev_get_devdata(dev_info);
struct iio_trigger *trig = st->trig;
- trig->timestamp = timestamp;
- iio_trigger_poll(trig);
+ iio_trigger_poll(trig, timestamp);
return IRQ_HANDLED;
}
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index 8f7d257..95f53b2 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -84,10 +84,10 @@ static struct attribute_group adis16400_scan_el_group = {
* adis16400_poll_func_th() top half interrupt handler called by trigger
* @private_data: iio_dev
**/
-static void adis16400_poll_func_th(struct iio_dev *indio_dev)
+static void adis16400_poll_func_th(struct iio_dev *indio_dev, s64 time)
{
struct adis16400_state *st = iio_dev_get_devdata(indio_dev);
- st->last_timestamp = indio_dev->trig->timestamp;
+ st->last_timestamp = time;
schedule_work(&st->work_trigger_to_ring);
/* Indicate that this interrupt is being handled */
diff --git a/drivers/staging/iio/imu/adis16400_trigger.c b/drivers/staging/iio/imu/adis16400_trigger.c
index bf7c603..aafe601 100644
--- a/drivers/staging/iio/imu/adis16400_trigger.c
+++ b/drivers/staging/iio/imu/adis16400_trigger.c
@@ -23,8 +23,7 @@ static int adis16400_data_rdy_trig_poll(struct iio_dev *dev_info,
struct adis16400_state *st = iio_dev_get_devdata(dev_info);
struct iio_trigger *trig = st->trig;
- trig->timestamp = timestamp;
- iio_trigger_poll(trig);
+ iio_trigger_poll(trig, timestamp);
return IRQ_HANDLED;
}
diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c
index 0f8ba14..0d5f15b 100644
--- a/drivers/staging/iio/industrialio-trigger.c
+++ b/drivers/staging/iio/industrialio-trigger.c
@@ -173,7 +173,7 @@ struct iio_trigger *iio_trigger_find_by_name(const char *name, size_t len)
}
EXPORT_SYMBOL(iio_trigger_find_by_name);
-void iio_trigger_poll(struct iio_trigger *trig)
+void iio_trigger_poll(struct iio_trigger *trig, s64 time)
{
struct iio_poll_func *pf_cursor;
@@ -185,7 +185,8 @@ void iio_trigger_poll(struct iio_trigger *trig)
}
list_for_each_entry(pf_cursor, &trig->pollfunc_list, list) {
if (pf_cursor->poll_func_main) {
- pf_cursor->poll_func_main(pf_cursor->private_data);
+ pf_cursor->poll_func_main(pf_cursor->private_data,
+ time);
trig->use_count++;
}
}
@@ -198,8 +199,7 @@ void iio_trigger_notify_done(struct iio_trigger *trig)
if (trig->use_count == 0 && trig->try_reenable)
if (trig->try_reenable(trig)) {
/* Missed and interrupt so launch new poll now */
- trig->timestamp = 0;
- iio_trigger_poll(trig);
+ iio_trigger_poll(trig, 0);
}
}
EXPORT_SYMBOL(iio_trigger_notify_done);
@@ -401,7 +401,7 @@ EXPORT_SYMBOL(iio_device_unregister_trigger_consumer);
int iio_alloc_pollfunc(struct iio_dev *indio_dev,
void (*immediate)(struct iio_dev *indio_dev),
- void (*main)(struct iio_dev *private_data))
+ void (*main)(struct iio_dev *private_data, s64 time))
{
indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL);
if (indio_dev->pollfunc == NULL)
diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.h
index 832de15..4699586 100644
--- a/drivers/staging/iio/trigger.h
+++ b/drivers/staging/iio/trigger.h
@@ -21,7 +21,6 @@
* @pollfunc_list_lock: [INTERN] protection of the polling function list
* @pollfunc_list: [INTERN] list of functions to run on trigger.
* @control_attrs: [DRIVER] sysfs attributes relevant to trigger type
- * @timestamp: [INTERN] timestamp usesd by some trigs (e.g. datardy)
* @owner: [DRIVER] used to monitor usage count of the trigger.
* @use_count: use count for the trigger
* @set_trigger_state: [DRIVER] switch on/off the trigger on demand
@@ -39,7 +38,6 @@ struct iio_trigger {
spinlock_t pollfunc_list_lock;
struct list_head pollfunc_list;
const struct attribute_group *control_attrs;
- s64 timestamp;
struct module *owner;
int use_count;
@@ -120,7 +118,7 @@ int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
*
* Typically called in relevant hardware interrupt handler.
**/
-void iio_trigger_poll(struct iio_trigger *trig);
+void iio_trigger_poll(struct iio_trigger *trig, s64 time);
void iio_trigger_notify_done(struct iio_trigger *trig);
/**
@@ -144,13 +142,13 @@ struct iio_poll_func {
struct list_head list;
void *private_data;
void (*poll_func_immediate)(struct iio_dev *indio_dev);
- void (*poll_func_main)(struct iio_dev *private_data);
+ void (*poll_func_main)(struct iio_dev *private_data, s64 time);
};
int iio_alloc_pollfunc(struct iio_dev *indio_dev,
void (*immediate)(struct iio_dev *indio_dev),
- void (*main)(struct iio_dev *private_data));
+ void (*main)(struct iio_dev *private_data, s64 time));
/*
* Two functions for common case where all that happens is a pollfunc
@@ -163,4 +161,8 @@ struct iio_trigger *iio_allocate_trigger(void);
void iio_free_trigger(struct iio_trigger *trig);
+
+struct iio_simple_trigger {
+ struct iio_trigger trig;
+};
#endif /* _IIO_TRIGGER_H_ */
diff --git a/drivers/staging/iio/trigger/iio-trig-gpio.c b/drivers/staging/iio/trigger/iio-trig-gpio.c
index 3c0614e..f93cc91 100644
--- a/drivers/staging/iio/trigger/iio-trig-gpio.c
+++ b/drivers/staging/iio/trigger/iio-trig-gpio.c
@@ -42,7 +42,8 @@ struct iio_gpio_trigger_info {
static irqreturn_t iio_gpio_trigger_poll(int irq, void *private)
{
- iio_trigger_poll(private);
+ /* Timestamp not currently provided */
+ iio_trigger_poll(private, 0);
return IRQ_HANDLED;
}
diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
index d8c58cb..b0b52f8 100644
--- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
+++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
@@ -98,7 +98,8 @@ static const struct attribute_group iio_trig_prtc_attr_group = {
static void iio_prtc_trigger_poll(void *private_data)
{
- iio_trigger_poll(private_data);
+ /* Timestamp is not provided currently */
+ iio_trigger_poll(private_data, 0);
}
static int iio_trig_periodic_rtc_probe(struct platform_device *dev)
--
1.6.4.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 6/6] staging:iio: replace combine_8_to_16 with be16_to_cpup where possible.
2010-06-25 15:55 ` [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs Jonathan Cameron
@ 2010-06-25 15:55 ` Jonathan Cameron
2010-06-30 4:18 ` Barry Song
2010-06-29 10:30 ` [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs Barry Song
1 sibling, 1 reply; 15+ messages in thread
From: Jonathan Cameron @ 2010-06-25 15:55 UTC (permalink / raw)
To: linux-iio; +Cc: Barry.Song, Jonathan Cameron
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
In think I have this one the right way round, but please can someone check!
The combine_8_to_16 does more complex things in lis3l02dq but copy
and paste has led to it turning up in lots of places where it isn't
needed.
Barry Song's RFC made this obvious.
drivers/staging/iio/accel/adis16209_ring.c | 16 ++--------------
drivers/staging/iio/accel/adis16240_ring.c | 16 ++--------------
drivers/staging/iio/gyro/adis16260_ring.c | 16 ++--------------
drivers/staging/iio/imu/adis16300_ring.c | 16 ++--------------
drivers/staging/iio/imu/adis16350_ring.c | 16 ++--------------
drivers/staging/iio/imu/adis16400_ring.c | 16 ++--------------
6 files changed, 12 insertions(+), 84 deletions(-)
diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c
index ad71538..53a7677 100644
--- a/drivers/staging/iio/accel/adis16209_ring.c
+++ b/drivers/staging/iio/accel/adis16209_ring.c
@@ -17,16 +17,6 @@
#include "../trigger.h"
#include "adis16209.h"
-/**
- * combine_8_to_16() utility function to munge to u8s into u16
- **/
-static inline u16 combine_8_to_16(u8 lower, u8 upper)
-{
- u16 _lower = lower;
- u16 _upper = upper;
- return _lower | (_upper << 8);
-}
-
static IIO_SCAN_EL_C(supply, ADIS16209_SCAN_SUPPLY, IIO_UNSIGNED(14),
ADIS16209_SUPPLY_OUT, NULL);
static IIO_SCAN_EL_C(accel_x, ADIS16209_SCAN_ACC_X, IIO_SIGNED(14),
@@ -139,10 +129,8 @@ static void adis16209_trigger_bh_to_ring(struct work_struct *work_s)
if (st->indio_dev->scan_count)
if (adis16209_read_ring_data(&st->indio_dev->dev, st->rx) >= 0)
- for (; i < st->indio_dev->scan_count; i++) {
- data[i] = combine_8_to_16(st->rx[i*2+1],
- st->rx[i*2]);
- }
+ for (; i < st->indio_dev->scan_count; i++)
+ data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));
/* Guaranteed to be aligned with 8 byte boundary */
if (st->indio_dev->scan_timestamp)
diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c
index 5cced2e..88269a0 100644
--- a/drivers/staging/iio/accel/adis16240_ring.c
+++ b/drivers/staging/iio/accel/adis16240_ring.c
@@ -17,16 +17,6 @@
#include "../trigger.h"
#include "adis16240.h"
-/**
- * combine_8_to_16() utility function to munge to u8s into u16
- **/
-static inline u16 combine_8_to_16(u8 lower, u8 upper)
-{
- u16 _lower = lower;
- u16 _upper = upper;
- return _lower | (_upper << 8);
-}
-
static IIO_SCAN_EL_C(supply, ADIS16240_SCAN_SUPPLY, IIO_UNSIGNED(10),
ADIS16240_SUPPLY_OUT, NULL);
static IIO_SCAN_EL_C(accel_x, ADIS16240_SCAN_ACC_X, IIO_SIGNED(10),
@@ -131,10 +121,8 @@ static void adis16240_trigger_bh_to_ring(struct work_struct *work_s)
if (st->indio_dev->scan_count)
if (adis16240_read_ring_data(&st->indio_dev->dev, st->rx) >= 0)
- for (; i < st->indio_dev->scan_count; i++) {
- data[i] = combine_8_to_16(st->rx[i*2+1],
- st->rx[i*2]);
- }
+ for (; i < st->indio_dev->scan_count; i++)
+ data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));
/* Guaranteed to be aligned with 8 byte boundary */
if (st->indio_dev->scan_timestamp)
diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c
index 97d7660..59f1beb 100644
--- a/drivers/staging/iio/gyro/adis16260_ring.c
+++ b/drivers/staging/iio/gyro/adis16260_ring.c
@@ -17,16 +17,6 @@
#include "../trigger.h"
#include "adis16260.h"
-/**
- * combine_8_to_16() utility function to munge to u8s into u16
- **/
-static inline u16 combine_8_to_16(u8 lower, u8 upper)
-{
- u16 _lower = lower;
- u16 _upper = upper;
- return _lower | (_upper << 8);
-}
-
static IIO_SCAN_EL_C(supply, ADIS16260_SCAN_SUPPLY, IIO_UNSIGNED(12),
ADIS16260_SUPPLY_OUT, NULL);
static IIO_SCAN_EL_C(gyro, ADIS16260_SCAN_GYRO, IIO_SIGNED(14),
@@ -134,10 +124,8 @@ static void adis16260_trigger_bh_to_ring(struct work_struct *work_s)
if (st->indio_dev->scan_count)
if (adis16260_read_ring_data(&st->indio_dev->dev, st->rx) >= 0)
- for (; i < st->indio_dev->scan_count; i++) {
- data[i] = combine_8_to_16(st->rx[i*2+1],
- st->rx[i*2]);
- }
+ for (; i < st->indio_dev->scan_count; i++)
+ data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));
/* Guaranteed to be aligned with 8 byte boundary */
if (st->indio_dev->scan_timestamp)
diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/iio/imu/adis16300_ring.c
index 6b25f12..64f02f5 100644
--- a/drivers/staging/iio/imu/adis16300_ring.c
+++ b/drivers/staging/iio/imu/adis16300_ring.c
@@ -17,16 +17,6 @@
#include "../trigger.h"
#include "adis16300.h"
-/**
- * combine_8_to_16() utility function to munge to u8s into u16
- **/
-static inline u16 combine_8_to_16(u8 lower, u8 upper)
-{
- u16 _lower = lower;
- u16 _upper = upper;
- return _lower | (_upper << 8);
-}
-
static IIO_SCAN_EL_C(supply, ADIS16300_SCAN_SUPPLY, IIO_UNSIGNED(14),
ADIS16300_SUPPLY_OUT, NULL);
@@ -158,10 +148,8 @@ static void adis16300_trigger_bh_to_ring(struct work_struct *work_s)
if (st->indio_dev->scan_count)
if (adis16300_spi_read_burst(&st->indio_dev->dev, st->rx) >= 0)
- for (; i < st->indio_dev->scan_count; i++) {
- data[i] = combine_8_to_16(st->rx[i*2+1],
- st->rx[i*2]);
- }
+ for (; i < st->indio_dev->scan_count; i++)
+ data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));
/* Guaranteed to be aligned with 8 byte boundary */
if (st->indio_dev->scan_timestamp)
diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/iio/imu/adis16350_ring.c
index 28c13ef..f817bfd 100644
--- a/drivers/staging/iio/imu/adis16350_ring.c
+++ b/drivers/staging/iio/imu/adis16350_ring.c
@@ -17,16 +17,6 @@
#include "../trigger.h"
#include "adis16350.h"
-/**
- * combine_8_to_16() utility function to munge to u8s into u16
- **/
-static inline u16 combine_8_to_16(u8 lower, u8 upper)
-{
- u16 _lower = lower;
- u16 _upper = upper;
- return _lower | (_upper << 8);
-}
-
static IIO_SCAN_EL_C(supply, ADIS16350_SCAN_SUPPLY, IIO_UNSIGNED(12),
ADIS16350_SUPPLY_OUT, NULL);
@@ -158,10 +148,8 @@ static void adis16350_trigger_bh_to_ring(struct work_struct *work_s)
if (st->indio_dev->scan_count)
if (adis16350_spi_read_burst(&st->indio_dev->dev, st->rx) >= 0)
- for (; i < st->indio_dev->scan_count; i++) {
- data[i] = combine_8_to_16(st->rx[i*2+1],
- st->rx[i*2]);
- }
+ for (; i < st->indio_dev->scan_count; i++)
+ data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));
/* Guaranteed to be aligned with 8 byte boundary */
if (st->indio_dev->scan_timestamp)
diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c
index 95f53b2..e7881a0 100644
--- a/drivers/staging/iio/imu/adis16400_ring.c
+++ b/drivers/staging/iio/imu/adis16400_ring.c
@@ -17,16 +17,6 @@
#include "../trigger.h"
#include "adis16400.h"
-/**
- * combine_8_to_16() utility function to munge to u8s into u16
- **/
-static inline u16 combine_8_to_16(u8 lower, u8 upper)
-{
- u16 _lower = lower;
- u16 _upper = upper;
- return _lower | (_upper << 8);
-}
-
static IIO_SCAN_EL_C(supply, ADIS16400_SCAN_SUPPLY, IIO_SIGNED(14),
ADIS16400_SUPPLY_OUT, NULL);
@@ -167,10 +157,8 @@ static void adis16400_trigger_bh_to_ring(struct work_struct *work_s)
if (st->indio_dev->scan_count)
if (adis16400_spi_read_burst(&st->indio_dev->dev, st->rx) >= 0)
- for (; i < st->indio_dev->scan_count; i++) {
- data[i] = combine_8_to_16(st->rx[i*2+1],
- st->rx[i*2]);
- }
+ for (; i < st->indio_dev->scan_count; i++)
+ data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));
/* Guaranteed to be aligned with 8 byte boundary */
if (st->indio_dev->scan_timestamp)
--
1.6.4.4
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers
2010-06-25 15:55 ` [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers Jonathan Cameron
2010-06-25 15:55 ` [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs Jonathan Cameron
@ 2010-06-28 6:35 ` Barry Song
1 sibling, 0 replies; 15+ messages in thread
From: Barry Song @ 2010-06-28 6:35 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio, Barry.Song
On Fri, Jun 25, 2010 at 11:55 PM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Barry Song <21cnbao@gmail.com>
> ---
>
> =C2=A0Directly lifted form Barry Song's RFC. =C2=A0This pair apply to all=
current
> =C2=A0triggered sw ring buffer fills. =C2=A0We may want to futher unify t=
hings
> =C2=A0but to keep things easy to review lets do it in stages.
>
> =C2=A0drivers/staging/iio/accel/adis16209_ring.c | =C2=A0 20 +-----------=
---
> =C2=A0drivers/staging/iio/accel/adis16240_ring.c | =C2=A0 20 +-----------=
---
> =C2=A0drivers/staging/iio/accel/lis3l02dq_ring.c | =C2=A0 21 +-----------=
----
> =C2=A0drivers/staging/iio/adc/max1363_ring.c =C2=A0 =C2=A0 | =C2=A0 34 +-=
-------------------------
> =C2=A0drivers/staging/iio/gyro/adis16260_ring.c =C2=A0| =C2=A0 20 +------=
--------
> =C2=A0drivers/staging/iio/imu/adis16300_ring.c =C2=A0 | =C2=A0 20 +------=
--------
> =C2=A0drivers/staging/iio/imu/adis16350_ring.c =C2=A0 | =C2=A0 20 +------=
--------
> =C2=A0drivers/staging/iio/imu/adis16400_ring.c =C2=A0 | =C2=A0 20 +------=
--------
> =C2=A0drivers/staging/iio/industrialio-trigger.c | =C2=A0 18 ++++++++++++=
++
> =C2=A0drivers/staging/iio/trigger.h =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0| =C2=A0 =C2=A07 +++++
> =C2=A010 files changed, 41 insertions(+), 159 deletions(-)
>
> diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging=
/iio/accel/adis16209_ring.c
> index e8f7264..3b42a65 100644
> --- a/drivers/staging/iio/accel/adis16209_ring.c
> +++ b/drivers/staging/iio/accel/adis16209_ring.c
> @@ -186,22 +186,6 @@ static int adis16209_data_rdy_ring_preenable(struct =
iio_dev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
> =C2=A0}
>
> -static int adis16209_data_rdy_ring_postenable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_attach_p=
oll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> -static int adis16209_data_rdy_ring_predisable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_dettach_=
poll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> =C2=A0void adis16209_unconfigure_ring(struct iio_dev *indio_dev)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0kfree(indio_dev->pollfunc);
> @@ -237,8 +221,8 @@ int adis16209_configure_ring(struct iio_dev *indio_de=
v)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Effectively select the ring buffer implemen=
tation */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_sw_register_funcs(&ring->access);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->preenable =3D &adis16209_data_rdy_ring_p=
reenable;
> - =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &adis16209_data_rdy_ring_post=
enable;
> - =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &adis16209_data_rdy_ring_pred=
isable;
> + =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &iio_triggered_ring_postenabl=
e;
> + =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &iio_triggered_ring_predisabl=
e;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D iio_alloc_pollfunc(indio_dev, NULL, &a=
dis16209_poll_func_th);
> diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging=
/iio/accel/adis16240_ring.c
> index ab52bcf..08fef63 100644
> --- a/drivers/staging/iio/accel/adis16240_ring.c
> +++ b/drivers/staging/iio/accel/adis16240_ring.c
> @@ -176,22 +176,6 @@ static int adis16240_data_rdy_ring_preenable(struct =
iio_dev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
> =C2=A0}
>
> -static int adis16240_data_rdy_ring_postenable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_attach_p=
oll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> -static int adis16240_data_rdy_ring_predisable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_dettach_=
poll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> =C2=A0void adis16240_unconfigure_ring(struct iio_dev *indio_dev)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0kfree(indio_dev->pollfunc);
> @@ -225,8 +209,8 @@ int adis16240_configure_ring(struct iio_dev *indio_de=
v)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Effectively select the ring buffer implemen=
tation */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_sw_register_funcs(&ring->access);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->preenable =3D &adis16240_data_rdy_ring_p=
reenable;
> - =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &adis16240_data_rdy_ring_post=
enable;
> - =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &adis16240_data_rdy_ring_pred=
isable;
> + =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &iio_triggered_ring_postenabl=
e;
> + =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &iio_triggered_ring_predisabl=
e;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D iio_alloc_pollfunc(indio_dev, NULL, &a=
dis16240_poll_func_th);
> diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging=
/iio/accel/lis3l02dq_ring.c
> index 38c7340..bc0de78 100644
> --- a/drivers/staging/iio/accel/lis3l02dq_ring.c
> +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
> @@ -339,23 +339,6 @@ static int lis3l02dq_data_rdy_ring_preenable(struct =
iio_dev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
> =C2=A0}
>
> -static int lis3l02dq_data_rdy_ring_postenable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_attach_p=
oll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> -static int lis3l02dq_data_rdy_ring_predisable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_dettach_=
poll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> -
> =C2=A0/* Caller responsible for locking as necessary. */
> =C2=A0static int
> =C2=A0__lis3l02dq_write_data_ready_config(struct device *dev,
> @@ -562,8 +545,8 @@ int lis3l02dq_configure_ring(struct iio_dev *indio_de=
v)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Effectively select the ring buffer implemen=
tation */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_sw_register_funcs(&ring->access);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->preenable =3D &lis3l02dq_data_rdy_ring_p=
reenable;
> - =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &lis3l02dq_data_rdy_ring_post=
enable;
> - =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &lis3l02dq_data_rdy_ring_pred=
isable;
> + =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &iio_triggered_ring_postenabl=
e;
> + =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &iio_triggered_ring_predisabl=
e;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D iio_alloc_pollfunc(indio_dev, NULL, &l=
is3l02dq_poll_func_th);
> diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio=
/adc/max1363_ring.c
> index def7ffb..896973d 100644
> --- a/drivers/staging/iio/adc/max1363_ring.c
> +++ b/drivers/staging/iio/adc/max1363_ring.c
> @@ -106,36 +106,6 @@ static int max1363_ring_preenable(struct iio_dev *in=
dio_dev)
> =C2=A0}
>
> =C2=A0/**
> - * max1363_ring_postenable() typical ring post enable
> - *
> - * Only not moved into the core for the hardware ring buffer cases
> - * that are more sophisticated.
> - **/
> -static int max1363_ring_postenable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->trig =3D=3D NULL)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return 0;
> - =C2=A0 =C2=A0 =C2=A0 return iio_trigger_attach_poll_func(indio_dev->tri=
g,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 indio_dev->pollfunc);
> -}
> -
> -/**
> - * max1363_ring_predisable() runs just prior to ring buffer being disabl=
ed
> - *
> - * Typical predisable function which ensures that no trigger events can
> - * occur before we disable the ring buffer (and hence would have no idea
> - * what to do with them)
> - **/
> -static int max1363_ring_predisable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->trig)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return iio_trigger_det=
tach_poll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->pollfunc);
> - =C2=A0 =C2=A0 =C2=A0 else
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return 0;
> -}
> -
> -/**
> =C2=A0* max1363_poll_func_th() th of trigger launched polling to ring buf=
fer
> =C2=A0*
> =C2=A0* As sampling only occurs on i2c comms occuring, leave timestamping=
until
> @@ -228,9 +198,9 @@ int max1363_register_ring_funcs_and_init(struct iio_d=
ev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto error_dealloc=
ate_sw_rb;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Ring buffer functions - here trigger setup =
related */
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->ring->postenable =3D &max1363_ring_post=
enable;
> + =C2=A0 =C2=A0 =C2=A0 indio_dev->ring->postenable =3D &iio_triggered_rin=
g_postenable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->ring->preenable =3D &max1363_ring_p=
reenable;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->ring->predisable =3D &max1363_ring_pred=
isable;
> + =C2=A0 =C2=A0 =C2=A0 indio_dev->ring->predisable =3D &iio_triggered_rin=
g_predisable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0INIT_WORK(&st->poll_work, &max1363_poll_bh_to_=
ring);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Flag that polled ring buffering is possible=
*/
> diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/=
iio/gyro/adis16260_ring.c
> index bf3c2e8..05e7a69 100644
> --- a/drivers/staging/iio/gyro/adis16260_ring.c
> +++ b/drivers/staging/iio/gyro/adis16260_ring.c
> @@ -179,22 +179,6 @@ static int adis16260_data_rdy_ring_preenable(struct =
iio_dev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
> =C2=A0}
>
> -static int adis16260_data_rdy_ring_postenable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_attach_p=
oll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> -static int adis16260_data_rdy_ring_predisable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_dettach_=
poll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> =C2=A0void adis16260_unconfigure_ring(struct iio_dev *indio_dev)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0kfree(indio_dev->pollfunc);
> @@ -227,8 +211,8 @@ int adis16260_configure_ring(struct iio_dev *indio_de=
v)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Effectively select the ring buffer implemen=
tation */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_sw_register_funcs(&ring->access);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->preenable =3D &adis16260_data_rdy_ring_p=
reenable;
> - =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &adis16260_data_rdy_ring_post=
enable;
> - =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &adis16260_data_rdy_ring_pred=
isable;
> + =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &iio_triggered_ring_postenabl=
e;
> + =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &iio_triggered_ring_predisabl=
e;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D iio_alloc_pollfunc(indio_dev, NULL, &a=
dis16260_poll_func_th);
> diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/i=
io/imu/adis16300_ring.c
> index de39187..4dee670 100644
> --- a/drivers/staging/iio/imu/adis16300_ring.c
> +++ b/drivers/staging/iio/imu/adis16300_ring.c
> @@ -200,22 +200,6 @@ static int adis16300_data_rdy_ring_preenable(struct =
iio_dev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
> =C2=A0}
>
> -static int adis16300_data_rdy_ring_postenable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_attach_p=
oll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> -static int adis16300_data_rdy_ring_predisable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_dettach_=
poll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> =C2=A0void adis16300_unconfigure_ring(struct iio_dev *indio_dev)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0kfree(indio_dev->pollfunc);
> @@ -252,8 +236,8 @@ int adis16300_configure_ring(struct iio_dev *indio_de=
v)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Effectively select the ring buffer implemen=
tation */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_sw_register_funcs(&ring->access);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->preenable =3D &adis16300_data_rdy_ring_p=
reenable;
> - =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &adis16300_data_rdy_ring_post=
enable;
> - =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &adis16300_data_rdy_ring_pred=
isable;
> + =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &iio_triggered_ring_postenabl=
e;
> + =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &iio_triggered_ring_predisabl=
e;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D iio_alloc_pollfunc(indio_dev, NULL, &a=
dis16300_poll_func_th);
> diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/i=
io/imu/adis16350_ring.c
> index be9ce31..c70816d 100644
> --- a/drivers/staging/iio/imu/adis16350_ring.c
> +++ b/drivers/staging/iio/imu/adis16350_ring.c
> @@ -203,22 +203,6 @@ static int adis16350_data_rdy_ring_preenable(struct =
iio_dev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
> =C2=A0}
>
> -static int adis16350_data_rdy_ring_postenable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_attach_p=
oll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> -static int adis16350_data_rdy_ring_predisable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_dettach_=
poll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> =C2=A0void adis16350_unconfigure_ring(struct iio_dev *indio_dev)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0kfree(indio_dev->pollfunc);
> @@ -257,8 +241,8 @@ int adis16350_configure_ring(struct iio_dev *indio_de=
v)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Effectively select the ring buffer implemen=
tation */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_sw_register_funcs(&ring->access);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->preenable =3D &adis16350_data_rdy_ring_p=
reenable;
> - =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &adis16350_data_rdy_ring_post=
enable;
> - =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &adis16350_data_rdy_ring_pred=
isable;
> + =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &iio_triggered_ring_postenabl=
e;
> + =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &iio_triggered_ring_predisabl=
e;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D iio_alloc_pollfunc(indio_dev, NULL, &a=
dis16350_poll_func_th);
> diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/i=
io/imu/adis16400_ring.c
> index da24384..8f7d257 100644
> --- a/drivers/staging/iio/imu/adis16400_ring.c
> +++ b/drivers/staging/iio/imu/adis16400_ring.c
> @@ -209,22 +209,6 @@ static int adis16400_data_rdy_ring_preenable(struct =
iio_dev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
> =C2=A0}
>
> -static int adis16400_data_rdy_ring_postenable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_attach_p=
oll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> -static int adis16400_data_rdy_ring_predisable(struct iio_dev *indio_dev)
> -{
> - =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_dettach_=
poll_func(indio_dev->trig,
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> -}
> -
> =C2=A0void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0kfree(indio_dev->pollfunc);
> @@ -264,8 +248,8 @@ int adis16400_configure_ring(struct iio_dev *indio_de=
v)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Effectively select the ring buffer implemen=
tation */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_sw_register_funcs(&ring->access);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->preenable =3D &adis16400_data_rdy_ring_p=
reenable;
> - =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &adis16400_data_rdy_ring_post=
enable;
> - =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &adis16400_data_rdy_ring_pred=
isable;
> + =C2=A0 =C2=A0 =C2=A0 ring->postenable =3D &iio_triggered_ring_postenabl=
e;
> + =C2=A0 =C2=A0 =C2=A0 ring->predisable =3D &iio_triggered_ring_predisabl=
e;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D iio_alloc_pollfunc(indio_dev, NULL, &a=
dis16400_poll_func_th);
> diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging=
/iio/industrialio-trigger.c
> index 18ed09b..0f8ba14 100644
> --- a/drivers/staging/iio/industrialio-trigger.c
> +++ b/drivers/staging/iio/industrialio-trigger.c
> @@ -412,3 +412,21 @@ int iio_alloc_pollfunc(struct iio_dev *indio_dev,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
> =C2=A0}
> =C2=A0EXPORT_SYMBOL(iio_alloc_pollfunc);
> +
> +int iio_triggered_ring_postenable(struct iio_dev *indio_dev)
> +{
> + =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_attach_p=
oll_func(indio_dev->trig,
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0indio_dev->pollfunc)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> +}
> +EXPORT_SYMBOL(iio_triggered_ring_postenable);
> +
> +int iio_triggered_ring_predisable(struct iio_dev *indio_dev)
> +{
> + =C2=A0 =C2=A0 =C2=A0 return indio_dev->trig
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ? iio_trigger_dettach_=
poll_func(indio_dev->trig,
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 indio_dev->pollfunc)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : 0;
> +}
> +EXPORT_SYMBOL(iio_triggered_ring_predisable);
> diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.=
h
> index 10e9732..832de15 100644
> --- a/drivers/staging/iio/trigger.h
> +++ b/drivers/staging/iio/trigger.h
> @@ -152,6 +152,13 @@ int iio_alloc_pollfunc(struct iio_dev *indio_dev,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 void (*immediate)(struct iio_dev *indio_dev),
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 void (*main)(struct iio_dev =C2=A0*private_data));
>
> +/*
> + * Two functions for common case where all that happens is a pollfunc
> + * is attached and detached form a trigger
> + */
> +int iio_triggered_ring_postenable(struct iio_dev *indio_dev);
> +int iio_triggered_ring_predisable(struct iio_dev *indio_dev);
> +
> =C2=A0struct iio_trigger *iio_allocate_trigger(void);
>
> =C2=A0void iio_free_trigger(struct iio_trigger *trig);
> --
> 1.6.4.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at =C2=A0http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc
2010-06-25 15:55 ` [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc Jonathan Cameron
2010-06-25 15:55 ` [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers Jonathan Cameron
@ 2010-06-28 6:35 ` Barry Song
1 sibling, 0 replies; 15+ messages in thread
From: Barry Song @ 2010-06-28 6:35 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio, Barry.Song
On Fri, Jun 25, 2010 at 11:55 PM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Barry Song <21cnbao@gmail.com>
> ---
>
> =C2=A0Simple core function removes a lot of cut an paste code.
> =C2=A0This is of general use when pollfuncs are used.
>
> =C2=A0drivers/staging/iio/accel/adis16209_ring.c | =C2=A0 11 ++++-------
> =C2=A0drivers/staging/iio/accel/adis16240_ring.c | =C2=A0 11 ++++-------
> =C2=A0drivers/staging/iio/accel/lis3l02dq_ring.c | =C2=A0 =C2=A09 +++----=
--
> =C2=A0drivers/staging/iio/adc/max1363_ring.c =C2=A0 =C2=A0 | =C2=A0 =C2=
=A09 ++-------
> =C2=A0drivers/staging/iio/gyro/adis16260_ring.c =C2=A0| =C2=A0 11 ++++---=
----
> =C2=A0drivers/staging/iio/imu/adis16300_ring.c =C2=A0 | =C2=A0 11 ++++---=
----
> =C2=A0drivers/staging/iio/imu/adis16350_ring.c =C2=A0 | =C2=A0 11 ++++---=
----
> =C2=A0drivers/staging/iio/imu/adis16400_ring.c =C2=A0 | =C2=A0 11 ++++---=
----
> =C2=A0drivers/staging/iio/industrialio-trigger.c | =C2=A0 13 ++++++++++++=
+
> =C2=A0drivers/staging/iio/trigger.h =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0| =C2=A0 =C2=A05 ++++-
> =C2=A010 files changed, 46 insertions(+), 56 deletions(-)
>
> diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging=
/iio/accel/adis16209_ring.c
> index 8959ad8..e8f7264 100644
> --- a/drivers/staging/iio/accel/adis16209_ring.c
> +++ b/drivers/staging/iio/accel/adis16209_ring.c
> @@ -241,13 +241,10 @@ int adis16209_configure_ring(struct iio_dev *indio_=
dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->predisable =3D &adis16209_data_rdy_ring_=
predisable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D -ENOMEM;
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;;
> - =C2=A0 =C2=A0 =C2=A0 }
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D &adis16209=
_poll_func_th;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
> + =C2=A0 =C2=A0 =C2=A0 ret =3D iio_alloc_pollfunc(indio_dev, NULL, &adis1=
6209_poll_func_th);
> + =C2=A0 =C2=A0 =C2=A0 if (ret)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;
> +
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->modes |=3D INDIO_RING_TRIGGERED;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>
> diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging=
/iio/accel/adis16240_ring.c
> index 490d80e..ab52bcf 100644
> --- a/drivers/staging/iio/accel/adis16240_ring.c
> +++ b/drivers/staging/iio/accel/adis16240_ring.c
> @@ -229,13 +229,10 @@ int adis16240_configure_ring(struct iio_dev *indio_=
dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->predisable =3D &adis16240_data_rdy_ring_=
predisable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D -ENOMEM;
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;;
> - =C2=A0 =C2=A0 =C2=A0 }
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D &adis16240=
_poll_func_th;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
> + =C2=A0 =C2=A0 =C2=A0 ret =3D iio_alloc_pollfunc(indio_dev, NULL, &adis1=
6240_poll_func_th);
> + =C2=A0 =C2=A0 =C2=A0 if (ret)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;
> +
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->modes |=3D INDIO_RING_TRIGGERED;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>
> diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging=
/iio/accel/lis3l02dq_ring.c
> index a33599d..38c7340 100644
> --- a/drivers/staging/iio/accel/lis3l02dq_ring.c
> +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
> @@ -566,13 +566,9 @@ int lis3l02dq_configure_ring(struct iio_dev *indio_d=
ev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->predisable =3D &lis3l02dq_data_rdy_ring_=
predisable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D -ENOMEM;
> + =C2=A0 =C2=A0 =C2=A0 ret =3D iio_alloc_pollfunc(indio_dev, NULL, &lis3l=
02dq_poll_func_th);
> + =C2=A0 =C2=A0 =C2=A0 if (ret)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto error_iio_sw_=
rb_free;;
> - =C2=A0 =C2=A0 =C2=A0 }
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D &lis3l02dq=
_poll_func_th;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->modes |=3D INDIO_RING_TRIGGERED;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>
> @@ -592,3 +588,4 @@ void lis3l02dq_uninitialize_ring(struct iio_ring_buff=
er *ring)
> =C2=A0}
>
>
> +
> diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio=
/adc/max1363_ring.c
> index a49b3d7..def7ffb 100644
> --- a/drivers/staging/iio/adc/max1363_ring.c
> +++ b/drivers/staging/iio/adc/max1363_ring.c
> @@ -223,14 +223,9 @@ int max1363_register_ring_funcs_and_init(struct iio_=
dev *indio_dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0}
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Effectively select the ring buffer implemen=
tation */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_sw_register_funcs(&st->indio_dev->rin=
g->access);
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D -ENOMEM;
> + =C2=A0 =C2=A0 =C2=A0 ret =3D iio_alloc_pollfunc(indio_dev, NULL, &max13=
63_poll_func_th);
> + =C2=A0 =C2=A0 =C2=A0 if (ret)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto error_dealloc=
ate_sw_rb;
> - =C2=A0 =C2=A0 =C2=A0 }
> - =C2=A0 =C2=A0 =C2=A0 /* Configure the polling function called on trigge=
r interrupts */
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D &max1363_p=
oll_func_th;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Ring buffer functions - here trigger setup =
related */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->ring->postenable =3D &max1363_ring_=
postenable;
> diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/=
iio/gyro/adis16260_ring.c
> index 2fe7f02..bf3c2e8 100644
> --- a/drivers/staging/iio/gyro/adis16260_ring.c
> +++ b/drivers/staging/iio/gyro/adis16260_ring.c
> @@ -231,13 +231,10 @@ int adis16260_configure_ring(struct iio_dev *indio_=
dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->predisable =3D &adis16260_data_rdy_ring_=
predisable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D -ENOMEM;
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;;
> - =C2=A0 =C2=A0 =C2=A0 }
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D &adis16260=
_poll_func_th;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
> + =C2=A0 =C2=A0 =C2=A0 ret =3D iio_alloc_pollfunc(indio_dev, NULL, &adis1=
6260_poll_func_th);
> + =C2=A0 =C2=A0 =C2=A0 if (ret)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;
> +
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->modes |=3D INDIO_RING_TRIGGERED;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>
> diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/i=
io/imu/adis16300_ring.c
> index 17ceb72..de39187 100644
> --- a/drivers/staging/iio/imu/adis16300_ring.c
> +++ b/drivers/staging/iio/imu/adis16300_ring.c
> @@ -256,13 +256,10 @@ int adis16300_configure_ring(struct iio_dev *indio_=
dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->predisable =3D &adis16300_data_rdy_ring_=
predisable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D -ENOMEM;
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;;
> - =C2=A0 =C2=A0 =C2=A0 }
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D &adis16300=
_poll_func_th;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
> + =C2=A0 =C2=A0 =C2=A0 ret =3D iio_alloc_pollfunc(indio_dev, NULL, &adis1=
6300_poll_func_th);
> + =C2=A0 =C2=A0 =C2=A0 if (ret)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;
> +
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->modes |=3D INDIO_RING_TRIGGERED;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>
> diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/i=
io/imu/adis16350_ring.c
> index 2a0a465..be9ce31 100644
> --- a/drivers/staging/iio/imu/adis16350_ring.c
> +++ b/drivers/staging/iio/imu/adis16350_ring.c
> @@ -261,13 +261,10 @@ int adis16350_configure_ring(struct iio_dev *indio_=
dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->predisable =3D &adis16350_data_rdy_ring_=
predisable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D -ENOMEM;
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;;
> - =C2=A0 =C2=A0 =C2=A0 }
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D &adis16350=
_poll_func_th;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
> + =C2=A0 =C2=A0 =C2=A0 ret =3D iio_alloc_pollfunc(indio_dev, NULL, &adis1=
6350_poll_func_th);
> + =C2=A0 =C2=A0 =C2=A0 if (ret)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;
> +
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->modes |=3D INDIO_RING_TRIGGERED;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>
> diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/i=
io/imu/adis16400_ring.c
> index 5d94cdc..da24384 100644
> --- a/drivers/staging/iio/imu/adis16400_ring.c
> +++ b/drivers/staging/iio/imu/adis16400_ring.c
> @@ -268,13 +268,10 @@ int adis16400_configure_ring(struct iio_dev *indio_=
dev)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->predisable =3D &adis16400_data_rdy_ring_=
predisable;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0ring->owner =3D THIS_MODULE;
>
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ret =3D -ENOMEM;
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;;
> - =C2=A0 =C2=A0 =C2=A0 }
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D &adis16400=
_poll_func_th;
> - =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
> + =C2=A0 =C2=A0 =C2=A0 ret =3D iio_alloc_pollfunc(indio_dev, NULL, &adis1=
6400_poll_func_th);
> + =C2=A0 =C2=A0 =C2=A0 if (ret)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto error_iio_sw_rb_f=
ree;
> +
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->modes |=3D INDIO_RING_TRIGGERED;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
>
> diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging=
/iio/industrialio-trigger.c
> index 3c06808..18ed09b 100644
> --- a/drivers/staging/iio/industrialio-trigger.c
> +++ b/drivers/staging/iio/industrialio-trigger.c
> @@ -399,3 +399,16 @@ int iio_device_unregister_trigger_consumer(struct ii=
o_dev *dev_info)
> =C2=A0}
> =C2=A0EXPORT_SYMBOL(iio_device_unregister_trigger_consumer);
>
> +int iio_alloc_pollfunc(struct iio_dev *indio_dev,
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0void (*immediate)(struct iio_dev *indio_dev),
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0void (*main)(struct iio_dev =C2=A0*private_data))
> +{
> + =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc =3D kzalloc(sizeof(*indio_dev-=
>pollfunc), GFP_KERNEL);
> + =C2=A0 =C2=A0 =C2=A0 if (indio_dev->pollfunc =3D=3D NULL)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return -ENOMEM;
> + =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_immediate =3D immed=
iate;
> + =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->poll_func_main =3D main;
> + =C2=A0 =C2=A0 =C2=A0 indio_dev->pollfunc->private_data =3D indio_dev;
> + =C2=A0 =C2=A0 =C2=A0 return 0;
> +}
> +EXPORT_SYMBOL(iio_alloc_pollfunc);
> diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.=
h
> index 89610b5..10e9732 100644
> --- a/drivers/staging/iio/trigger.h
> +++ b/drivers/staging/iio/trigger.h
> @@ -148,9 +148,12 @@ struct iio_poll_func {
>
> =C2=A0};
>
> +int iio_alloc_pollfunc(struct iio_dev *indio_dev,
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0void (*immediate)(struct iio_dev *indio_dev),
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0void (*main)(struct iio_dev =C2=A0*private_data));
> +
> =C2=A0struct iio_trigger *iio_allocate_trigger(void);
>
> =C2=A0void iio_free_trigger(struct iio_trigger *trig);
>
> -
> =C2=A0#endif /* _IIO_TRIGGER_H_ */
> --
> 1.6.4.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at =C2=A0http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/6] Various cleanups.
2010-06-25 15:55 [PATCH 0/6] Various cleanups Jonathan Cameron
2010-06-25 15:55 ` [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name Jonathan Cameron
@ 2010-06-28 8:16 ` Barry Song
2010-06-28 9:50 ` Jonathan Cameron
1 sibling, 1 reply; 15+ messages in thread
From: Barry Song @ 2010-06-28 8:16 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio, Barry.Song
On Fri, Jun 25, 2010 at 11:55 PM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
> This patch set is the result of taking a look at Barry Song's
> RFC. =C2=A0The idea was to get the simple uncontroversial elements
> of that in place before we move on to discussion of the more
> involved elements.
Thanks a lot for your great help. I acked the three patches
abstracted from the discussion.
>
> One or two general cleanups have slipped in here as well.
>
> Jonathan Cameron (6):
> =C2=A0staging:iio: Use kasprintf to allocate and fill trig->name
> =C2=A0staging:iio:lis3l02dq remove unused set_ring_length function
> =C2=A0staging:iio: Add and convert drivers to use iio_alloc_pollfunc
> =C2=A0staging:iio: Add iio_triggered_ring postenable and predisable + use
> =C2=A0 =C2=A0in drivers
> =C2=A0staging:iio: remove timestamp field from trigger and pass instead
> =C2=A0 =C2=A0through pollfuncs
> =C2=A0staging:iio: replace combine_8_to_16 with be16_to_cpup where
> =C2=A0 =C2=A0possible.
>
> =C2=A0drivers/staging/iio/accel/adis16209_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | =C2=A0 51 ++++---------------
> =C2=A0drivers/staging/iio/accel/adis16209_trigger.c =C2=A0 =C2=A0 =C2=A0|=
=C2=A0 10 ++--
> =C2=A0drivers/staging/iio/accel/adis16240_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | =C2=A0 51 ++++---------------
> =C2=A0drivers/staging/iio/accel/adis16240_trigger.c =C2=A0 =C2=A0 =C2=A0|=
=C2=A0 10 ++--
> =C2=A0drivers/staging/iio/accel/lis3l02dq_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | =C2=A0 53 +++++---------------
> =C2=A0drivers/staging/iio/adc/max1363_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 | =C2=A0 45 ++---------------
> =C2=A0drivers/staging/iio/gyro/adis16260_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0| =C2=A0 51 ++++---------------
> =C2=A0drivers/staging/iio/gyro/adis16260_trigger.c =C2=A0 =C2=A0 =C2=A0 |=
=C2=A0 10 ++--
> =C2=A0drivers/staging/iio/imu/adis16300_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 | =C2=A0 51 ++++---------------
> =C2=A0drivers/staging/iio/imu/adis16300_trigger.c =C2=A0 =C2=A0 =C2=A0 =
=C2=A0| =C2=A0 10 ++--
> =C2=A0drivers/staging/iio/imu/adis16350_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 | =C2=A0 51 ++++---------------
> =C2=A0drivers/staging/iio/imu/adis16350_trigger.c =C2=A0 =C2=A0 =C2=A0 =
=C2=A0| =C2=A0 10 ++--
> =C2=A0drivers/staging/iio/imu/adis16400_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 | =C2=A0 51 ++++---------------
> =C2=A0drivers/staging/iio/imu/adis16400_trigger.c =C2=A0 =C2=A0 =C2=A0 =
=C2=A0| =C2=A0 10 ++--
> =C2=A0drivers/staging/iio/industrialio-trigger.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | =C2=A0 48 ++++++++++++++----
> =C2=A0drivers/staging/iio/trigger.h =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A0 24 ++++++---
> =C2=A0drivers/staging/iio/trigger/iio-trig-gpio.c =C2=A0 =C2=A0 =C2=A0 =
=C2=A0| =C2=A0 12 ++---
> =C2=A0.../staging/iio/trigger/iio-trig-periodic-rtc.c =C2=A0 =C2=A0| =C2=
=A0 15 ++----
> =C2=A018 files changed, 164 insertions(+), 399 deletions(-)
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at =C2=A0http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 0/6] Various cleanups.
2010-06-28 8:16 ` [PATCH 0/6] Various cleanups Barry Song
@ 2010-06-28 9:50 ` Jonathan Cameron
0 siblings, 0 replies; 15+ messages in thread
From: Jonathan Cameron @ 2010-06-28 9:50 UTC (permalink / raw)
To: Barry Song; +Cc: linux-iio, Barry.Song
On 06/28/10 09:16, Barry Song wrote:
> On Fri, Jun 25, 2010 at 11:55 PM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
>> This patch set is the result of taking a look at Barry Song's
>> RFC. The idea was to get the simple uncontroversial elements
>> of that in place before we move on to discussion of the more
>> involved elements.
> Thanks a lot for your great help. I acked the three patches
> abstracted from the discussion.
Thanks, though for some reason I only got the ack emails on patches
3 and 4. Which other one were you happy to ack? If you have a chane
to cast your eyes over 6 (the be16 one) just to check I got that the
right way round that would be great!
Thanks,
Jonathan
>
>>
>> One or two general cleanups have slipped in here as well.
>>
>> Jonathan Cameron (6):
>> staging:iio: Use kasprintf to allocate and fill trig->name
>> staging:iio:lis3l02dq remove unused set_ring_length function
>> staging:iio: Add and convert drivers to use iio_alloc_pollfunc
>> staging:iio: Add iio_triggered_ring postenable and predisable + use
>> in drivers
>> staging:iio: remove timestamp field from trigger and pass instead
>> through pollfuncs
>> staging:iio: replace combine_8_to_16 with be16_to_cpup where
>> possible.
>>
>> drivers/staging/iio/accel/adis16209_ring.c | 51 ++++---------------
>> drivers/staging/iio/accel/adis16209_trigger.c | 10 ++--
>> drivers/staging/iio/accel/adis16240_ring.c | 51 ++++---------------
>> drivers/staging/iio/accel/adis16240_trigger.c | 10 ++--
>> drivers/staging/iio/accel/lis3l02dq_ring.c | 53 +++++---------------
>> drivers/staging/iio/adc/max1363_ring.c | 45 ++---------------
>> drivers/staging/iio/gyro/adis16260_ring.c | 51 ++++---------------
>> drivers/staging/iio/gyro/adis16260_trigger.c | 10 ++--
>> drivers/staging/iio/imu/adis16300_ring.c | 51 ++++---------------
>> drivers/staging/iio/imu/adis16300_trigger.c | 10 ++--
>> drivers/staging/iio/imu/adis16350_ring.c | 51 ++++---------------
>> drivers/staging/iio/imu/adis16350_trigger.c | 10 ++--
>> drivers/staging/iio/imu/adis16400_ring.c | 51 ++++---------------
>> drivers/staging/iio/imu/adis16400_trigger.c | 10 ++--
>> drivers/staging/iio/industrialio-trigger.c | 48 ++++++++++++++----
>> drivers/staging/iio/trigger.h | 24 ++++++---
>> drivers/staging/iio/trigger/iio-trig-gpio.c | 12 ++---
>> .../staging/iio/trigger/iio-trig-periodic-rtc.c | 15 ++----
>> 18 files changed, 164 insertions(+), 399 deletions(-)
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name
2010-06-25 15:55 ` [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name Jonathan Cameron
2010-06-25 15:55 ` [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function Jonathan Cameron
@ 2010-06-29 10:18 ` Barry Song
1 sibling, 0 replies; 15+ messages in thread
From: Barry Song @ 2010-06-29 10:18 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio, Barry.Song
T24gRnJpLCBKdW4gMjUsIDIwMTAgYXQgMTE6NTUgUE0sIEpvbmF0aGFuIENhbWVyb24gPGppYzIz
QGNhbS5hYy51az4gd3JvdGU6Cj4KPiBTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBDYW1lcm9uIDxq
aWMyM0BjYW0uYWMudWs+CkFja2VkLWJ5OiBCYXJyeSBTb25nIDwyMWNuYmFvQGdtYWlsLmNvbT4K
PiAtLS0KPiDCoFRyaWdnZXIgbmFtZXMgd2VyZSBhbGxvY2F0ZWQgdGhlbiBmaWxsZWQuIGthc3By
aW50ZiBkb2VzIHRoaW5zCj4gwqBpbiBvbmUgZ28gYW5kIHJlbW92ZXMgdW5uZWNlc3NhcnkgcmVz
dHJpY3Rpb24gb24gbmFtZSBsZW5ndGguCj4KPiDCoGRyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwv
YWRpczE2MjA5X3RyaWdnZXIuYyDCoCDCoCDCoHwgwqAgwqA3ICsrKy0tLS0KPiDCoGRyaXZlcnMv
c3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3RyaWdnZXIuYyDCoCDCoCDCoHwgwqAgwqA3ICsr
Ky0tLS0KPiDCoGRyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYyDCoCDC
oCDCoCDCoCB8IMKgIMKgOCArKysrLS0tLQo+IMKgZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2Fk
aXMxNjI2MF90cmlnZ2VyLmMgwqAgwqAgwqAgfCDCoCDCoDcgKysrLS0tLQo+IMKgZHJpdmVycy9z
dGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3RyaWdnZXIuYyDCoCDCoCDCoCDCoHwgwqAgwqA3ICsr
Ky0tLS0KPiDCoGRyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF90cmlnZ2VyLmMgwqAg
wqAgwqAgwqB8IMKgIMKgNyArKystLS0tCj4gwqBkcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlz
MTY0MDBfdHJpZ2dlci5jIMKgIMKgIMKgIMKgfCDCoCDCoDcgKysrLS0tLQo+IMKgZHJpdmVycy9z
dGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jIMKgIMKgIMKgIMKgIHwgwqAgwqA5ICsr
Ky0tLS0tLQo+IMKgZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyLmggwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqB8IMKgIMKgNCAtLS0tCj4gwqBkcml2ZXJzL3N0YWdpbmcvaWlvL3Ry
aWdnZXIvaWlvLXRyaWctZ3Bpby5jIMKgIMKgIMKgIMKgfCDCoCDCoDkgKystLS0tLS0tCj4gwqAu
Li4vc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1wZXJpb2RpYy1ydGMuYyDCoCDCoHwgwqAg
MTIgKysrLS0tLS0tLS0tCj4gwqAxMSBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA1
NCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2Vs
L2FkaXMxNjIwOV90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIw
OV90cmlnZ2VyLmMKPiBpbmRleCA0YTA1MDdjLi5jZDkwMWE0IDEwMDY0NAo+IC0tLSBhL2RyaXZl
cnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3RyaWdnZXIuYwo+ICsrKyBiL2RyaXZlcnMv
c3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3RyaWdnZXIuYwo+IEBAIC04MywxNCArODMsMTMg
QEAgaW50IGFkaXMxNjIwOV9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYp
Cj4gwqAgwqAgwqAgwqBzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2
X2RhdGE7Cj4KPiDCoCDCoCDCoCDCoHN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsK
PiAtIMKgIMKgIMKgIHN0LT50cmlnLT5uYW1lID0ga21hbGxvYyhJSU9fVFJJR0dFUl9OQU1FX0xF
TkdUSCwgR0ZQX0tFUk5FTCk7Cj4gKyDCoCDCoCDCoCBzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50
ZihHRlBfS0VSTkVMLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAiYWRpczE2MjA5LWRldiVkIiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW5kaW9fZGV2LT5pZCk7Cj4gwqAgwqAgwqAgwqBp
ZiAoIXN0LT50cmlnLT5uYW1lKSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXQgPSAtRU5P
TUVNOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZ290byBlcnJvcl9mcmVlX3RyaWc7Cj4gwqAg
wqAgwqAgwqB9Cj4gLSDCoCDCoCDCoCBzbnByaW50ZigoY2hhciAqKXN0LT50cmlnLT5uYW1lLAo+
IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKPiAtIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgImFkaXMxNjIwOS1kZXYlZCIsIGluZGlvX2Rldi0+aWQpOwo+
IMKgIMKgIMKgIMKgc3QtPnRyaWctPmRldi5wYXJlbnQgPSAmc3QtPnVzLT5kZXY7Cj4gwqAgwqAg
wqAgwqBzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKPiDCoCDCoCDCoCDCoHN0LT50cmln
LT5wcml2YXRlX2RhdGEgPSBzdDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9h
Y2NlbC9hZGlzMTYyNDBfdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlz
MTYyNDBfdHJpZ2dlci5jCj4gaW5kZXggZGYxMzEyZS4uZDU4YjQwNSAxMDA2NDQKPiAtLS0gYS9k
cml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF90cmlnZ2VyLmMKPiArKysgYi9kcml2
ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF90cmlnZ2VyLmMKPiBAQCAtODMsMTQgKzgz
LDEzIEBAIGludCBhZGlzMTYyNDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9f
ZGV2KQo+IMKgIMKgIMKgIMKgc3RydWN0IGFkaXMxNjI0MF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYt
PmRldl9kYXRhOwo+Cj4gwqAgwqAgwqAgwqBzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2Vy
KCk7Cj4gLSDCoCDCoCDCoCBzdC0+dHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFN
RV9MRU5HVEgsIEdGUF9LRVJORUwpOwo+ICsgwqAgwqAgwqAgc3QtPnRyaWctPm5hbWUgPSBrYXNw
cmludGYoR0ZQX0tFUk5FTCwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgImFkaXMxNjI0MC1kZXYlZCIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGluZGlvX2Rldi0+aWQpOwo+IMKgIMKgIMKg
IMKgaWYgKCFzdC0+dHJpZy0+bmFtZSkgewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0g
LUVOT01FTTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdvdG8gZXJyb3JfZnJlZV90cmlnOwo+
IMKgIMKgIMKgIMKgfQo+IC0gwqAgwqAgwqAgc25wcmludGYoKGNoYXIgKilzdC0+dHJpZy0+bmFt
ZSwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsCj4g
LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCJhZGlzMTYyNDAtZGV2JWQiLCBpbmRpb19kZXYtPmlk
KTsKPiDCoCDCoCDCoCDCoHN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2Owo+IMKg
IMKgIMKgIMKgc3QtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7Cj4gwqAgwqAgwqAgwqBzdC0+
dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9p
aW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlz
M2wwMmRxX3JpbmcuYwo+IGluZGV4IGU0ZTIwMmUuLjY5ZTI3ODcgMTAwNjQ0Cj4gLS0tIGEvZHJp
dmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jCj4gKysrIGIvZHJpdmVycy9z
dGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jCj4gQEAgLTQ5NSwxNCArNDk1LDE0IEBA
IGludCBsaXMzbDAyZHFfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQo+
IMKgIMKgIMKgIMKgaWYgKCFzdGF0ZS0+dHJpZykKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJl
dHVybiAtRU5PTUVNOwo+Cj4gLSDCoCDCoCDCoCBzdGF0ZS0+dHJpZy0+bmFtZSA9IGttYWxsb2Mo
SUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsIEdGUF9LRVJORUwpOwo+ICsgwqAgwqAgwqAgc3RhdGUt
PnRyaWctPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwKPiArIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJsaXMzbDAyZHEtZGV2JWQiLAo+
ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
aW5kaW9fZGV2LT5pZCk7Cj4gwqAgwqAgwqAgwqBpZiAoIXN0YXRlLT50cmlnLT5uYW1lKSB7Cj4g
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXQgPSAtRU5PTUVNOwo+IMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgZ290byBlcnJvcl9mcmVlX3RyaWc7Cj4gwqAgwqAgwqAgwqB9Cj4gLSDCoCDCoCDCoCBz
bnByaW50ZigoY2hhciAqKXN0YXRlLT50cmlnLT5uYW1lLAo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
ImxpczNsMDJkcS1kZXYlZCIsIGluZGlvX2Rldi0+aWQpOwo+ICsKPiDCoCDCoCDCoCDCoHN0YXRl
LT50cmlnLT5kZXYucGFyZW50ID0gJnN0YXRlLT51cy0+ZGV2Owo+IMKgIMKgIMKgIMKgc3RhdGUt
PnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7Cj4gwqAgwqAgwqAgwqBzdGF0ZS0+dHJpZy0+cHJp
dmF0ZV9kYXRhID0gc3RhdGU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3ly
by9hZGlzMTYyNjBfdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2
MF90cmlnZ2VyLmMKPiBpbmRleCBiM2M1NjU5Li41NGFmZDllIDEwMDY0NAo+IC0tLSBhL2RyaXZl
cnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfdHJpZ2dlci5jCj4gKysrIGIvZHJpdmVycy9z
dGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF90cmlnZ2VyLmMKPiBAQCAtODMsMTQgKzgzLDEzIEBA
IGludCBhZGlzMTYyNjBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQo+
IMKgIMKgIMKgIMKgc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9k
YXRhOwo+Cj4gwqAgwqAgwqAgwqBzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Cj4g
LSDCoCDCoCDCoCBzdC0+dHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5H
VEgsIEdGUF9LRVJORUwpOwo+ICsgwqAgwqAgwqAgc3QtPnRyaWctPm5hbWUgPSBrYXNwcmludGYo
R0ZQX0tFUk5FTCwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgImFkaXMxNjI2MC1kZXYlZCIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGluZGlvX2Rldi0+aWQpOwo+IMKgIMKgIMKgIMKgaWYg
KCFzdC0+dHJpZy0+bmFtZSkgewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gLUVOT01F
TTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdvdG8gZXJyb3JfZnJlZV90cmlnOwo+IMKgIMKg
IMKgIMKgfQo+IC0gwqAgwqAgwqAgc25wcmludGYoKGNoYXIgKilzdC0+dHJpZy0+bmFtZSwKPiAt
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsCj4gLSDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCJhZGlzMTYyNjAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKPiDC
oCDCoCDCoCDCoHN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2Owo+IMKgIMKgIMKg
IMKgc3QtPnRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7Cj4gwqAgwqAgwqAgwqBzdC0+dHJpZy0+
cHJpdmF0ZV9kYXRhID0gc3Q7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11
L2FkaXMxNjMwMF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDBf
dHJpZ2dlci5jCj4gaW5kZXggNTRlZGIyMC4uYTU1ZjM4MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz
L3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDBfdHJpZ2dlci5jCj4gKysrIGIvZHJpdmVycy9zdGFn
aW5nL2lpby9pbXUvYWRpczE2MzAwX3RyaWdnZXIuYwo+IEBAIC04NiwxNCArODYsMTMgQEAgaW50
IGFkaXMxNjMwMF9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCj4gwqAg
wqAgwqAgwqBzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7
Cj4KPiDCoCDCoCDCoCDCoHN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKPiAtIMKg
IMKgIMKgIHN0LT50cmlnLT5uYW1lID0ga21hbGxvYyhJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwg
R0ZQX0tFUk5FTCk7Cj4gKyDCoCDCoCDCoCBzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBf
S0VSTkVMLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAiYWRpczE2MzAwLWRldiVkIiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgaW5kaW9fZGV2LT5pZCk7Cj4gwqAgwqAgwqAgwqBpZiAoIXN0
LT50cmlnLT5uYW1lKSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXQgPSAtRU5PTUVNOwo+
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZ290byBlcnJvcl9mcmVlX3RyaWc7Cj4gwqAgwqAgwqAg
wqB9Cj4gLSDCoCDCoCDCoCBzbnByaW50ZigoY2hhciAqKXN0LT50cmlnLT5uYW1lLAo+IC0gwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKPiAtIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgImFkaXMxNjMwMC1kZXYlZCIsIGluZGlvX2Rldi0+aWQpOwo+IMKgIMKg
IMKgIMKgc3QtPnRyaWctPmRldi5wYXJlbnQgPSAmc3QtPnVzLT5kZXY7Cj4gwqAgwqAgwqAgwqBz
dC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKPiDCoCDCoCDCoCDCoHN0LT50cmlnLT5wcml2
YXRlX2RhdGEgPSBzdDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRp
czE2MzUwX3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF90cmln
Z2VyLmMKPiBpbmRleCAxZmZhNzVkLi5mYmUyNDZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3Rh
Z2luZy9paW8vaW11L2FkaXMxNjM1MF90cmlnZ2VyLmMKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcv
aWlvL2ltdS9hZGlzMTYzNTBfdHJpZ2dlci5jCj4gQEAgLTg2LDE0ICs4NiwxMyBAQCBpbnQgYWRp
czE2MzUwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKPiDCoCDCoCDC
oCDCoHN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKPgo+
IMKgIMKgIMKgIMKgc3QtPnRyaWcgPSBpaW9fYWxsb2NhdGVfdHJpZ2dlcigpOwo+IC0gwqAgwqAg
wqAgc3QtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBf
S0VSTkVMKTsKPiArIMKgIMKgIMKgIHN0LT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJO
RUwsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCJhZGlzMTYzNTAtZGV2JWQiLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqBpbmRpb19kZXYtPmlkKTsKPiDCoCDCoCDCoCDCoGlmICghc3QtPnRy
aWctPm5hbWUpIHsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9IC1FTk9NRU07Cj4gwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqBnb3RvIGVycm9yX2ZyZWVfdHJpZzsKPiDCoCDCoCDCoCDCoH0K
PiAtIMKgIMKgIMKgIHNucHJpbnRmKChjaGFyICopc3QtPnRyaWctPm5hbWUsCj4gLSDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoElJT19UUklHR0VSX05BTUVfTEVOR1RILAo+IC0gwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAiYWRpczE2MzUwLWRldiVkIiwgaW5kaW9fZGV2LT5pZCk7Cj4gwqAgwqAgwqAg
wqBzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKPiDCoCDCoCDCoCDCoHN0LT50
cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwo+IMKgIMKgIMKgIMKgc3QtPnRyaWctPnByaXZhdGVf
ZGF0YSA9IHN0Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0
MDBfdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3RyaWdnZXIu
Ywo+IGluZGV4IDNiMzI1MGEuLmJmN2M2MDMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5n
L2lpby9pbXUvYWRpczE2NDAwX3RyaWdnZXIuYwo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8v
aW11L2FkaXMxNjQwMF90cmlnZ2VyLmMKPiBAQCAtODYsMTQgKzg2LDEzIEBAIGludCBhZGlzMTY0
MDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQo+IMKgIMKgIMKgIMKg
c3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwo+Cj4gwqAg
wqAgwqAgwqBzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Cj4gLSDCoCDCoCDCoCBz
dC0+dHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsIEdGUF9LRVJO
RUwpOwo+ICsgwqAgwqAgwqAgc3QtPnRyaWctPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwK
PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgImFk
aXMxNjQwMC1kZXYlZCIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoGluZGlvX2Rldi0+aWQpOwo+IMKgIMKgIMKgIMKgaWYgKCFzdC0+dHJpZy0+
bmFtZSkgewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmV0ID0gLUVOT01FTTsKPiDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoGdvdG8gZXJyb3JfZnJlZV90cmlnOwo+IMKgIMKgIMKgIMKgfQo+IC0g
wqAgwqAgwqAgc25wcmludGYoKGNoYXIgKilzdC0+dHJpZy0+bmFtZSwKPiAtIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsCj4gLSDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCJhZGlzMTY0MDAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKPiDCoCDCoCDCoCDCoHN0
LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2Owo+IMKgIMKgIMKgIMKgc3QtPnRyaWct
Pm93bmVyID0gVEhJU19NT0RVTEU7Cj4gwqAgwqAgwqAgwqBzdC0+dHJpZy0+cHJpdmF0ZV9kYXRh
ID0gc3Q7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRy
aWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYwo+IGlu
ZGV4IDU2ODJlNjEuLjNjMDY4MDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9p
bmR1c3RyaWFsaW8tdHJpZ2dlci5jCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3Ry
aWFsaW8tdHJpZ2dlci5jCj4gQEAgLTI5NiwxMCArMjk2LDkgQEAgc3RhdGljIHNzaXplX3QgaWlv
X3RyaWdnZXJfcmVhZF9jdXJyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKPiDCoCDCoCDCoCDCoHN0
cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+IMKgIMKgIMKg
IMKgaW50IGxlbiA9IDA7Cj4gwqAgwqAgwqAgwqBpZiAoZGV2X2luZm8tPnRyaWcpCj4gLSDCoCDC
oCDCoCDCoCDCoCDCoCDCoCBsZW4gPSBzbnByaW50ZihidWYsCj4gLSDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoElJT19UUklHR0VSX05BTUVfTEVOR1RILAo+IC0g
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAiJXNcbiIsCj4gLSDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRldl9pbmZvLT50cmln
LT5uYW1lKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9IHNwcmludGYoYnVmLAo+ICsg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIiVzXG4iLAo+ICsgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGV2X2luZm8tPnRyaWctPm5h
bWUpOwo+IMKgIMKgIMKgIMKgcmV0dXJuIGxlbjsKPiDCoH0KPgo+IEBAIC0zMjQsOCArMzIzLDYg
QEAgc3RhdGljIHNzaXplX3QgaWlvX3RyaWdnZXJfd3JpdGVfY3VycmVudChzdHJ1Y3QgZGV2aWNl
ICpkZXYsCj4gwqAgwqAgwqAgwqB9Cj4gwqAgwqAgwqAgwqBtdXRleF91bmxvY2soJmRldl9pbmZv
LT5tbG9jayk7Cj4KPiAtIMKgIMKgIMKgIGxlbiA9IGxlbiA8IElJT19UUklHR0VSX05BTUVfTEVO
R1RIID8gbGVuIDogSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEg7Cj4gLQo+IMKgIMKgIMKgIMKgZGV2
X2luZm8tPnRyaWcgPSBpaW9fdHJpZ2dlcl9maW5kX2J5X25hbWUoYnVmLCBsZW4pOwo+IMKgIMKg
IMKgIMKgaWYgKG9sZHRyaWcgJiYgZGV2X2luZm8tPnRyaWcgIT0gb2xkdHJpZykKPiDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoGlpb19wdXRfdHJpZ2dlcihvbGR0cmlnKTsKPiBkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdn
ZXIuaAo+IGluZGV4IDc4NGU3YjYuLjg5NjEwYjUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFn
aW5nL2lpby90cmlnZ2VyLmgKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIuaAo+
IEBAIC04LDEwICs4LDYgQEAKPiDCoCovCj4gwqAjaWZuZGVmIF9JSU9fVFJJR0dFUl9IXwo+IMKg
I2RlZmluZSBfSUlPX1RSSUdHRVJfSF8KPiAtI2RlZmluZSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdU
SCAyMAo+IC0jZGVmaW5lIElJT19UUklHR0VSX0lEX1BSRUZJWCAiaWlvOnRyaWdnZXIiCj4gLSNk
ZWZpbmUgSUlPX1RSSUdHRVJfSURfRk9STUFUIElJT19UUklHR0VSX0lEX1BSRUZJWCAiJWQiCj4g
LQo+Cj4gwqAvKioKPiDCoCogc3RydWN0IGlpb190cmlnZ2VyIC0gaW5kdXN0cmlhbCBJL08gdHJp
Z2dlciBkZXZpY2UKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lp
by10cmlnLWdwaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1ncGlv
LmMKPiBpbmRleCAxZGEyODVkLi4zYzA2MTRlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2lu
Zy9paW8vdHJpZ2dlci9paW8tdHJpZy1ncGlvLmMKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlv
L3RyaWdnZXIvaWlvLXRyaWctZ3Bpby5jCj4gQEAgLTkzLDE2ICs5MywxMSBAQCBzdGF0aWMgaW50
IGlpb19ncGlvX3RyaWdnZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRyaWctPnByaXZhdGVfZGF0YSA9IHRy
aWdfaW5mbzsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRyaWdfaW5mby0+
aXJxID0gaXJxOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdHJpZy0+b3du
ZXIgPSBUSElTX01PRFVMRTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRy
aWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILAo+IC0gwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgR0ZQX0tFUk5F
TCk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIXRyaWctPm5hbWUp
IHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRyaWctPm5hbWUgPSBrYXNw
cmludGYoR0ZQX0tFUk5FTCwgImlycXRyaWclZCIsIGlycSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCBpZiAodHJpZy0+bmFtZSA9PSBOVUxMKSB7Cj4gwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXQgPSAtRU5PTUVNOwo+IMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZ290byBlcnJvcl9mcmVl
X3RyaWdfaW5mbzsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KPiAtIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNucHJpbnRmKChjaGFyICopdHJpZy0+bmFt
ZSwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSUlP
X1RSSUdHRVJfTkFNRV9MRU5HVEgsCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCJpcnF0cmlnJWQiLCBpcnEpOwo+IC0KPiDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoHJldCA9IHJlcXVlc3RfaXJxKGlycSwgaWlvX2dwaW9fdHJpZ2dl
cl9wb2xsLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgaXJxZmxhZ3MsIHRyaWctPm5hbWUsIHRyaWcpOwo+IMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKHJldCkgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJz
L3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctcGVyaW9kaWMtcnRjLmMgYi9kcml2ZXJzL3N0
YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctcGVyaW9kaWMtcnRjLmMKPiBpbmRleCA0ZWUzYWUx
Li5kOGM1OGNiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8t
dHJpZy1wZXJpb2RpYy1ydGMuYwo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9p
aW8tdHJpZy1wZXJpb2RpYy1ydGMuYwo+IEBAIC0yNSw3ICsyNSw2IEBAIHN0YXRpYyBERUZJTkVf
TVVURVgoaWlvX3BydGNfdHJpZ2dlcl9saXN0X2xvY2spOwo+IMKgc3RydWN0IGlpb19wcnRjX3Ry
aWdnZXJfaW5mbyB7Cj4gwqAgwqAgwqAgwqBzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwo+IMKgIMKg
IMKgIMKgaW50IGZyZXF1ZW5jeTsKPiAtIMKgIMKgIMKgIGNoYXIgKm5hbWU7Cj4gwqAgwqAgwqAg
wqBzdHJ1Y3QgcnRjX3Rhc2sgdGFzazsKPiDCoH07Cj4KPiBAQCAtNzgsOCArNzcsNyBAQCBzdGF0
aWMgc3NpemVfdCBpaW9fdHJpZ19wZXJpb2RpY19yZWFkX25hbWUoc3RydWN0IGRldmljZSAqZGV2
LAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIGNoYXIgKmJ1ZikKPiDCoHsKPiDCoCDCoCDCoCDCoHN0cnVjdCBpaW9fdHJpZ2dl
ciAqdHJpZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+IC0gwqAgwqAgwqAgc3RydWN0IGlpb19w
cnRjX3RyaWdnZXJfaW5mbyAqdHJpZ19pbmZvID0gdHJpZy0+cHJpdmF0ZV9kYXRhOwo+IC0gwqAg
wqAgwqAgcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRyaWdfaW5mby0+bmFtZSk7Cj4gKyDC
oCDCoCDCoCByZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdHJpZy0+bmFtZSk7Cj4gwqB9Cj4K
PiDCoHN0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLAo+IEBAIC0xMjksMTYgKzEyNywx
MiBAQCBzdGF0aWMgaW50IGlpb190cmlnX3BlcmlvZGljX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZv
cm1fZGV2aWNlICpkZXYpCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0cmlnLT5wcml2YXRlX2Rh
dGEgPSB0cmlnX2luZm87Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0cmlnLT5vd25lciA9IFRI
SVNfTU9EVUxFOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdHJpZy0+c2V0X3RyaWdnZXJfc3Rh
dGUgPSAmaWlvX3RyaWdfcGVyaW9kaWNfcnRjX3NldF9zdGF0ZTsKPiAtIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIHRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBf
S0VSTkVMKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRyaWctPm5hbWUgPSBrYXNwcmludGYo
R0ZQX0tFUk5FTCwgInBlcmlvZGljJXMiLCBwZGF0YVtpXSk7Cj4gwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqBpZiAodHJpZy0+bmFtZSA9PSBOVUxMKSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqByZXQgPSAtRU5PTUVNOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgZ290byBlcnJvcl9mcmVlX3RyaWdfaW5mbzsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oH0KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNucHJpbnRmKChjaGFyICopdHJpZy0+bmFtZSwK
PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSUlPX1RSSUdHRVJfTkFNRV9M
RU5HVEgsCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCJwZXJpb2RpYyVz
IiwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcGRhdGFbaV0pOwo+IC0g
wqAgwqAgwqAgwqAgwqAgwqAgwqAgdHJpZ19pbmZvLT5uYW1lID0gKGNoYXIgKil0cmlnLT5uYW1l
Owo+ICsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qIFJUQyBhY2Nlc3MgKi8KPiDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoHRyaWdfaW5mby0+cnRjCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqA9IHJ0Y19jbGFzc19vcGVuKHBkYXRhW2ldKTsKPiAtLQo+IDEuNi40LjQKPgo+
IC0tCj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vi
c2NyaWJlIGxpbnV4LWlpbyIgaW4KPiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21v
QHZnZXIua2VybmVsLm9yZwo+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgwqBodHRwOi8vdmdlci5r
ZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs
2010-06-25 15:55 ` [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs Jonathan Cameron
2010-06-25 15:55 ` [PATCH 6/6] staging:iio: replace combine_8_to_16 with be16_to_cpup where possible Jonathan Cameron
@ 2010-06-29 10:30 ` Barry Song
1 sibling, 0 replies; 15+ messages in thread
From: Barry Song @ 2010-06-29 10:30 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio, Barry.Song
Delete redundant timestamp copy, it makes much sense. But i think
time_stamp is more like a common field needed by all iio devices. If
we will have a common iio_state as my patch, i think your this patch
is really good to me. If no, maybe deleting time_stamp in state
struct and keeping the common layer timestamp makes more sense?
On Fri, Jun 25, 2010 at 11:55 PM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
> =C2=A0Noticed this in passing. =C2=A0The trig->timestamp value was simply
> =C2=A0used to pass the timestamp into iio_trigger_poll and to functions
> =C2=A0called from there. =C2=A0Lets move it to a function parameter to ma=
ke
> =C2=A0code easier to follow.
>
> =C2=A0drivers/staging/iio/accel/adis16209_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | =C2=A0 =C2=A04 ++--
> =C2=A0drivers/staging/iio/accel/adis16209_trigger.c =C2=A0 =C2=A0 =C2=A0|=
=C2=A0 =C2=A03 +--
> =C2=A0drivers/staging/iio/accel/adis16240_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | =C2=A0 =C2=A04 ++--
> =C2=A0drivers/staging/iio/accel/adis16240_trigger.c =C2=A0 =C2=A0 =C2=A0|=
=C2=A0 =C2=A03 +--
> =C2=A0drivers/staging/iio/accel/lis3l02dq_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | =C2=A0 =C2=A09 ++++-----
> =C2=A0drivers/staging/iio/adc/max1363_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 | =C2=A0 =C2=A02 +-
> =C2=A0drivers/staging/iio/gyro/adis16260_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0| =C2=A0 =C2=A04 ++--
> =C2=A0drivers/staging/iio/gyro/adis16260_trigger.c =C2=A0 =C2=A0 =C2=A0 |=
=C2=A0 =C2=A03 +--
> =C2=A0drivers/staging/iio/imu/adis16300_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 | =C2=A0 =C2=A04 ++--
> =C2=A0drivers/staging/iio/imu/adis16300_trigger.c =C2=A0 =C2=A0 =C2=A0 =
=C2=A0| =C2=A0 =C2=A03 +--
> =C2=A0drivers/staging/iio/imu/adis16350_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 | =C2=A0 =C2=A04 ++--
> =C2=A0drivers/staging/iio/imu/adis16350_trigger.c =C2=A0 =C2=A0 =C2=A0 =
=C2=A0| =C2=A0 =C2=A03 +--
> =C2=A0drivers/staging/iio/imu/adis16400_ring.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 | =C2=A0 =C2=A04 ++--
> =C2=A0drivers/staging/iio/imu/adis16400_trigger.c =C2=A0 =C2=A0 =C2=A0 =
=C2=A0| =C2=A0 =C2=A03 +--
> =C2=A0drivers/staging/iio/industrialio-trigger.c =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | =C2=A0 10 +++++-----
> =C2=A0drivers/staging/iio/trigger.h =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A0 12 +++++++-----
> =C2=A0drivers/staging/iio/trigger/iio-trig-gpio.c =C2=A0 =C2=A0 =C2=A0 =
=C2=A0| =C2=A0 =C2=A03 ++-
> =C2=A0.../staging/iio/trigger/iio-trig-periodic-rtc.c =C2=A0 =C2=A0| =C2=
=A0 =C2=A03 ++-
> =C2=A018 files changed, 39 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging=
/iio/accel/adis16209_ring.c
> index 3b42a65..ad71538 100644
> --- a/drivers/staging/iio/accel/adis16209_ring.c
> +++ b/drivers/staging/iio/accel/adis16209_ring.c
> @@ -68,10 +68,10 @@ static struct attribute_group adis16209_scan_el_group=
=3D {
> =C2=A0* adis16209_poll_func_th() top half interrupt handler called by tri=
gger
> =C2=A0* @private_data: =C2=A0 =C2=A0 =C2=A0iio_dev
> =C2=A0**/
> -static void adis16209_poll_func_th(struct iio_dev *indio_dev)
> +static void adis16209_poll_func_th(struct iio_dev *indio_dev, s64 time)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16209_state *st =3D iio_dev_get_dev=
data(indio_dev);
> - =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D indio_dev->trig->timestamp;
> + =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D time;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0schedule_work(&st->work_trigger_to_ring);
> =C2=A0}
>
> diff --git a/drivers/staging/iio/accel/adis16209_trigger.c b/drivers/stag=
ing/iio/accel/adis16209_trigger.c
> index cd901a4..1487eff 100644
> --- a/drivers/staging/iio/accel/adis16209_trigger.c
> +++ b/drivers/staging/iio/accel/adis16209_trigger.c
> @@ -23,8 +23,7 @@ static int adis16209_data_rdy_trig_poll(struct iio_dev =
*dev_info,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16209_state *st =3D iio_dev_get_dev=
data(dev_info);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct iio_trigger *trig =3D st->trig;
>
> - =C2=A0 =C2=A0 =C2=A0 trig->timestamp =3D timestamp;
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig);
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig, timestamp);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return IRQ_HANDLED;
> =C2=A0}
> diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging=
/iio/accel/adis16240_ring.c
> index 08fef63..5cced2e 100644
> --- a/drivers/staging/iio/accel/adis16240_ring.c
> +++ b/drivers/staging/iio/accel/adis16240_ring.c
> @@ -62,10 +62,10 @@ static struct attribute_group adis16240_scan_el_group=
=3D {
> =C2=A0* adis16240_poll_func_th() top half interrupt handler called by tri=
gger
> =C2=A0* @private_data: =C2=A0 =C2=A0 =C2=A0iio_dev
> =C2=A0**/
> -static void adis16240_poll_func_th(struct iio_dev *indio_dev)
> +static void adis16240_poll_func_th(struct iio_dev *indio_dev, s64 time)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16240_state *st =3D iio_dev_get_dev=
data(indio_dev);
> - =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D indio_dev->trig->timestamp;
> + =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D time;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0schedule_work(&st->work_trigger_to_ring);
> =C2=A0}
>
> diff --git a/drivers/staging/iio/accel/adis16240_trigger.c b/drivers/stag=
ing/iio/accel/adis16240_trigger.c
> index d58b405..2ba71fd 100644
> --- a/drivers/staging/iio/accel/adis16240_trigger.c
> +++ b/drivers/staging/iio/accel/adis16240_trigger.c
> @@ -23,8 +23,7 @@ static int adis16240_data_rdy_trig_poll(struct iio_dev =
*dev_info,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16240_state *st =3D iio_dev_get_dev=
data(dev_info);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct iio_trigger *trig =3D st->trig;
>
> - =C2=A0 =C2=A0 =C2=A0 trig->timestamp =3D timestamp;
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig);
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig, timestamp);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return IRQ_HANDLED;
> =C2=A0}
> diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging=
/iio/accel/lis3l02dq_ring.c
> index bc0de78..28d95ed 100644
> --- a/drivers/staging/iio/accel/lis3l02dq_ring.c
> +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
> @@ -103,10 +103,10 @@ static struct attribute_group lis3l02dq_scan_el_gro=
up =3D {
> =C2=A0* lis3l02dq_poll_func_th() top half interrupt handler called by tri=
gger
> =C2=A0* @private_data: =C2=A0 =C2=A0 =C2=A0iio_dev
> =C2=A0**/
> -static void lis3l02dq_poll_func_th(struct iio_dev *indio_dev)
> +static void lis3l02dq_poll_func_th(struct iio_dev *indio_dev, s64 time)
> =C2=A0{
> - =C2=A0struct lis3l02dq_state *st =3D iio_dev_get_devdata(indio_dev);
> - =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D indio_dev->trig->timestamp;
> + =C2=A0 =C2=A0 =C2=A0 struct lis3l02dq_state *st =3D iio_dev_get_devdata=
(indio_dev);
> + =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D time;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0schedule_work(&st->work_trigger_to_ring);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Indicate that this interrupt is being handl=
ed */
>
> @@ -128,8 +128,7 @@ static int lis3l02dq_data_rdy_trig_poll(struct iio_de=
v *dev_info,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct lis3l02dq_state *st =3D iio_dev_get_dev=
data(dev_info);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct iio_trigger *trig =3D st->trig;
>
> - =C2=A0 =C2=A0 =C2=A0 trig->timestamp =3D timestamp;
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig);
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig, timestamp);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return IRQ_HANDLED;
> =C2=A0}
> diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio=
/adc/max1363_ring.c
> index 896973d..1e0ad9d 100644
> --- a/drivers/staging/iio/adc/max1363_ring.c
> +++ b/drivers/staging/iio/adc/max1363_ring.c
> @@ -112,7 +112,7 @@ static int max1363_ring_preenable(struct iio_dev *ind=
io_dev)
> =C2=A0* then. =C2=A0Some triggers will generate their own time stamp. =C2=
=A0Currently
> =C2=A0* there is no way of notifying them when no one cares.
> =C2=A0**/
> -static void max1363_poll_func_th(struct iio_dev *indio_dev)
> +static void max1363_poll_func_th(struct iio_dev *indio_dev, s64 time)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct max1363_state *st =3D indio_dev->dev_da=
ta;
>
> diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/=
iio/gyro/adis16260_ring.c
> index 05e7a69..97d7660 100644
> --- a/drivers/staging/iio/gyro/adis16260_ring.c
> +++ b/drivers/staging/iio/gyro/adis16260_ring.c
> @@ -59,10 +59,10 @@ static struct attribute_group adis16260_scan_el_group=
=3D {
> =C2=A0* adis16260_poll_func_th() top half interrupt handler called by tri=
gger
> =C2=A0* @private_data: =C2=A0 =C2=A0 =C2=A0iio_dev
> =C2=A0**/
> -static void adis16260_poll_func_th(struct iio_dev *indio_dev)
> +static void adis16260_poll_func_th(struct iio_dev *indio_dev, s64 time)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16260_state *st =3D iio_dev_get_dev=
data(indio_dev);
> - =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D indio_dev->trig->timestamp;
> + =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D time;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0schedule_work(&st->work_trigger_to_ring);
> =C2=A0}
>
> diff --git a/drivers/staging/iio/gyro/adis16260_trigger.c b/drivers/stagi=
ng/iio/gyro/adis16260_trigger.c
> index 54afd9e..de01537 100644
> --- a/drivers/staging/iio/gyro/adis16260_trigger.c
> +++ b/drivers/staging/iio/gyro/adis16260_trigger.c
> @@ -23,8 +23,7 @@ static int adis16260_data_rdy_trig_poll(struct iio_dev =
*dev_info,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16260_state *st =3D iio_dev_get_dev=
data(dev_info);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct iio_trigger *trig =3D st->trig;
>
> - =C2=A0 =C2=A0 =C2=A0 trig->timestamp =3D timestamp;
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig);
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig, timestamp);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return IRQ_HANDLED;
> =C2=A0}
> diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/i=
io/imu/adis16300_ring.c
> index 4dee670..6b25f12 100644
> --- a/drivers/staging/iio/imu/adis16300_ring.c
> +++ b/drivers/staging/iio/imu/adis16300_ring.c
> @@ -75,10 +75,10 @@ static struct attribute_group adis16300_scan_el_group=
=3D {
> =C2=A0* adis16300_poll_func_th() top half interrupt handler called by tri=
gger
> =C2=A0* @private_data: =C2=A0 =C2=A0 =C2=A0iio_dev
> =C2=A0**/
> -static void adis16300_poll_func_th(struct iio_dev *indio_dev)
> +static void adis16300_poll_func_th(struct iio_dev *indio_dev, s64 time)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16300_state *st =3D iio_dev_get_dev=
data(indio_dev);
> - =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D indio_dev->trig->timestamp;
> + =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D time;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0schedule_work(&st->work_trigger_to_ring);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Indicate that this interrupt is being handl=
ed */
>
> diff --git a/drivers/staging/iio/imu/adis16300_trigger.c b/drivers/stagin=
g/iio/imu/adis16300_trigger.c
> index a55f383..64036cd 100644
> --- a/drivers/staging/iio/imu/adis16300_trigger.c
> +++ b/drivers/staging/iio/imu/adis16300_trigger.c
> @@ -23,8 +23,7 @@ static int adis16300_data_rdy_trig_poll(struct iio_dev =
*dev_info,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16300_state *st =3D iio_dev_get_dev=
data(dev_info);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct iio_trigger *trig =3D st->trig;
>
> - =C2=A0 =C2=A0 =C2=A0 trig->timestamp =3D timestamp;
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig);
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig, timestamp);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return IRQ_HANDLED;
> =C2=A0}
> diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/i=
io/imu/adis16350_ring.c
> index c70816d..28c13ef 100644
> --- a/drivers/staging/iio/imu/adis16350_ring.c
> +++ b/drivers/staging/iio/imu/adis16350_ring.c
> @@ -81,10 +81,10 @@ static struct attribute_group adis16350_scan_el_group=
=3D {
> =C2=A0* adis16350_poll_func_th() top half interrupt handler called by tri=
gger
> =C2=A0* @private_data: =C2=A0 =C2=A0 =C2=A0iio_dev
> =C2=A0**/
> -static void adis16350_poll_func_th(struct iio_dev *indio_dev)
> +static void adis16350_poll_func_th(struct iio_dev *indio_dev, s64 time)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16350_state *st =3D iio_dev_get_dev=
data(indio_dev);
> - =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D indio_dev->trig->timestamp;
> + =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D time;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0schedule_work(&st->work_trigger_to_ring);
> =C2=A0}
>
> diff --git a/drivers/staging/iio/imu/adis16350_trigger.c b/drivers/stagin=
g/iio/imu/adis16350_trigger.c
> index fbe246a..76edccc 100644
> --- a/drivers/staging/iio/imu/adis16350_trigger.c
> +++ b/drivers/staging/iio/imu/adis16350_trigger.c
> @@ -23,8 +23,7 @@ static int adis16350_data_rdy_trig_poll(struct iio_dev =
*dev_info,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16350_state *st =3D iio_dev_get_dev=
data(dev_info);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct iio_trigger *trig =3D st->trig;
>
> - =C2=A0 =C2=A0 =C2=A0 trig->timestamp =3D timestamp;
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig);
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig, timestamp);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return IRQ_HANDLED;
> =C2=A0}
> diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/i=
io/imu/adis16400_ring.c
> index 8f7d257..95f53b2 100644
> --- a/drivers/staging/iio/imu/adis16400_ring.c
> +++ b/drivers/staging/iio/imu/adis16400_ring.c
> @@ -84,10 +84,10 @@ static struct attribute_group adis16400_scan_el_group=
=3D {
> =C2=A0* adis16400_poll_func_th() top half interrupt handler called by tri=
gger
> =C2=A0* @private_data: =C2=A0 =C2=A0 =C2=A0iio_dev
> =C2=A0**/
> -static void adis16400_poll_func_th(struct iio_dev *indio_dev)
> +static void adis16400_poll_func_th(struct iio_dev *indio_dev, s64 time)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16400_state *st =3D iio_dev_get_dev=
data(indio_dev);
> - =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D indio_dev->trig->timestamp;
> + =C2=A0 =C2=A0 =C2=A0 st->last_timestamp =3D time;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0schedule_work(&st->work_trigger_to_ring);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Indicate that this interrupt is being handl=
ed */
>
> diff --git a/drivers/staging/iio/imu/adis16400_trigger.c b/drivers/stagin=
g/iio/imu/adis16400_trigger.c
> index bf7c603..aafe601 100644
> --- a/drivers/staging/iio/imu/adis16400_trigger.c
> +++ b/drivers/staging/iio/imu/adis16400_trigger.c
> @@ -23,8 +23,7 @@ static int adis16400_data_rdy_trig_poll(struct iio_dev =
*dev_info,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct adis16400_state *st =3D iio_dev_get_dev=
data(dev_info);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct iio_trigger *trig =3D st->trig;
>
> - =C2=A0 =C2=A0 =C2=A0 trig->timestamp =3D timestamp;
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig);
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(trig, timestamp);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return IRQ_HANDLED;
> =C2=A0}
> diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging=
/iio/industrialio-trigger.c
> index 0f8ba14..0d5f15b 100644
> --- a/drivers/staging/iio/industrialio-trigger.c
> +++ b/drivers/staging/iio/industrialio-trigger.c
> @@ -173,7 +173,7 @@ struct iio_trigger *iio_trigger_find_by_name(const ch=
ar *name, size_t len)
> =C2=A0}
> =C2=A0EXPORT_SYMBOL(iio_trigger_find_by_name);
>
> -void iio_trigger_poll(struct iio_trigger *trig)
> +void iio_trigger_poll(struct iio_trigger *trig, s64 time)
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct iio_poll_func *pf_cursor;
>
> @@ -185,7 +185,8 @@ void iio_trigger_poll(struct iio_trigger *trig)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0}
> =C2=A0 =C2=A0 =C2=A0 =C2=A0list_for_each_entry(pf_cursor, &trig->pollfunc=
_list, list) {
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (pf_cursor->pol=
l_func_main) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 pf_cursor->poll_func_main(pf_cursor->private_data);
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 pf_cursor->poll_func_main(pf_cursor->private_data,
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 time);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0trig->use_count++;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}
> =C2=A0 =C2=A0 =C2=A0 =C2=A0}
> @@ -198,8 +199,7 @@ void iio_trigger_notify_done(struct iio_trigger *trig=
)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (trig->use_count =3D=3D 0 && trig->try_reen=
able)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (trig->try_reen=
able(trig)) {
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0/* Missed and interrupt so launch new poll now */
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 trig->timestamp =3D 0;
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 iio_trigger_poll(trig);
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 iio_trigger_poll(trig, 0);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}
> =C2=A0}
> =C2=A0EXPORT_SYMBOL(iio_trigger_notify_done);
> @@ -401,7 +401,7 @@ EXPORT_SYMBOL(iio_device_unregister_trigger_consumer)=
;
>
> =C2=A0int iio_alloc_pollfunc(struct iio_dev *indio_dev,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 void (*immediate)(struct iio_dev *indio_dev),
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0void (*main)(struct iio_dev =C2=A0*private_data))
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0void (*main)(struct iio_dev *private_data, s64 time))
> =C2=A0{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0indio_dev->pollfunc =3D kzalloc(sizeof(*indio_=
dev->pollfunc), GFP_KERNEL);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (indio_dev->pollfunc =3D=3D NULL)
> diff --git a/drivers/staging/iio/trigger.h b/drivers/staging/iio/trigger.=
h
> index 832de15..4699586 100644
> --- a/drivers/staging/iio/trigger.h
> +++ b/drivers/staging/iio/trigger.h
> @@ -21,7 +21,6 @@
> =C2=A0* @pollfunc_list_lock: =C2=A0 =C2=A0 =C2=A0 =C2=A0[INTERN] protecti=
on of the polling function list
> =C2=A0* @pollfunc_list: =C2=A0 =C2=A0 [INTERN] list of functions to run o=
n trigger.
> =C2=A0* @control_attrs: =C2=A0 =C2=A0 [DRIVER] sysfs attributes relevant =
to trigger type
> - * @timestamp: =C2=A0 =C2=A0 =C2=A0 =C2=A0 [INTERN] timestamp usesd by s=
ome trigs (e.g. datardy)
> =C2=A0* @owner: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 [DRIVER] used t=
o monitor usage count of the trigger.
> =C2=A0* @use_count: =C2=A0 =C2=A0 =C2=A0 =C2=A0 use count for the trigger
> =C2=A0* @set_trigger_state: [DRIVER] switch on/off the trigger on demand
> @@ -39,7 +38,6 @@ struct iio_trigger {
> =C2=A0 =C2=A0 =C2=A0 =C2=A0spinlock_t =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pollfunc_list_lock;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct list_head =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0pollfunc_list;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0const struct attribute_group =C2=A0 =C2=A0*con=
trol_attrs;
> - =C2=A0 =C2=A0 =C2=A0 s64 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 timestamp;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct module =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 *owner;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0int use_count;
>
> @@ -120,7 +118,7 @@ int iio_trigger_dettach_poll_func(struct iio_trigger =
*trig,
> =C2=A0*
> =C2=A0* Typically called in relevant hardware interrupt handler.
> =C2=A0**/
> -void iio_trigger_poll(struct iio_trigger *trig);
> +void iio_trigger_poll(struct iio_trigger *trig, s64 time);
> =C2=A0void iio_trigger_notify_done(struct iio_trigger *trig);
>
> =C2=A0/**
> @@ -144,13 +142,13 @@ struct iio_poll_func {
> =C2=A0 =C2=A0 =C2=A0 =C2=A0struct =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0list_head list;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0void =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*private_data;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0void (*poll_func_immediate)(struct iio_dev *in=
dio_dev);
> - =C2=A0 =C2=A0 =C2=A0 void (*poll_func_main)(struct iio_dev =C2=A0*priva=
te_data);
> + =C2=A0 =C2=A0 =C2=A0 void (*poll_func_main)(struct iio_dev *private_dat=
a, s64 time);
>
> =C2=A0};
>
> =C2=A0int iio_alloc_pollfunc(struct iio_dev *indio_dev,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 void (*immediate)(struct iio_dev *indio_dev),
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0void (*main)(struct iio_dev =C2=A0*private_data));
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0void (*main)(struct iio_dev *private_data, s64 time));
>
> =C2=A0/*
> =C2=A0* Two functions for common case where all that happens is a pollfun=
c
> @@ -163,4 +161,8 @@ struct iio_trigger *iio_allocate_trigger(void);
>
> =C2=A0void iio_free_trigger(struct iio_trigger *trig);
>
> +
> +struct iio_simple_trigger {
> + =C2=A0 =C2=A0 =C2=A0 struct iio_trigger trig;
> +};
> =C2=A0#endif /* _IIO_TRIGGER_H_ */
> diff --git a/drivers/staging/iio/trigger/iio-trig-gpio.c b/drivers/stagin=
g/iio/trigger/iio-trig-gpio.c
> index 3c0614e..f93cc91 100644
> --- a/drivers/staging/iio/trigger/iio-trig-gpio.c
> +++ b/drivers/staging/iio/trigger/iio-trig-gpio.c
> @@ -42,7 +42,8 @@ struct iio_gpio_trigger_info {
>
> =C2=A0static irqreturn_t iio_gpio_trigger_poll(int irq, void *private)
> =C2=A0{
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(private);
> + =C2=A0 =C2=A0 =C2=A0 /* Timestamp not currently provided */
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(private, 0);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0return IRQ_HANDLED;
> =C2=A0}
>
> diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/driver=
s/staging/iio/trigger/iio-trig-periodic-rtc.c
> index d8c58cb..b0b52f8 100644
> --- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
> +++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c
> @@ -98,7 +98,8 @@ static const struct attribute_group iio_trig_prtc_attr_=
group =3D {
>
> =C2=A0static void iio_prtc_trigger_poll(void *private_data)
> =C2=A0{
> - =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(private_data);
> + =C2=A0 =C2=A0 =C2=A0 /* Timestamp is not provided currently */
> + =C2=A0 =C2=A0 =C2=A0 iio_trigger_poll(private_data, 0);
> =C2=A0}
>
> =C2=A0static int iio_trig_periodic_rtc_probe(struct platform_device *dev)
> --
> 1.6.4.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at =C2=A0http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 6/6] staging:iio: replace combine_8_to_16 with be16_to_cpup where possible.
2010-06-25 15:55 ` [PATCH 6/6] staging:iio: replace combine_8_to_16 with be16_to_cpup where possible Jonathan Cameron
@ 2010-06-30 4:18 ` Barry Song
0 siblings, 0 replies; 15+ messages in thread
From: Barry Song @ 2010-06-30 4:18 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio, Barry.Song
On Fri, Jun 25, 2010 at 11:55 PM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Barry Song <21cnbao@gmail.com>
> ---
>
> =C2=A0In think I have this one the right way round, but please can someon=
e check!
> =C2=A0The combine_8_to_16 does more complex things in lis3l02dq but copy
> =C2=A0and paste has led to it turning up in lots of places where it isn't
> =C2=A0needed.
>
> =C2=A0Barry Song's RFC made this obvious.
>
> =C2=A0drivers/staging/iio/accel/adis16209_ring.c | =C2=A0 16 ++----------=
----
> =C2=A0drivers/staging/iio/accel/adis16240_ring.c | =C2=A0 16 ++----------=
----
> =C2=A0drivers/staging/iio/gyro/adis16260_ring.c =C2=A0| =C2=A0 16 ++-----=
---------
> =C2=A0drivers/staging/iio/imu/adis16300_ring.c =C2=A0 | =C2=A0 16 ++-----=
---------
> =C2=A0drivers/staging/iio/imu/adis16350_ring.c =C2=A0 | =C2=A0 16 ++-----=
---------
> =C2=A0drivers/staging/iio/imu/adis16400_ring.c =C2=A0 | =C2=A0 16 ++-----=
---------
> =C2=A06 files changed, 12 insertions(+), 84 deletions(-)
>
> diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging=
/iio/accel/adis16209_ring.c
> index ad71538..53a7677 100644
> --- a/drivers/staging/iio/accel/adis16209_ring.c
> +++ b/drivers/staging/iio/accel/adis16209_ring.c
> @@ -17,16 +17,6 @@
> =C2=A0#include "../trigger.h"
> =C2=A0#include "adis16209.h"
>
> -/**
> - * combine_8_to_16() utility function to munge to u8s into u16
> - **/
> -static inline u16 combine_8_to_16(u8 lower, u8 upper)
> -{
> - =C2=A0 =C2=A0 =C2=A0 u16 _lower =3D lower;
> - =C2=A0 =C2=A0 =C2=A0 u16 _upper =3D upper;
> - =C2=A0 =C2=A0 =C2=A0 return _lower | (_upper << 8);
> -}
> -
> =C2=A0static IIO_SCAN_EL_C(supply, ADIS16209_SCAN_SUPPLY, IIO_UNSIGNED(14=
),
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ADI=
S16209_SUPPLY_OUT, NULL);
> =C2=A0static IIO_SCAN_EL_C(accel_x, ADIS16209_SCAN_ACC_X, IIO_SIGNED(14),
> @@ -139,10 +129,8 @@ static void adis16209_trigger_bh_to_ring(struct work=
_struct *work_s)
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_count)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (adis16209_read=
_ring_data(&st->indio_dev->dev, st->rx) >=3D 0)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D combine_8_to_16(st->rx[i*2+1=
],
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 st->rx[i*2]);
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 }
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D be16_to_cpup((__be16 *)&(st-=
>rx[i*2]));
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Guaranteed to be aligned with 8 byte bounda=
ry */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_timestamp)
> diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging=
/iio/accel/adis16240_ring.c
> index 5cced2e..88269a0 100644
> --- a/drivers/staging/iio/accel/adis16240_ring.c
> +++ b/drivers/staging/iio/accel/adis16240_ring.c
> @@ -17,16 +17,6 @@
> =C2=A0#include "../trigger.h"
> =C2=A0#include "adis16240.h"
>
> -/**
> - * combine_8_to_16() utility function to munge to u8s into u16
> - **/
> -static inline u16 combine_8_to_16(u8 lower, u8 upper)
> -{
> - =C2=A0 =C2=A0 =C2=A0 u16 _lower =3D lower;
> - =C2=A0 =C2=A0 =C2=A0 u16 _upper =3D upper;
> - =C2=A0 =C2=A0 =C2=A0 return _lower | (_upper << 8);
> -}
> -
> =C2=A0static IIO_SCAN_EL_C(supply, ADIS16240_SCAN_SUPPLY, IIO_UNSIGNED(10=
),
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ADIS16240_SUPPLY_O=
UT, NULL);
> =C2=A0static IIO_SCAN_EL_C(accel_x, ADIS16240_SCAN_ACC_X, IIO_SIGNED(10),
> @@ -131,10 +121,8 @@ static void adis16240_trigger_bh_to_ring(struct work=
_struct *work_s)
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_count)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (adis16240_read=
_ring_data(&st->indio_dev->dev, st->rx) >=3D 0)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D combine_8_to_16(st->rx[i*2+1=
],
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 st->rx[i*2]);
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 }
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D be16_to_cpup((__be16 *)&(st-=
>rx[i*2]));
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Guaranteed to be aligned with 8 byte bounda=
ry */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_timestamp)
> diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/=
iio/gyro/adis16260_ring.c
> index 97d7660..59f1beb 100644
> --- a/drivers/staging/iio/gyro/adis16260_ring.c
> +++ b/drivers/staging/iio/gyro/adis16260_ring.c
> @@ -17,16 +17,6 @@
> =C2=A0#include "../trigger.h"
> =C2=A0#include "adis16260.h"
>
> -/**
> - * combine_8_to_16() utility function to munge to u8s into u16
> - **/
> -static inline u16 combine_8_to_16(u8 lower, u8 upper)
> -{
> - =C2=A0 =C2=A0 =C2=A0 u16 _lower =3D lower;
> - =C2=A0 =C2=A0 =C2=A0 u16 _upper =3D upper;
> - =C2=A0 =C2=A0 =C2=A0 return _lower | (_upper << 8);
> -}
> -
> =C2=A0static IIO_SCAN_EL_C(supply, ADIS16260_SCAN_SUPPLY, IIO_UNSIGNED(12=
),
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ADIS16260_SUPPLY_O=
UT, NULL);
> =C2=A0static IIO_SCAN_EL_C(gyro, ADIS16260_SCAN_GYRO, IIO_SIGNED(14),
> @@ -134,10 +124,8 @@ static void adis16260_trigger_bh_to_ring(struct work=
_struct *work_s)
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_count)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (adis16260_read=
_ring_data(&st->indio_dev->dev, st->rx) >=3D 0)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D combine_8_to_16(st->rx[i*2+1=
],
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 st->rx[i*2]);
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 }
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D be16_to_cpup((__be16 *)&(st-=
>rx[i*2]));
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Guaranteed to be aligned with 8 byte bounda=
ry */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_timestamp)
> diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/i=
io/imu/adis16300_ring.c
> index 6b25f12..64f02f5 100644
> --- a/drivers/staging/iio/imu/adis16300_ring.c
> +++ b/drivers/staging/iio/imu/adis16300_ring.c
> @@ -17,16 +17,6 @@
> =C2=A0#include "../trigger.h"
> =C2=A0#include "adis16300.h"
>
> -/**
> - * combine_8_to_16() utility function to munge to u8s into u16
> - **/
> -static inline u16 combine_8_to_16(u8 lower, u8 upper)
> -{
> - =C2=A0 =C2=A0 =C2=A0 u16 _lower =3D lower;
> - =C2=A0 =C2=A0 =C2=A0 u16 _upper =3D upper;
> - =C2=A0 =C2=A0 =C2=A0 return _lower | (_upper << 8);
> -}
> -
> =C2=A0static IIO_SCAN_EL_C(supply, ADIS16300_SCAN_SUPPLY, IIO_UNSIGNED(14=
),
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ADI=
S16300_SUPPLY_OUT, NULL);
>
> @@ -158,10 +148,8 @@ static void adis16300_trigger_bh_to_ring(struct work=
_struct *work_s)
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_count)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (adis16300_spi_=
read_burst(&st->indio_dev->dev, st->rx) >=3D 0)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D combine_8_to_16(st->rx[i*2+1=
],
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 st->rx[i*2]);
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 }
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D be16_to_cpup((__be16 *)&(st-=
>rx[i*2]));
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Guaranteed to be aligned with 8 byte bounda=
ry */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_timestamp)
> diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/i=
io/imu/adis16350_ring.c
> index 28c13ef..f817bfd 100644
> --- a/drivers/staging/iio/imu/adis16350_ring.c
> +++ b/drivers/staging/iio/imu/adis16350_ring.c
> @@ -17,16 +17,6 @@
> =C2=A0#include "../trigger.h"
> =C2=A0#include "adis16350.h"
>
> -/**
> - * combine_8_to_16() utility function to munge to u8s into u16
> - **/
> -static inline u16 combine_8_to_16(u8 lower, u8 upper)
> -{
> - =C2=A0 =C2=A0 =C2=A0 u16 _lower =3D lower;
> - =C2=A0 =C2=A0 =C2=A0 u16 _upper =3D upper;
> - =C2=A0 =C2=A0 =C2=A0 return _lower | (_upper << 8);
> -}
> -
> =C2=A0static IIO_SCAN_EL_C(supply, ADIS16350_SCAN_SUPPLY, IIO_UNSIGNED(12=
),
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ADIS16350_SUPPLY_O=
UT, NULL);
>
> @@ -158,10 +148,8 @@ static void adis16350_trigger_bh_to_ring(struct work=
_struct *work_s)
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_count)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (adis16350_spi_=
read_burst(&st->indio_dev->dev, st->rx) >=3D 0)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D combine_8_to_16(st->rx[i*2+1=
],
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 st->rx[i*2]);
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 }
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D be16_to_cpup((__be16 *)&(st-=
>rx[i*2]));
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Guaranteed to be aligned with 8 byte bounda=
ry */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_timestamp)
> diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/i=
io/imu/adis16400_ring.c
> index 95f53b2..e7881a0 100644
> --- a/drivers/staging/iio/imu/adis16400_ring.c
> +++ b/drivers/staging/iio/imu/adis16400_ring.c
> @@ -17,16 +17,6 @@
> =C2=A0#include "../trigger.h"
> =C2=A0#include "adis16400.h"
>
> -/**
> - * combine_8_to_16() utility function to munge to u8s into u16
> - **/
> -static inline u16 combine_8_to_16(u8 lower, u8 upper)
> -{
> - =C2=A0 =C2=A0 =C2=A0 u16 _lower =3D lower;
> - =C2=A0 =C2=A0 =C2=A0 u16 _upper =3D upper;
> - =C2=A0 =C2=A0 =C2=A0 return _lower | (_upper << 8);
> -}
> -
> =C2=A0static IIO_SCAN_EL_C(supply, ADIS16400_SCAN_SUPPLY, IIO_SIGNED(14),
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ADI=
S16400_SUPPLY_OUT, NULL);
>
> @@ -167,10 +157,8 @@ static void adis16400_trigger_bh_to_ring(struct work=
_struct *work_s)
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_count)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (adis16400_spi_=
read_burst(&st->indio_dev->dev, st->rx) >=3D 0)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++) {
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D combine_8_to_16(st->rx[i*2+1=
],
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 st->rx[i*2]);
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 }
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 for (; i < st->indio_dev->scan_count; i++)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 data[i] =3D be16_to_cpup((__be16 *)&(st-=
>rx[i*2]));
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Guaranteed to be aligned with 8 byte bounda=
ry */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if (st->indio_dev->scan_timestamp)
> --
> 1.6.4.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at =C2=A0http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function
2010-06-25 15:55 ` [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function Jonathan Cameron
2010-06-25 15:55 ` [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc Jonathan Cameron
@ 2010-06-30 4:21 ` Barry Song
1 sibling, 0 replies; 15+ messages in thread
From: Barry Song @ 2010-06-30 4:21 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio, Barry.Song
On Fri, Jun 25, 2010 at 11:55 PM, Jonathan Cameron <jic23@cam.ac.uk> wrote:
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Barry Song <21cnbao@gmail.com>
> ---
> =C2=A0drivers/staging/iio/accel/lis3l02dq_ring.c | =C2=A0 =C2=A08 -------=
-
> =C2=A01 files changed, 0 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging=
/iio/accel/lis3l02dq_ring.c
> index 69e2787..a33599d 100644
> --- a/drivers/staging/iio/accel/lis3l02dq_ring.c
> +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
> @@ -591,12 +591,4 @@ void lis3l02dq_uninitialize_ring(struct iio_ring_buf=
fer *ring)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0iio_ring_buffer_unregister(ring);
> =C2=A0}
>
> -int lis3l02dq_set_ring_length(struct iio_dev *indio_dev, int length)
> -{
> - =C2=A0 =C2=A0 =C2=A0 /* Set sensible defaults for the ring buffer */
> - =C2=A0 =C2=A0 =C2=A0 if (indio_dev->ring->access.set_length)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return indio_dev->ring=
->access.set_length(indio_dev->ring, 500);
> - =C2=A0 =C2=A0 =C2=A0 return 0;
> -}
> -
>
> --
> 1.6.4.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at =C2=A0http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2010-06-30 4:21 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-25 15:55 [PATCH 0/6] Various cleanups Jonathan Cameron
2010-06-25 15:55 ` [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name Jonathan Cameron
2010-06-25 15:55 ` [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function Jonathan Cameron
2010-06-25 15:55 ` [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc Jonathan Cameron
2010-06-25 15:55 ` [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers Jonathan Cameron
2010-06-25 15:55 ` [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs Jonathan Cameron
2010-06-25 15:55 ` [PATCH 6/6] staging:iio: replace combine_8_to_16 with be16_to_cpup where possible Jonathan Cameron
2010-06-30 4:18 ` Barry Song
2010-06-29 10:30 ` [PATCH 5/6] staging:iio: remove timestamp field from trigger and pass instead through pollfuncs Barry Song
2010-06-28 6:35 ` [PATCH 4/6] staging:iio: Add iio_triggered_ring postenable and predisable + use in drivers Barry Song
2010-06-28 6:35 ` [PATCH 3/6] staging:iio: Add and convert drivers to use iio_alloc_pollfunc Barry Song
2010-06-30 4:21 ` [PATCH 2/6] staging:iio:lis3l02dq remove unused set_ring_length function Barry Song
2010-06-29 10:18 ` [PATCH 1/6] staging:iio: Use kasprintf to allocate and fill trig->name Barry Song
2010-06-28 8:16 ` [PATCH 0/6] Various cleanups Barry Song
2010-06-28 9:50 ` Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox