]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
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 1370e32dead6b7780162202273e7b10efc5ce7ce..49912e2dde3ec78e07db45a0bd2612a652668117 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 86f4efb7faba0c230ecce3310bcbaef71965c91e..5c40f6c72971c8167e27fd443eab0f3d8732831b 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 34ef11f053fb19faaa3ba8cda4679c37acccf67f..bf5488ecc65b44e00e26781b585f7390531586b2 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 1424d4896ea6e52cc70538dce8e4e52b3274c19b..3101c537d13d2b629eca25c399829f1bd9487f34 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 9ff0634e0963fe9abb6517386a6db844d5e82e27..c4459f73e74772e579f1214cbcb55f1fa2f67dce 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 3bdc1021ddd54e571e1ba39854c0954cfc6e4905..ebd5b4d3d957ec67e40455c77bf97e35e026863f 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 25ef3c370d1f8a46c7253e56bac9f4d92a24bbd2..5d316857c13adc18f5350cf632f933f65bd1ecc6 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 5c13690d98a84081f2bccb16d91e338f29e4a4e0..538e3b357e44bd94bf19b470d75f2f3eb7230f8d 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 a090bc3acc9d098b0a65593c84f787451b028371..8534f6b3cccbbb2a499b1ef96d700177d3489342 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 6cbf24258724421e619a7df6f8312a706c5c2d30..007b6005beed4d1eb9508102fec4403c3af4cb31 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 2aeeaa2a339772201d1abeeb77165df1b78bebb6..7f68c7c84ac6452e653e0f8dcc1dd0e73c652037 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 442994e7562928d34be800d0fec321a7f4f269ec..62681a8d43c1f767a1ce911fbc3fe67f0ad395f7 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 dfdbf92f11151ade18259bb7f14984a9126315b2..5190e506716ffa5a3d712e83935a0058e414b85f 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 d0a60a38293090b71add988f7caaa87de82aff49..8372e9819b605e8306dd3237c19481925d79de0b 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 18fc73c66596d5ba9dc94dbf546b9c2486c81988..046f84d0eeca8a037b60033da6d98ace2464c54d 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 7a10aed1ec9d1f51143c7f2553be093b07db8831..077034019c2f03b0c7c6b620777fcb55971fe268 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 61a26229630e862c383c2c563bea2fe917321471..49e7aa19889f4224e789c10127b7b30fa20c571d 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 f6cb0abbc643b9e6a79893ed44d9d77650016493..6c329f953f41e25c99008dcc97e68f4867711b40 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 3dfd788c10a16915e5ffc07504c0fa320f00fcc6..b37bc98ce4d76c32327f35140752a52a984a0ab6 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);