staging:iio: Add caching of scan_timestamp to the core as well as buffers.
authorJonathan Cameron <jic23@kernel.org>
Sat, 21 Apr 2012 09:09:44 +0000 (10:09 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 24 Apr 2012 18:23:38 +0000 (11:23 -0700)
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>
19 files changed:
drivers/staging/iio/accel/adis16201_ring.c
drivers/staging/iio/accel/adis16203_ring.c
drivers/staging/iio/accel/adis16204_ring.c
drivers/staging/iio/accel/adis16209_ring.c
drivers/staging/iio/accel/adis16240_ring.c
drivers/staging/iio/accel/lis3l02dq_ring.c
drivers/staging/iio/adc/ad7192.c
drivers/staging/iio/adc/ad7298_ring.c
drivers/staging/iio/adc/ad7476_ring.c
drivers/staging/iio/adc/ad7606_ring.c
drivers/staging/iio/adc/ad7793.c
drivers/staging/iio/adc/ad7887_ring.c
drivers/staging/iio/adc/ad799x_ring.c
drivers/staging/iio/adc/max1363_ring.c
drivers/staging/iio/gyro/adis16260_ring.c
drivers/staging/iio/iio.h
drivers/staging/iio/iio_simple_dummy_buffer.c
drivers/staging/iio/industrialio-buffer.c
drivers/staging/iio/meter/ade7758_ring.c

index 1370e32..49912e2 100644 (file)
@@ -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);
index 86f4efb..5c40f6c 100644 (file)
@@ -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,
index 34ef11f..bf5488e 100644 (file)
@@ -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);
index 1424d48..3101c53 100644 (file)
@@ -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);
index 9ff0634..c4459f7 100644 (file)
@@ -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);
index 3bdc102..ebd5b4d 100644 (file)
@@ -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;
index 25ef3c3..5d31685 100644 (file)
@@ -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);
index 5c13690..538e3b3 100644 (file)
@@ -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));
index a090bc3..8534f6b 100644 (file)
@@ -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));
 
index 6cbf242..007b600 100644 (file)
@@ -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:
index 2aeeaa2..7f68c7c 100644 (file)
@@ -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);
index 442994e..62681a8 100644 (file)
@@ -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;
@@ -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));
 
index dfdbf92..5190e50 100644 (file)
@@ -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));
 
index d0a60a3..8372e98 100644 (file)
@@ -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));
@@ -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);
 
index 18fc73c..046f84d 100644 (file)
@@ -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);
index 7a10aed..0770340 100644 (file)
@@ -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
@@ -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;
index 61a2622..49e7aa1 100644 (file)
@@ -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();
index f6cb0ab..6c329f9 100644 (file)
@@ -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);
 
index 3dfd788..b37bc98 100644 (file)
@@ -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);