staging:iio: Add caching of scan_timestamp to the core as well as buffers.
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>
This commit is contained in:
parent
f5ee7b807f
commit
fd6487f843
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue