Skip to content

Commit

Permalink
staging:iio: Add caching of scan_timestamp to the core as well as buf…
Browse files Browse the repository at this point in the history
…fers.

This will be needed when multiple buffer support is added.

Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Jonathan Cameron authored and Greg Kroah-Hartman committed Apr 24, 2012
1 parent f5ee7b8 commit fd6487f
Show file tree
Hide file tree
Showing 19 changed files with 22 additions and 21 deletions.
2 changes: 1 addition & 1 deletion drivers/staging/iio/accel/adis16201_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ static irqreturn_t adis16201_trigger_handler(int irq, void *p)
data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
*((s64 *)(data + ((i + 3)/4)*4)) = pf->timestamp;

ring->access->store_to(ring, (u8 *)data, pf->timestamp);
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/accel/adis16203_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ static irqreturn_t adis16203_trigger_handler(int irq, void *p)
data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
*((s64 *)(data + ((i + 3)/4)*4)) = pf->timestamp;

ring->access->store_to(ring,
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/accel/adis16204_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ static irqreturn_t adis16204_trigger_handler(int irq, void *p)
data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
*((s64 *)(data + ((i + 3)/4)*4)) = pf->timestamp;

ring->access->store_to(ring, (u8 *)data, pf->timestamp);
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/accel/adis16209_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ static irqreturn_t adis16209_trigger_handler(int irq, void *p)
data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
*((s64 *)(data + ((i + 3)/4)*4)) = pf->timestamp;

ring->access->store_to(ring, (u8 *)data, pf->timestamp);
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/accel/adis16240_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ static irqreturn_t adis16240_trigger_handler(int irq, void *p)
data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
*((s64 *)(data + ((i + 3)/4)*4)) = pf->timestamp;

ring->access->store_to(ring, (u8 *)data, pf->timestamp);
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/accel/lis3l02dq_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ static irqreturn_t lis3l02dq_trigger_handler(int irq, void *p)
len = lis3l02dq_get_buffer_element(indio_dev, data);

/* Guaranteed to be aligned with 8 byte boundary */
if (buffer->scan_timestamp)
if (indio_dev->scan_timestamp)
*(s64 *)(((phys_addr_t)data + len
+ sizeof(s64) - 1) & ~(sizeof(s64) - 1))
= pf->timestamp;
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/adc/ad7192.c
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ static irqreturn_t ad7192_trigger_handler(int irq, void *p)
indio_dev->channels[0].scan_type.realbits/8);

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
dat64[1] = pf->timestamp;

ring->access->store_to(ring, (u8 *)dat64, pf->timestamp);
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/adc/ad7298_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ static irqreturn_t ad7298_trigger_handler(int irq, void *p)
if (b_sent)
return b_sent;

if (ring->scan_timestamp) {
if (indio_dev->scan_timestamp) {
time_ns = iio_get_time_ns();
memcpy((u8 *)buf + indio_dev->scan_bytes - sizeof(s64),
&time_ns, sizeof(time_ns));
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/adc/ad7476_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ static irqreturn_t ad7476_trigger_handler(int irq, void *p)

time_ns = iio_get_time_ns();

if (indio_dev->buffer->scan_timestamp)
if (indio_dev->scan_timestamp)
memcpy(rxbuf + indio_dev->scan_bytes - sizeof(s64),
&time_ns, sizeof(time_ns));

Expand Down
5 changes: 2 additions & 3 deletions drivers/staging/iio/adc/ad7606_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,8 @@ static void ad7606_poll_bh_to_ring(struct work_struct *work_s)

time_ns = iio_get_time_ns();

if (ring->scan_timestamp)
*((s64 *)(buf + ring->access->get_bytes_per_datum(ring) -
sizeof(s64))) = time_ns;
if (indio_dev->scan_timestamp)
*((s64 *)(buf + indio_dev->scan_bytes - sizeof(s64))) = time_ns;

ring->access->store_to(indio_dev->buffer, buf, time_ns);
done:
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/adc/ad7793.c
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ static irqreturn_t ad7793_trigger_handler(int irq, void *p)
indio_dev->channels[0].scan_type.realbits/8);

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
dat64[1] = pf->timestamp;

ring->access->store_to(ring, (u8 *)dat64, pf->timestamp);
Expand Down
3 changes: 1 addition & 2 deletions drivers/staging/iio/adc/ad7887_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ static irqreturn_t ad7887_trigger_handler(int irq, void *p)
struct iio_poll_func *pf = p;
struct iio_dev *indio_dev = pf->indio_dev;
struct ad7887_state *st = iio_priv(indio_dev);
struct iio_buffer *ring = indio_dev->buffer;
s64 time_ns;
__u8 *buf;
int b_sent;
Expand All @@ -92,7 +91,7 @@ static irqreturn_t ad7887_trigger_handler(int irq, void *p)
time_ns = iio_get_time_ns();

memcpy(buf, st->data, bytes);
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
memcpy(buf + indio_dev->scan_bytes - sizeof(s64),
&time_ns, sizeof(time_ns));

Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/adc/ad799x_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ static irqreturn_t ad799x_trigger_handler(int irq, void *p)

time_ns = iio_get_time_ns();

if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
memcpy(rxbuf + indio_dev->scan_bytes - sizeof(s64),
&time_ns, sizeof(time_ns));

Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/iio/adc/max1363_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ static irqreturn_t max1363_trigger_handler(int irq, void *p)
d_size = numvals*2;
else
d_size = numvals;
if (indio_dev->buffer->scan_timestamp) {
if (indio_dev->scan_timestamp) {
d_size += sizeof(s64);
if (d_size % sizeof(s64))
d_size += sizeof(s64) - (d_size % sizeof(s64));
Expand All @@ -78,7 +78,7 @@ static irqreturn_t max1363_trigger_handler(int irq, void *p)

time_ns = iio_get_time_ns();

if (indio_dev->buffer->scan_timestamp)
if (indio_dev->scan_timestamp)
memcpy(rxbuf + d_size - sizeof(s64), &time_ns, sizeof(time_ns));
iio_push_to_buffer(indio_dev->buffer, rxbuf, time_ns);

Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/gyro/adis16260_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ static irqreturn_t adis16260_trigger_handler(int irq, void *p)
data[i] = be16_to_cpup((__be16 *)&(st->rx[i*2]));

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
*((s64 *)(data + ((i + 3)/4)*4)) = pf->timestamp;

ring->access->store_to(ring, (u8 *)data, pf->timestamp);
Expand Down
2 changes: 2 additions & 0 deletions drivers/staging/iio/iio.h
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ struct iio_buffer_setup_ops {
* @masklength: [INTERN] the length of the mask established from
* channels
* @active_scan_mask: [INTERN] union of all scan masks requested by buffers
* @scan_timestamp: [INTERN] set if any buffers have requested timestamp
* @scan_index_timestamp:[INTERN] cache of the index to the timestamp
* @trig: [INTERN] current device trigger (buffer modes)
* @pollfunc: [DRIVER] function run on trigger being received
Expand Down Expand Up @@ -342,6 +343,7 @@ struct iio_dev {
const unsigned long *available_scan_masks;
unsigned masklength;
const unsigned long *active_scan_mask;
bool scan_timestamp;
unsigned scan_index_timestamp;
struct iio_trigger *trig;
struct iio_poll_func *pollfunc;
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/iio_simple_dummy_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p)
}
}
/* Store a timestampe at an 8 byte boundary */
if (buffer->scan_timestamp)
if (indio_dev->scan_timestamp)
*(s64 *)(((phys_addr_t)data + len
+ sizeof(s64) - 1) & ~(sizeof(s64) - 1))
= iio_get_time_ns();
Expand Down
1 change: 1 addition & 0 deletions drivers/staging/iio/industrialio-buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ static ssize_t iio_scan_el_ts_store(struct device *dev,
goto error_ret;
}
indio_dev->buffer->scan_timestamp = state;
indio_dev->scan_timestamp = state;
error_ret:
mutex_unlock(&indio_dev->mlock);

Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/iio/meter/ade7758_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ static irqreturn_t ade7758_trigger_handler(int irq, void *p)
*dat32 = get_unaligned_be32(&st->rx_buf[5]) & 0xFFFFFF;

/* Guaranteed to be aligned with 8 byte boundary */
if (ring->scan_timestamp)
if (indio_dev->scan_timestamp)
dat64[1] = pf->timestamp;

ring->access->store_to(ring, (u8 *)dat64, pf->timestamp);
Expand Down

0 comments on commit fd6487f

Please sign in to comment.