* [PATCH 1/7] staging:iio:find iio channel from scan index util function
2011-12-05 21:37 [PATCH V3 0/7] Add scan demux unit and use it in max1363 Jonathan Cameron
@ 2011-12-05 21:37 ` Jonathan Cameron
2011-12-05 21:37 ` [PATCH 2/7] staging:iio:buffer add a cache of the timestamp scan index Jonathan Cameron
` (5 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-05 21:37 UTC (permalink / raw)
To: linux-iio, greg; +Cc: lars, Jonathan Cameron
From: Jonathan Cameron <jic23@cam.ac.uk>
Useful for getting to the channel based on scan mask alone.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
drivers/staging/iio/iio.h | 8 ++++++++
drivers/staging/iio/industrialio-core.c | 11 +++++++++++
2 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/drivers/staging/iio/iio.h b/drivers/staging/iio/iio.h
index 4aed915..95d6318 100644
--- a/drivers/staging/iio/iio.h
+++ b/drivers/staging/iio/iio.h
@@ -323,6 +323,14 @@ struct iio_dev {
};
/**
+ * iio_find_channel_from_si() - get channel from its scan index
+ * @indio_dev: device
+ * @si: scan index to match
+ */
+const struct iio_chan_spec
+*iio_find_channel_from_si(struct iio_dev *indio_dev, int si);
+
+/**
* iio_device_register() - register a device with the IIO subsystem
* @indio_dev: Device structure filled by the device driver
**/
diff --git a/drivers/staging/iio/industrialio-core.c b/drivers/staging/iio/industrialio-core.c
index d8cd9e3..dbd1ce1 100644
--- a/drivers/staging/iio/industrialio-core.c
+++ b/drivers/staging/iio/industrialio-core.c
@@ -89,6 +89,17 @@ static const char * const iio_chan_info_postfix[] = {
= "filter_low_pass_3db_frequency",
};
+const struct iio_chan_spec
+*iio_find_channel_from_si(struct iio_dev *indio_dev, int si)
+{
+ int i;
+
+ for (i = 0; i < indio_dev->num_channels; i++)
+ if (indio_dev->channels[i].scan_index == si)
+ return &indio_dev->channels[i];
+ return NULL;
+}
+
/**
* struct iio_detected_event_list - list element for events that have occurred
* @list: linked list header
--
1.7.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/7] staging:iio:buffer add a cache of the timestamp scan index.
2011-12-05 21:37 [PATCH V3 0/7] Add scan demux unit and use it in max1363 Jonathan Cameron
2011-12-05 21:37 ` [PATCH 1/7] staging:iio:find iio channel from scan index util function Jonathan Cameron
@ 2011-12-05 21:37 ` Jonathan Cameron
2011-12-05 21:37 ` [PATCH 3/7] staging:iio: add hook to allow core to perform scan related config Jonathan Cameron
` (4 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-05 21:37 UTC (permalink / raw)
To: linux-iio, greg; +Cc: lars, Jonathan Cameron
From: Jonathan Cameron <jic23@cam.ac.uk>
Basically avoids looking it up lots of times.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
drivers/staging/iio/buffer.h | 1 +
drivers/staging/iio/industrialio-buffer.c | 3 +++
2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/drivers/staging/iio/buffer.h b/drivers/staging/iio/buffer.h
index 9de581e..4b8f619 100644
--- a/drivers/staging/iio/buffer.h
+++ b/drivers/staging/iio/buffer.h
@@ -106,6 +106,7 @@ struct iio_buffer {
int scan_count;
long *scan_mask;
bool scan_timestamp;
+ unsigned scan_index_timestamp;
const struct iio_buffer_access_funcs *access;
const struct iio_buffer_setup_ops *setup_ops;
struct list_head scan_el_dev_attr_list;
diff --git a/drivers/staging/iio/industrialio-buffer.c b/drivers/staging/iio/industrialio-buffer.c
index 8c55980..b2cf3e3 100644
--- a/drivers/staging/iio/industrialio-buffer.c
+++ b/drivers/staging/iio/industrialio-buffer.c
@@ -313,6 +313,9 @@ int iio_buffer_register(struct iio_dev *indio_dev,
if (ret < 0)
goto error_cleanup_dynamic;
attrcount += ret;
+ if (channels[i].type == IIO_TIMESTAMP)
+ buffer->scan_index_timestamp =
+ channels[i].scan_index;
}
if (indio_dev->masklength && buffer->scan_mask == NULL) {
buffer->scan_mask = kcalloc(BITS_TO_LONGS(indio_dev->masklength),
--
1.7.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/7] staging:iio: add hook to allow core to perform scan related config.
2011-12-05 21:37 [PATCH V3 0/7] Add scan demux unit and use it in max1363 Jonathan Cameron
2011-12-05 21:37 ` [PATCH 1/7] staging:iio:find iio channel from scan index util function Jonathan Cameron
2011-12-05 21:37 ` [PATCH 2/7] staging:iio:buffer add a cache of the timestamp scan index Jonathan Cameron
@ 2011-12-05 21:37 ` Jonathan Cameron
2011-12-05 21:37 ` [PATCH 4/7] staging:iio: make iio_sw_buffer_preenable much more general Jonathan Cameron
` (3 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-05 21:37 UTC (permalink / raw)
To: linux-iio, greg; +Cc: lars, Jonathan Cameron
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
---
drivers/staging/iio/iio.h | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/staging/iio/iio.h b/drivers/staging/iio/iio.h
index 95d6318..4fb8f2f 100644
--- a/drivers/staging/iio/iio.h
+++ b/drivers/staging/iio/iio.h
@@ -262,7 +262,8 @@ struct iio_info {
int val);
int (*validate_trigger)(struct iio_dev *indio_dev,
struct iio_trigger *trig);
-
+ int (*update_scan_mode)(struct iio_dev *indio_dev,
+ const unsigned long *scan_mask);
};
/**
--
1.7.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/7] staging:iio: make iio_sw_buffer_preenable much more general.
2011-12-05 21:37 [PATCH V3 0/7] Add scan demux unit and use it in max1363 Jonathan Cameron
` (2 preceding siblings ...)
2011-12-05 21:37 ` [PATCH 3/7] staging:iio: add hook to allow core to perform scan related config Jonathan Cameron
@ 2011-12-05 21:37 ` Jonathan Cameron
2011-12-05 21:37 ` [PATCH 5/7] staging:iio: add demux optionally to path from device to buffer Jonathan Cameron
` (2 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-05 21:37 UTC (permalink / raw)
To: linux-iio, greg; +Cc: lars, Jonathan Cameron
Also introduces active_scan_mask storage to tell the core what is
really being currently captured from the device (different from
what is desired as often has bonus channels).
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Tested-by: Lars-Peter Clausen <lars@metafoo.de>
---
drivers/staging/iio/iio.h | 2 +
drivers/staging/iio/industrialio-buffer.c | 63 +++++++++++++++++------------
2 files changed, 39 insertions(+), 26 deletions(-)
diff --git a/drivers/staging/iio/iio.h b/drivers/staging/iio/iio.h
index 4fb8f2f..c225542 100644
--- a/drivers/staging/iio/iio.h
+++ b/drivers/staging/iio/iio.h
@@ -280,6 +280,7 @@ struct iio_info {
* @available_scan_masks: [DRIVER] optional array of allowed bitmasks
* @masklength: [INTERN] the length of the mask established from
* channels
+ * @active_scan_mask: [INTERN] union of all scan masks requested by buffers
* @trig: [INTERN] current device trigger (buffer modes)
* @pollfunc: [DRIVER] function run on trigger being received
* @channels: [DRIVER] channel specification structure table
@@ -307,6 +308,7 @@ struct iio_dev {
unsigned long *available_scan_masks;
unsigned masklength;
+ unsigned long *active_scan_mask;
struct iio_trigger *trig;
struct iio_poll_func *pollfunc;
diff --git a/drivers/staging/iio/industrialio-buffer.c b/drivers/staging/iio/industrialio-buffer.c
index b2cf3e3..e088a5c 100644
--- a/drivers/staging/iio/industrialio-buffer.c
+++ b/drivers/staging/iio/industrialio-buffer.c
@@ -531,32 +531,6 @@ ssize_t iio_buffer_show_enable(struct device *dev,
}
EXPORT_SYMBOL(iio_buffer_show_enable);
-int iio_sw_buffer_preenable(struct iio_dev *indio_dev)
-{
- struct iio_buffer *buffer = indio_dev->buffer;
- size_t size;
- dev_dbg(&indio_dev->dev, "%s\n", __func__);
- /* Check if there are any scan elements enabled, if not fail*/
- if (!(buffer->scan_count || buffer->scan_timestamp))
- return -EINVAL;
- if (buffer->scan_timestamp)
- if (buffer->scan_count)
- /* Timestamp (aligned to s64) and data */
- size = (((buffer->scan_count * buffer->bpe)
- + sizeof(s64) - 1)
- & ~(sizeof(s64) - 1))
- + sizeof(s64);
- else /* Timestamp only */
- size = sizeof(s64);
- else /* Data only */
- size = buffer->scan_count * buffer->bpe;
- buffer->access->set_bytes_per_datum(buffer, size);
-
- return 0;
-}
-EXPORT_SYMBOL(iio_sw_buffer_preenable);
-
-
/* note NULL used as error indicator as it doesn't make sense. */
static unsigned long *iio_scan_mask_match(unsigned long *av_masks,
unsigned int masklength,
@@ -572,6 +546,43 @@ static unsigned long *iio_scan_mask_match(unsigned long *av_masks,
return NULL;
}
+int iio_sw_buffer_preenable(struct iio_dev *indio_dev)
+{
+ struct iio_buffer *buffer = indio_dev->buffer;
+ const struct iio_chan_spec *ch;
+ unsigned bytes = 0;
+ int length, i;
+ dev_dbg(&indio_dev->dev, "%s\n", __func__);
+
+ /* How much space will the demuxed element take? */
+ for_each_set_bit(i, buffer->scan_mask,
+ indio_dev->masklength) {
+ ch = iio_find_channel_from_si(indio_dev, i);
+ length = ch->scan_type.storagebits/8;
+ bytes = ALIGN(bytes, length);
+ bytes += length;
+ }
+ if (buffer->scan_timestamp) {
+ ch = iio_find_channel_from_si(indio_dev,
+ buffer->scan_index_timestamp);
+ length = ch->scan_type.storagebits/8;
+ bytes = ALIGN(bytes, length);
+ bytes += length;
+ }
+ buffer->access->set_bytes_per_datum(buffer, bytes);
+
+ /* What scan mask do we actually have ?*/
+ if (indio_dev->available_scan_masks)
+ indio_dev->active_scan_mask =
+ iio_scan_mask_match(indio_dev->available_scan_masks,
+ indio_dev->masklength,
+ buffer->scan_mask);
+ else
+ indio_dev->active_scan_mask = buffer->scan_mask;
+ return 0;
+}
+EXPORT_SYMBOL(iio_sw_buffer_preenable);
+
/**
* iio_scan_mask_set() - set particular bit in the scan mask
* @buffer: the buffer whose scan mask we are interested in
--
1.7.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 5/7] staging:iio: add demux optionally to path from device to buffer
2011-12-05 21:37 [PATCH V3 0/7] Add scan demux unit and use it in max1363 Jonathan Cameron
` (3 preceding siblings ...)
2011-12-05 21:37 ` [PATCH 4/7] staging:iio: make iio_sw_buffer_preenable much more general Jonathan Cameron
@ 2011-12-05 21:37 ` Jonathan Cameron
2011-12-05 21:37 ` [PATCH 7/7] staging:iio:adc:max1363 correctly set channels as big endian Jonathan Cameron
2011-12-06 15:39 ` [PATCH V3 0/7] Add scan demux unit and use it in max1363 Maxime Ripard
6 siblings, 0 replies; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-05 21:37 UTC (permalink / raw)
To: linux-iio, greg; +Cc: lars, Jonathan Cameron
From: Jonathan Cameron <jic23@cam.ac.uk>
This gives you only what you ask for which is handy
for some devices with weird scan combinations.
Routes all data flow through a core utility function.
That and this demuxing support will be needed to do
demuxing to multiple destinations in kernel.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Tested-by: Lars-Peter Clausen <lars@metafoo.de>
---
drivers/staging/iio/buffer.h | 15 +++
drivers/staging/iio/industrialio-buffer.c | 146 ++++++++++++++++++++++++++++-
2 files changed, 157 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/iio/buffer.h b/drivers/staging/iio/buffer.h
index 4b8f619..5282441 100644
--- a/drivers/staging/iio/buffer.h
+++ b/drivers/staging/iio/buffer.h
@@ -95,6 +95,8 @@ struct iio_buffer_setup_ops {
* @access: [DRIVER] buffer access functions associated with the
* implementation.
* @flags: [INTERN] file ops related flags including busy flag.
+ * @demux_list: [INTERN] list of operations required to demux the scan.
+ * @demux_bounce: [INTERN] buffer for doing gather from incoming scan.
**/
struct iio_buffer {
struct iio_dev *indio_dev;
@@ -115,6 +117,8 @@ struct iio_buffer {
bool stufftoread;
unsigned long flags;
const struct attribute_group *attrs;
+ struct list_head demux_list;
+ unsigned char *demux_bounce;
};
/**
@@ -153,6 +157,17 @@ int iio_scan_mask_set(struct iio_buffer *buffer, int bit);
container_of(d, struct iio_buffer, dev)
/**
+ * iio_push_to_buffer() - push to a registered buffer.
+ * @buffer: IIO buffer structure for device
+ * @scan: Full scan.
+ * @timestamp:
+ */
+int iio_push_to_buffer(struct iio_buffer *buffer, unsigned char *data,
+ s64 timestamp);
+
+int iio_update_demux(struct iio_dev *indio_dev);
+
+/**
* iio_buffer_register() - register the buffer with IIO core
* @indio_dev: device with the buffer to be registered
**/
diff --git a/drivers/staging/iio/industrialio-buffer.c b/drivers/staging/iio/industrialio-buffer.c
index e088a5c..ff14f12 100644
--- a/drivers/staging/iio/industrialio-buffer.c
+++ b/drivers/staging/iio/industrialio-buffer.c
@@ -87,6 +87,7 @@ void iio_chrdev_buffer_release(struct iio_dev *indio_dev)
void iio_buffer_init(struct iio_buffer *buffer, struct iio_dev *indio_dev)
{
+ INIT_LIST_HEAD(&buffer->demux_list);
buffer->indio_dev = indio_dev;
init_waitqueue_head(&buffer->pollq);
}
@@ -128,10 +129,9 @@ static ssize_t iio_scan_el_show(struct device *dev,
int ret;
struct iio_dev *indio_dev = dev_get_drvdata(dev);
- ret = iio_scan_mask_query(indio_dev->buffer,
- to_iio_dev_attr(attr)->address);
- if (ret < 0)
- return ret;
+ ret = test_bit(to_iio_dev_attr(attr)->address,
+ indio_dev->buffer->scan_mask);
+
return sprintf(buf, "%d\n", ret);
}
@@ -579,6 +579,12 @@ int iio_sw_buffer_preenable(struct iio_dev *indio_dev)
buffer->scan_mask);
else
indio_dev->active_scan_mask = buffer->scan_mask;
+ iio_update_demux(indio_dev);
+
+ if (indio_dev->info->update_scan_mode)
+ return indio_dev->info
+ ->update_scan_mode(indio_dev,
+ indio_dev->active_scan_mask);
return 0;
}
EXPORT_SYMBOL(iio_sw_buffer_preenable);
@@ -648,3 +654,135 @@ int iio_scan_mask_query(struct iio_buffer *buffer, int bit)
return test_bit(bit, mask);
};
EXPORT_SYMBOL_GPL(iio_scan_mask_query);
+
+/**
+ * struct iio_demux_table() - table describing demux memcpy ops
+ * @from: index to copy from
+ * @to: index to copy to
+ * @length: how many bytes to copy
+ * @l: list head used for management
+ */
+struct iio_demux_table {
+ unsigned from;
+ unsigned to;
+ unsigned length;
+ struct list_head l;
+};
+
+static unsigned char *iio_demux(struct iio_buffer *buffer,
+ unsigned char *datain)
+{
+ struct iio_demux_table *t;
+
+ if (list_empty(&buffer->demux_list))
+ return datain;
+ list_for_each_entry(t, &buffer->demux_list, l)
+ memcpy(buffer->demux_bounce + t->to,
+ datain + t->from, t->length);
+
+ return buffer->demux_bounce;
+}
+
+int iio_push_to_buffer(struct iio_buffer *buffer, unsigned char *data,
+ s64 timestamp)
+{
+ unsigned char *dataout = iio_demux(buffer, data);
+
+ return buffer->access->store_to(buffer, dataout, timestamp);
+}
+EXPORT_SYMBOL_GPL(iio_push_to_buffer);
+
+int iio_update_demux(struct iio_dev *indio_dev)
+{
+ const struct iio_chan_spec *ch;
+ struct iio_buffer *buffer = indio_dev->buffer;
+ int ret, in_ind = -1, out_ind, length;
+ unsigned in_loc = 0, out_loc = 0;
+ struct iio_demux_table *p, *q;
+
+ /* Clear out any old demux */
+ list_for_each_entry_safe(p, q, &buffer->demux_list, l) {
+ list_del(&p->l);
+ kfree(p);
+ }
+ kfree(buffer->demux_bounce);
+ buffer->demux_bounce = NULL;
+
+ /* First work out which scan mode we will actually have */
+ if (bitmap_equal(indio_dev->active_scan_mask,
+ buffer->scan_mask,
+ indio_dev->masklength))
+ return 0;
+
+ /* Now we have the two masks, work from least sig and build up sizes */
+ for_each_set_bit(out_ind,
+ indio_dev->active_scan_mask,
+ indio_dev->masklength) {
+ in_ind = find_next_bit(indio_dev->active_scan_mask,
+ indio_dev->masklength,
+ in_ind + 1);
+ while (in_ind != out_ind) {
+ in_ind = find_next_bit(indio_dev->active_scan_mask,
+ indio_dev->masklength,
+ in_ind + 1);
+ ch = iio_find_channel_from_si(indio_dev, in_ind);
+ length = ch->scan_type.storagebits/8;
+ /* Make sure we are aligned */
+ in_loc += length;
+ if (in_loc % length)
+ in_loc += length - in_loc % length;
+ }
+ p = kmalloc(sizeof(*p), GFP_KERNEL);
+ if (p == NULL) {
+ ret = -ENOMEM;
+ goto error_clear_mux_table;
+ }
+ ch = iio_find_channel_from_si(indio_dev, in_ind);
+ length = ch->scan_type.storagebits/8;
+ if (out_loc % length)
+ out_loc += length - out_loc % length;
+ if (in_loc % length)
+ in_loc += length - in_loc % length;
+ p->from = in_loc;
+ p->to = out_loc;
+ p->length = length;
+ list_add_tail(&p->l, &buffer->demux_list);
+ out_loc += length;
+ in_loc += length;
+ }
+ /* Relies on scan_timestamp being last */
+ if (buffer->scan_timestamp) {
+ p = kmalloc(sizeof(*p), GFP_KERNEL);
+ if (p == NULL) {
+ ret = -ENOMEM;
+ goto error_clear_mux_table;
+ }
+ ch = iio_find_channel_from_si(indio_dev,
+ buffer->scan_index_timestamp);
+ length = ch->scan_type.storagebits/8;
+ if (out_loc % length)
+ out_loc += length - out_loc % length;
+ if (in_loc % length)
+ in_loc += length - in_loc % length;
+ p->from = in_loc;
+ p->to = out_loc;
+ p->length = length;
+ list_add_tail(&p->l, &buffer->demux_list);
+ out_loc += length;
+ in_loc += length;
+ }
+ buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL);
+ if (buffer->demux_bounce == NULL) {
+ ret = -ENOMEM;
+ goto error_clear_mux_table;
+ }
+ return 0;
+
+error_clear_mux_table:
+ list_for_each_entry_safe(p, q, &buffer->demux_list, l) {
+ list_del(&p->l);
+ kfree(p);
+ }
+ return ret;
+}
+EXPORT_SYMBOL_GPL(iio_update_demux);
--
1.7.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 7/7] staging:iio:adc:max1363 correctly set channels as big endian.
2011-12-05 21:37 [PATCH V3 0/7] Add scan demux unit and use it in max1363 Jonathan Cameron
` (4 preceding siblings ...)
2011-12-05 21:37 ` [PATCH 5/7] staging:iio: add demux optionally to path from device to buffer Jonathan Cameron
@ 2011-12-05 21:37 ` Jonathan Cameron
2011-12-06 15:39 ` [PATCH V3 0/7] Add scan demux unit and use it in max1363 Maxime Ripard
6 siblings, 0 replies; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-05 21:37 UTC (permalink / raw)
To: linux-iio, greg; +Cc: lars, Jonathan Cameron
From: Jonathan Cameron <jic23@cam.ac.uk>
Also, the differential channels should always have been signed.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
drivers/staging/iio/adc/max1363_core.c | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c
index 7e078fc..9febd1b 100644
--- a/drivers/staging/iio/adc/max1363_core.c
+++ b/drivers/staging/iio/adc/max1363_core.c
@@ -298,7 +298,12 @@ static const enum max1363_modes max1363_mode_list[] = {
.channel = num, \
.address = addr, \
.info_mask = MAX1363_INFO_MASK, \
- .scan_type = IIO_ST('u', bits, (bits > 8) ? 16 : 8, 0), \
+ .scan_type = { \
+ .sign = 'u', \
+ .realbits = bits, \
+ .storagebits = (bits > 8) ? 16 : 8, \
+ .endianness = IIO_BE, \
+ }, \
.scan_index = si, \
.event_mask = evmask, \
}
@@ -313,7 +318,12 @@ static const enum max1363_modes max1363_mode_list[] = {
.channel2 = num2, \
.address = addr, \
.info_mask = MAX1363_INFO_MASK, \
- .scan_type = IIO_ST('u', bits, (bits > 8) ? 16 : 8, 0), \
+ .scan_type = { \
+ .sign = 's', \
+ .realbits = bits, \
+ .storagebits = (bits > 8) ? 16 : 8, \
+ .endianness = IIO_BE, \
+ }, \
.scan_index = si, \
.event_mask = evmask, \
}
--
1.7.7.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH V3 0/7] Add scan demux unit and use it in max1363
2011-12-05 21:37 [PATCH V3 0/7] Add scan demux unit and use it in max1363 Jonathan Cameron
` (5 preceding siblings ...)
2011-12-05 21:37 ` [PATCH 7/7] staging:iio:adc:max1363 correctly set channels as big endian Jonathan Cameron
@ 2011-12-06 15:39 ` Maxime Ripard
2011-12-06 15:51 ` Lars-Peter Clausen
6 siblings, 1 reply; 12+ messages in thread
From: Maxime Ripard @ 2011-12-06 15:39 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: linux-iio
Hi Jonathan,
I can't seem to find a proper way to apply this patchset. On what
patchset is it based ?
I'm still here with what seems to be a rather old version of your tree
(3413ec), but it is still the head of your git tree on kernel.org.
Thanks,
Maxime
On 05/12/2011 22:37, Jonathan Cameron wrote:
> Hi Greg,
>
> The v3 here is just to indicate a tiny change suggested by
> Lars-Peter from the version that has been out for review on
> linux-iio. (Using ALIGN instead of hand rolling in one case
> in patch 4). Anyhow, not worth putting out for another review
> as Lars-Peter has tested and acked without it anyway.
>
> Technically Lars-Peter only acked patches 4 and 5 but they
> are the important ones (the others being trivial or tied
> up with the max1363 driver which is one of mine..)
>
> This set introduces the an optional demultiplexer into the
> path of data form devices to buffers. It is a necessary step
> on the path to in kernel push interfaces (trigger driven ones).
> Also rather useful on it's own as shown by the max1363 patches
> and some uses Lars-Peter has made of it in another series.
>
> Anyhow fair bit more to come so time to send these on to you!
>
> Thanks,
>
> Jonathan
>
> v2 text:
> Hi All,
>
> New version of this series. Two changes as per Lars-Peter's
> suggestions. ALIGN macro usage in patch 4 and one of the two
> for each bit set suggestions. The second is subtly different
> as it is finding bits after a certain point rather than from
> the start.
>
> As explained in patch 5 discussion, I personally feel that
> the demux should occur prior to the buffer and avoiding the
> extra copy should be done by allowing buffers to provide
> callbacks for reserving (plus getting access to) space and
> notifying that they are done filling it. Either way, now
> is not the time to do this change. Too much else going on!
>
> v1 text:
> The last patch technically is a simple bug fix, but included here as
> it came up during testing of this series.
>
> The 'interesting' bits are the rewrite of iio_sw_buffer_preenable. I'd like
> people with drivers currently using that function to test and see what
> I have broken. We should also be able to drop a number of cases in specific
> drivers in favour of this version.
>
> The demux unit is designed to offer a straight path with little or no
> overhead if the client (here still the IIO buffer) needs all the data and to
> only get in the way when a subset of the active scan mask is requested.
>
> I may well have messed this up so please please test this set.
>
>
> Jonathan Cameron (7):
> staging:iio:find iio channel from scan index util function
> staging:iio:buffer add a cache of the timestamp scan index.
> staging:iio: add hook to allow core to perform scan related config.
> staging:iio: make iio_sw_buffer_preenable much more general.
> staging:iio: add demux optionally to path from device to buffer
> staging:iio:adc:max1363 use new demuxing support.
> staging:iio:adc:max1363 correctly set channels as big endian.
>
> drivers/staging/iio/adc/max1363.h | 11 ++-
> drivers/staging/iio/adc/max1363_core.c | 18 ++-
> drivers/staging/iio/adc/max1363_ring.c | 51 ++-----
> drivers/staging/iio/buffer.h | 16 ++
> drivers/staging/iio/iio.h | 13 ++-
> drivers/staging/iio/industrialio-buffer.c | 212 +++++++++++++++++++++++++----
> drivers/staging/iio/industrialio-core.c | 11 ++
> 7 files changed, 259 insertions(+), 73 deletions(-)
>
--
Maxime Ripard, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V3 0/7] Add scan demux unit and use it in max1363
2011-12-06 15:39 ` [PATCH V3 0/7] Add scan demux unit and use it in max1363 Maxime Ripard
@ 2011-12-06 15:51 ` Lars-Peter Clausen
2011-12-06 17:05 ` Jonathan Cameron
0 siblings, 1 reply; 12+ messages in thread
From: Lars-Peter Clausen @ 2011-12-06 15:51 UTC (permalink / raw)
To: Maxime Ripard; +Cc: Jonathan Cameron, linux-iio
On 12/06/2011 04:39 PM, Maxime Ripard wrote:
> Hi Jonathan,
>
> I can't seem to find a proper way to apply this patchset. On what
> patchset is it based ?
>
> I'm still here with what seems to be a rather old version of your tree
> (3413ec), but it is still the head of your git tree on kernel.org.
>
> Thanks,
> Maxime
It should apply to staging/staging-next
>
> On 05/12/2011 22:37, Jonathan Cameron wrote:
>> Hi Greg,
>>
>> The v3 here is just to indicate a tiny change suggested by
>> Lars-Peter from the version that has been out for review on
>> linux-iio. (Using ALIGN instead of hand rolling in one case
>> in patch 4). Anyhow, not worth putting out for another review
>> as Lars-Peter has tested and acked without it anyway.
>>
>> Technically Lars-Peter only acked patches 4 and 5 but they
>> are the important ones (the others being trivial or tied
>> up with the max1363 driver which is one of mine..)
>>
>> This set introduces the an optional demultiplexer into the
>> path of data form devices to buffers. It is a necessary step
>> on the path to in kernel push interfaces (trigger driven ones).
>> Also rather useful on it's own as shown by the max1363 patches
>> and some uses Lars-Peter has made of it in another series.
>>
>> Anyhow fair bit more to come so time to send these on to you!
>>
>> Thanks,
>>
>> Jonathan
>>
>> v2 text:
>> Hi All,
>>
>> New version of this series. Two changes as per Lars-Peter's
>> suggestions. ALIGN macro usage in patch 4 and one of the two
>> for each bit set suggestions. The second is subtly different
>> as it is finding bits after a certain point rather than from
>> the start.
>>
>> As explained in patch 5 discussion, I personally feel that
>> the demux should occur prior to the buffer and avoiding the
>> extra copy should be done by allowing buffers to provide
>> callbacks for reserving (plus getting access to) space and
>> notifying that they are done filling it. Either way, now
>> is not the time to do this change. Too much else going on!
>>
>> v1 text:
>> The last patch technically is a simple bug fix, but included here as
>> it came up during testing of this series.
>>
>> The 'interesting' bits are the rewrite of iio_sw_buffer_preenable. I'd like
>> people with drivers currently using that function to test and see what
>> I have broken. We should also be able to drop a number of cases in specific
>> drivers in favour of this version.
>>
>> The demux unit is designed to offer a straight path with little or no
>> overhead if the client (here still the IIO buffer) needs all the data and to
>> only get in the way when a subset of the active scan mask is requested.
>>
>> I may well have messed this up so please please test this set.
>>
>>
>> Jonathan Cameron (7):
>> staging:iio:find iio channel from scan index util function
>> staging:iio:buffer add a cache of the timestamp scan index.
>> staging:iio: add hook to allow core to perform scan related config.
>> staging:iio: make iio_sw_buffer_preenable much more general.
>> staging:iio: add demux optionally to path from device to buffer
>> staging:iio:adc:max1363 use new demuxing support.
>> staging:iio:adc:max1363 correctly set channels as big endian.
>>
>> drivers/staging/iio/adc/max1363.h | 11 ++-
>> drivers/staging/iio/adc/max1363_core.c | 18 ++-
>> drivers/staging/iio/adc/max1363_ring.c | 51 ++-----
>> drivers/staging/iio/buffer.h | 16 ++
>> drivers/staging/iio/iio.h | 13 ++-
>> drivers/staging/iio/industrialio-buffer.c | 212 +++++++++++++++++++++++++----
>> drivers/staging/iio/industrialio-core.c | 11 ++
>> 7 files changed, 259 insertions(+), 73 deletions(-)
>>
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V3 0/7] Add scan demux unit and use it in max1363
2011-12-06 15:51 ` Lars-Peter Clausen
@ 2011-12-06 17:05 ` Jonathan Cameron
2011-12-06 20:06 ` Jonathan Cameron
0 siblings, 1 reply; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-06 17:05 UTC (permalink / raw)
To: Lars-Peter Clausen, Maxime Ripard; +Cc: Jonathan Cameron, linux-iio
Lars-Peter Clausen <lars@metafoo.de> wrote:
>On 12/06/2011 04:39 PM, Maxime Ripard wrote:
>> Hi Jonathan,
>>
>> I can't seem to find a proper way to apply this patchset. On what
>> patchset is it based ?
>>
>> I'm still here with what seems to be a rather old version of your
>tree
>> (3413ec), but it is still the head of your git tree on kernel.org.
>>
>> Thanks,
>> Maxime
>
>It should apply to staging/staging-next
Sorry. This is all queued up locally. I just forgot to push last night! LarsPeter is also correct as my master branch is just staging-next plus stuff that has gone to Greg.
>
>>
>> On 05/12/2011 22:37, Jonathan Cameron wrote:
>>> Hi Greg,
>>>
>>> The v3 here is just to indicate a tiny change suggested by
>>> Lars-Peter from the version that has been out for review on
>>> linux-iio. (Using ALIGN instead of hand rolling in one case
>>> in patch 4). Anyhow, not worth putting out for another review
>>> as Lars-Peter has tested and acked without it anyway.
>>>
>>> Technically Lars-Peter only acked patches 4 and 5 but they
>>> are the important ones (the others being trivial or tied
>>> up with the max1363 driver which is one of mine..)
>>>
>>> This set introduces the an optional demultiplexer into the
>>> path of data form devices to buffers. It is a necessary step
>>> on the path to in kernel push interfaces (trigger driven ones).
>>> Also rather useful on it's own as shown by the max1363 patches
>>> and some uses Lars-Peter has made of it in another series.
>>>
>>> Anyhow fair bit more to come so time to send these on to you!
>>>
>>> Thanks,
>>>
>>> Jonathan
>>>
>>> v2 text:
>>> Hi All,
>>>
>>> New version of this series. Two changes as per Lars-Peter's
>>> suggestions. ALIGN macro usage in patch 4 and one of the two
>>> for each bit set suggestions. The second is subtly different
>>> as it is finding bits after a certain point rather than from
>>> the start.
>>>
>>> As explained in patch 5 discussion, I personally feel that
>>> the demux should occur prior to the buffer and avoiding the
>>> extra copy should be done by allowing buffers to provide
>>> callbacks for reserving (plus getting access to) space and
>>> notifying that they are done filling it. Either way, now
>>> is not the time to do this change. Too much else going on!
>>>
>>> v1 text:
>>> The last patch technically is a simple bug fix, but included here as
>>> it came up during testing of this series.
>>>
>>> The 'interesting' bits are the rewrite of iio_sw_buffer_preenable.
>I'd like
>>> people with drivers currently using that function to test and see
>what
>>> I have broken. We should also be able to drop a number of cases in
>specific
>>> drivers in favour of this version.
>>>
>>> The demux unit is designed to offer a straight path with little or
>no
>>> overhead if the client (here still the IIO buffer) needs all the
>data and to
>>> only get in the way when a subset of the active scan mask is
>requested.
>>>
>>> I may well have messed this up so please please test this set.
>>>
>>>
>>> Jonathan Cameron (7):
>>> staging:iio:find iio channel from scan index util function
>>> staging:iio:buffer add a cache of the timestamp scan index.
>>> staging:iio: add hook to allow core to perform scan related
>config.
>>> staging:iio: make iio_sw_buffer_preenable much more general.
>>> staging:iio: add demux optionally to path from device to buffer
>>> staging:iio:adc:max1363 use new demuxing support.
>>> staging:iio:adc:max1363 correctly set channels as big endian.
>>>
>>> drivers/staging/iio/adc/max1363.h | 11 ++-
>>> drivers/staging/iio/adc/max1363_core.c | 18 ++-
>>> drivers/staging/iio/adc/max1363_ring.c | 51 ++-----
>>> drivers/staging/iio/buffer.h | 16 ++
>>> drivers/staging/iio/iio.h | 13 ++-
>>> drivers/staging/iio/industrialio-buffer.c | 212
>+++++++++++++++++++++++++----
>>> drivers/staging/iio/industrialio-core.c | 11 ++
>>> 7 files changed, 259 insertions(+), 73 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
--
Sent from my Android phone
with K-9 Mail. Please excuse my brevity.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V3 0/7] Add scan demux unit and use it in max1363
2011-12-06 17:05 ` Jonathan Cameron
@ 2011-12-06 20:06 ` Jonathan Cameron
2011-12-07 10:39 ` Maxime Ripard
0 siblings, 1 reply; 12+ messages in thread
From: Jonathan Cameron @ 2011-12-06 20:06 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: Lars-Peter Clausen, Maxime Ripard, linux-iio
On 12/06/2011 05:05 PM, Jonathan Cameron wrote:
>
>
> Lars-Peter Clausen <lars@metafoo.de> wrote:
>
>> On 12/06/2011 04:39 PM, Maxime Ripard wrote:
>>> Hi Jonathan,
>>>
>>> I can't seem to find a proper way to apply this patchset. On what
>>> patchset is it based ?
>>>
>>> I'm still here with what seems to be a rather old version of your
>> tree
>>> (3413ec), but it is still the head of your git tree on kernel.org.
>>>
>>> Thanks,
>>> Maxime
>>
>> It should apply to staging/staging-next
> Sorry. This is all queued up locally. I just forgot to push last night! LarsPeter is also correct as my master branch is just staging-next plus stuff that has gone to Greg.
I have just pushed the master branch to kernel.org.
I have also pushed inkern-staging but the two extra patches in there
need a fair bit more cleaning up. However, if anyone with a need for
an inkernel push interface (e.g. input client for iio device) wants
to test what is there, I'd certainly welcome any feedback.
Jonathan
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH V3 0/7] Add scan demux unit and use it in max1363
2011-12-06 20:06 ` Jonathan Cameron
@ 2011-12-07 10:39 ` Maxime Ripard
0 siblings, 0 replies; 12+ messages in thread
From: Maxime Ripard @ 2011-12-07 10:39 UTC (permalink / raw)
To: Jonathan Cameron; +Cc: Jonathan Cameron, Lars-Peter Clausen, linux-iio
On 06/12/2011 21:06, Jonathan Cameron wrote:
> On 12/06/2011 05:05 PM, Jonathan Cameron wrote:
>>
>>
>> Lars-Peter Clausen <lars@metafoo.de> wrote:
>>
>>> On 12/06/2011 04:39 PM, Maxime Ripard wrote:
>>>> Hi Jonathan,
>>>>
>>>> I can't seem to find a proper way to apply this patchset. On what
>>>> patchset is it based ?
>>>>
>>>> I'm still here with what seems to be a rather old version of your
>>> tree
>>>> (3413ec), but it is still the head of your git tree on kernel.org.
>>>>
>>>> Thanks,
>>>> Maxime
>>>
>>> It should apply to staging/staging-next
>> Sorry. This is all queued up locally. I just forgot to push last night! LarsPeter is also correct as my master branch is just staging-next plus stuff that has gone to Greg.
> I have just pushed the master branch to kernel.org.
Great, thanks ! :)
Maxime
--
Maxime Ripard, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
^ permalink raw reply [flat|nested] 12+ messages in thread