aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/iio
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2013-09-19 08:59:00 -0400
committerJonathan Cameron <jic23@kernel.org>2013-09-21 14:23:50 -0400
commitd2c3d072c4aded65f0632223cc0d3a8a2e577b3a (patch)
tree0783d4a0c3831e7ae107893681acc48e7753cbb5 /include/linux/iio
parent183f41734c7cf33cc37efaf7dd2f82866513d74d (diff)
iio: Add iio_push_buffers_with_timestamp() helper
Drivers using software buffers often store the timestamp in their data buffer before calling iio_push_to_buffers() with that data buffer. Storing the timestamp in the buffer usually involves some ugly pointer arithmetic. This patch adds a new helper function called iio_push_buffers_with_timestamp() which is similar to iio_push_to_buffers but takes an additional timestamp parameter. The function will help to hide to uglyness in one central place instead of exposing it in every driver. If timestamps are enabled for the IIO device iio_push_buffers_with_timestamp() will store the timestamp as the last element in buffer, before passing the buffer on to iio_push_buffers(). The buffer needs large enough to hold the timestamp in this case. If timestamps are disabled iio_push_buffers_with_timestamp() will behave just like iio_push_buffers(). Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Cc: Oleksandr Kravchenko <o.v.kravchenko@globallogic.com> Cc: Josh Wu <josh.wu@atmel.com> Cc: Denis Ciocca <denis.ciocca@gmail.com> Cc: Manuel Stahl <manuel.stahl@iis.fraunhofer.de> Cc: Ge Gao <ggao@invensense.com> Cc: Peter Meerwald <pmeerw@pmeerw.net> Cc: Jacek Anaszewski <j.anaszewski@samsung.com> Cc: Fabio Estevam <fabio.estevam@freescale.com> Cc: Marek Vasut <marex@denx.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'include/linux/iio')
-rw-r--r--include/linux/iio/buffer.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/include/linux/iio/buffer.h b/include/linux/iio/buffer.h
index e5507e999ed1..a1124bdc4cac 100644
--- a/include/linux/iio/buffer.h
+++ b/include/linux/iio/buffer.h
@@ -122,6 +122,31 @@ int iio_scan_mask_set(struct iio_dev *indio_dev,
122 */ 122 */
123int iio_push_to_buffers(struct iio_dev *indio_dev, const void *data); 123int iio_push_to_buffers(struct iio_dev *indio_dev, const void *data);
124 124
125/*
126 * iio_push_to_buffers_with_timestamp() - push data and timestamp to buffers
127 * @indio_dev: iio_dev structure for device.
128 * @data: sample data
129 * @timestamp: timestamp for the sample data
130 *
131 * Pushes data to the IIO device's buffers. If timestamps are enabled for the
132 * device the function will store the supplied timestamp as the last element in
133 * the sample data buffer before pushing it to the device buffers. The sample
134 * data buffer needs to be large enough to hold the additional timestamp
135 * (usually the buffer should be indio->scan_bytes bytes large).
136 *
137 * Returns 0 on success, a negative error code otherwise.
138 */
139static inline int iio_push_to_buffers_with_timestamp(struct iio_dev *indio_dev,
140 void *data, int64_t timestamp)
141{
142 if (indio_dev->scan_timestamp) {
143 size_t ts_offset = indio_dev->scan_bytes / sizeof(int64_t) - 1;
144 ((int64_t *)data)[ts_offset] = timestamp;
145 }
146
147 return iio_push_to_buffers(indio_dev, data);
148}
149
125int iio_update_demux(struct iio_dev *indio_dev); 150int iio_update_demux(struct iio_dev *indio_dev);
126 151
127/** 152/**