diff options
author | Michael Hennerich <michael.hennerich@analog.com> | 2011-02-24 16:19:49 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-02-28 17:40:56 -0500 |
commit | dcfb0863eec8ff0a3b2cee13e4f0e5bb5f0c3122 (patch) | |
tree | 54ae588885c30481b53f6c2501fa28b9faae02a2 | |
parent | e08d02658cac30a826565d2faebb74586f60d601 (diff) |
IIO: ADC: AD7606: Update timestamp handling
Add timestamp attributes.
Revise timestamp handling accordingly.
Preset timestamp generation.
Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/iio/adc/ad7606_ring.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/staging/iio/adc/ad7606_ring.c b/drivers/staging/iio/adc/ad7606_ring.c index 9889680232d..b32cb0dea6d 100644 --- a/drivers/staging/iio/adc/ad7606_ring.c +++ b/drivers/staging/iio/adc/ad7606_ring.c | |||
@@ -30,6 +30,9 @@ static IIO_SCAN_EL_C(in5, 5, 0, NULL); | |||
30 | static IIO_SCAN_EL_C(in6, 6, 0, NULL); | 30 | static IIO_SCAN_EL_C(in6, 6, 0, NULL); |
31 | static IIO_SCAN_EL_C(in7, 7, 0, NULL); | 31 | static IIO_SCAN_EL_C(in7, 7, 0, NULL); |
32 | 32 | ||
33 | static IIO_SCAN_EL_TIMESTAMP(8); | ||
34 | static IIO_CONST_ATTR_SCAN_EL_TYPE(timestamp, s, 64, 64); | ||
35 | |||
33 | static ssize_t ad7606_show_type(struct device *dev, | 36 | static ssize_t ad7606_show_type(struct device *dev, |
34 | struct device_attribute *attr, | 37 | struct device_attribute *attr, |
35 | char *buf) | 38 | char *buf) |
@@ -60,6 +63,9 @@ static struct attribute *ad7606_scan_el_attrs[] = { | |||
60 | &iio_const_attr_in6_index.dev_attr.attr, | 63 | &iio_const_attr_in6_index.dev_attr.attr, |
61 | &iio_scan_el_in7.dev_attr.attr, | 64 | &iio_scan_el_in7.dev_attr.attr, |
62 | &iio_const_attr_in7_index.dev_attr.attr, | 65 | &iio_const_attr_in7_index.dev_attr.attr, |
66 | &iio_const_attr_timestamp_index.dev_attr.attr, | ||
67 | &iio_scan_el_timestamp.dev_attr.attr, | ||
68 | &iio_const_attr_timestamp_type.dev_attr.attr, | ||
63 | &iio_dev_attr_in_type.dev_attr.attr, | 69 | &iio_dev_attr_in_type.dev_attr.attr, |
64 | NULL, | 70 | NULL, |
65 | }; | 71 | }; |
@@ -133,10 +139,14 @@ static int ad7606_ring_preenable(struct iio_dev *indio_dev) | |||
133 | size_t d_size; | 139 | size_t d_size; |
134 | 140 | ||
135 | d_size = st->chip_info->num_channels * | 141 | d_size = st->chip_info->num_channels * |
136 | st->chip_info->bits / 8 + sizeof(s64); | 142 | st->chip_info->bits / 8; |
143 | |||
144 | if (ring->scan_timestamp) { | ||
145 | d_size += sizeof(s64); | ||
137 | 146 | ||
138 | if (d_size % sizeof(s64)) | 147 | if (d_size % sizeof(s64)) |
139 | d_size += sizeof(s64) - (d_size % sizeof(s64)); | 148 | d_size += sizeof(s64) - (d_size % sizeof(s64)); |
149 | } | ||
140 | 150 | ||
141 | if (ring->access.set_bytes_per_datum) | 151 | if (ring->access.set_bytes_per_datum) |
142 | ring->access.set_bytes_per_datum(ring, d_size); | 152 | ring->access.set_bytes_per_datum(ring, d_size); |
@@ -210,7 +220,10 @@ static void ad7606_poll_bh_to_ring(struct work_struct *work_s) | |||
210 | } | 220 | } |
211 | 221 | ||
212 | time_ns = iio_get_time_ns(); | 222 | time_ns = iio_get_time_ns(); |
213 | memcpy(buf + st->d_size - sizeof(s64), &time_ns, sizeof(time_ns)); | 223 | |
224 | if (ring->scan_timestamp) | ||
225 | memcpy(buf + st->d_size - sizeof(s64), | ||
226 | &time_ns, sizeof(time_ns)); | ||
214 | 227 | ||
215 | ring->access.store_to(&sw_ring->buf, buf, time_ns); | 228 | ring->access.store_to(&sw_ring->buf, buf, time_ns); |
216 | done: | 229 | done: |
@@ -242,6 +255,7 @@ int ad7606_register_ring_funcs_and_init(struct iio_dev *indio_dev) | |||
242 | indio_dev->ring->postenable = &iio_triggered_ring_postenable; | 255 | indio_dev->ring->postenable = &iio_triggered_ring_postenable; |
243 | indio_dev->ring->predisable = &iio_triggered_ring_predisable; | 256 | indio_dev->ring->predisable = &iio_triggered_ring_predisable; |
244 | indio_dev->ring->scan_el_attrs = &ad7606_scan_el_group; | 257 | indio_dev->ring->scan_el_attrs = &ad7606_scan_el_group; |
258 | indio_dev->ring->scan_timestamp = true ; | ||
245 | 259 | ||
246 | INIT_WORK(&st->poll_work, &ad7606_poll_bh_to_ring); | 260 | INIT_WORK(&st->poll_work, &ad7606_poll_bh_to_ring); |
247 | 261 | ||