2 * sca3000_ring.c -- support VTI sca3000 series accelerometers via SPI
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 2 as published by
6 * the Free Software Foundation.
8 * Copyright (c) 2009 Jonathan Cameron <jic23@cam.ac.uk>
12 #include <linux/interrupt.h>
14 #include <linux/slab.h>
15 #include <linux/kernel.h>
16 #include <linux/spi/spi.h>
17 #include <linux/sysfs.h>
18 #include <linux/sched.h>
19 #include <linux/poll.h>
21 #include <linux/iio/iio.h>
22 #include <linux/iio/sysfs.h>
23 #include <linux/iio/buffer.h>
24 #include "../ring_hw.h"
29 * The internal ring buffer doesn't actually change what it holds depending
30 * on which signals are enabled etc, merely whether you can read them.
31 * As such the scan mode selection is somewhat different than for a software
32 * ring buffer and changing it actually covers any data already in the buffer.
33 * Currently scan elements aren't configured so it doesn't matter.
36 static int sca3000_read_data(struct sca3000_state *st,
37 uint8_t reg_address_high,
42 struct spi_message msg;
43 struct spi_transfer xfer[2] = {
51 *rx_p = kmalloc(len, GFP_KERNEL);
56 xfer[1].rx_buf = *rx_p;
57 st->tx[0] = SCA3000_READ_REG(reg_address_high);
58 spi_message_init(&msg);
59 spi_message_add_tail(&xfer[0], &msg);
60 spi_message_add_tail(&xfer[1], &msg);
61 ret = spi_sync(st->us, &msg);
63 dev_err(get_device(&st->us->dev), "problem reading register");
75 * sca3000_read_first_n_hw_rb() - main ring access, pulls data from ring
77 * @count: number of samples to try and pull
78 * @data: output the actual samples pulled from the hw ring
80 * Currently does not provide timestamps. As the hardware doesn't add them they
81 * can only be inferred approximately from ring buffer events such as 50% full
82 * and knowledge of when buffer was last emptied. This is left to userspace.
84 static int sca3000_read_first_n_hw_rb(struct iio_buffer *r,
85 size_t count, char __user *buf)
87 struct iio_hw_buffer *hw_ring = iio_to_hw_buf(r);
88 struct iio_dev *indio_dev = hw_ring->private;
89 struct sca3000_state *st = iio_priv(indio_dev);
91 int ret, i, num_available, num_read = 0;
92 int bytes_per_sample = 1;
97 mutex_lock(&st->lock);
98 if (count % bytes_per_sample) {
103 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_BUF_COUNT, 1);
107 num_available = st->rx[0];
109 * num_available is the total number of samples available
110 * i.e. number of time points * number of channels.
112 if (count > num_available * bytes_per_sample)
113 num_read = num_available*bytes_per_sample;
117 ret = sca3000_read_data(st,
118 SCA3000_REG_ADDR_RING_OUT,
123 for (i = 0; i < num_read; i++)
124 *(((u16 *)rx) + i) = be16_to_cpup((u16 *)rx + i);
126 if (copy_to_user(buf, rx, num_read))
131 mutex_unlock(&st->lock);
133 return ret ? ret : num_read;
136 /* This is only valid with all 3 elements enabled */
137 static int sca3000_ring_get_length(struct iio_buffer *r)
142 /* only valid if resolution is kept at 11bits */
143 static int sca3000_ring_get_bytes_per_datum(struct iio_buffer *r)
148 static IIO_BUFFER_ENABLE_ATTR;
149 static IIO_BUFFER_LENGTH_ATTR;
152 * sca3000_query_ring_int() is the hardware ring status interrupt enabled
154 static ssize_t sca3000_query_ring_int(struct device *dev,
155 struct device_attribute *attr,
158 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
160 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
161 struct sca3000_state *st = iio_priv(indio_dev);
163 mutex_lock(&st->lock);
164 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1);
166 mutex_unlock(&st->lock);
170 return sprintf(buf, "%d\n", !!(val & this_attr->address));
174 * sca3000_set_ring_int() set state of ring status interrupt
176 static ssize_t sca3000_set_ring_int(struct device *dev,
177 struct device_attribute *attr,
181 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
182 struct sca3000_state *st = iio_priv(indio_dev);
183 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
187 mutex_lock(&st->lock);
188 ret = strict_strtol(buf, 10, &val);
191 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1);
195 ret = sca3000_write_reg(st,
196 SCA3000_REG_ADDR_INT_MASK,
197 st->rx[0] | this_attr->address);
199 ret = sca3000_write_reg(st,
200 SCA3000_REG_ADDR_INT_MASK,
201 st->rx[0] & ~this_attr->address);
203 mutex_unlock(&st->lock);
205 return ret ? ret : len;
208 static IIO_DEVICE_ATTR(50_percent, S_IRUGO | S_IWUSR,
209 sca3000_query_ring_int,
210 sca3000_set_ring_int,
211 SCA3000_INT_MASK_RING_HALF);
213 static IIO_DEVICE_ATTR(75_percent, S_IRUGO | S_IWUSR,
214 sca3000_query_ring_int,
215 sca3000_set_ring_int,
216 SCA3000_INT_MASK_RING_THREE_QUARTER);
218 static ssize_t sca3000_show_buffer_scale(struct device *dev,
219 struct device_attribute *attr,
222 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
223 struct sca3000_state *st = iio_priv(indio_dev);
225 return sprintf(buf, "0.%06d\n", 4*st->info->scale);
228 static IIO_DEVICE_ATTR(in_accel_scale,
230 sca3000_show_buffer_scale,
235 * Ring buffer attributes
236 * This device is a bit unusual in that the sampling frequency and bpse
237 * only apply to the ring buffer. At all times full rate and accuracy
238 * is available via direct reading from registers.
240 static struct attribute *sca3000_ring_attributes[] = {
241 &dev_attr_length.attr,
242 &dev_attr_enable.attr,
243 &iio_dev_attr_50_percent.dev_attr.attr,
244 &iio_dev_attr_75_percent.dev_attr.attr,
245 &iio_dev_attr_in_accel_scale.dev_attr.attr,
249 static struct attribute_group sca3000_ring_attr = {
250 .attrs = sca3000_ring_attributes,
254 static struct iio_buffer *sca3000_rb_allocate(struct iio_dev *indio_dev)
256 struct iio_buffer *buf;
257 struct iio_hw_buffer *ring;
259 ring = kzalloc(sizeof *ring, GFP_KERNEL);
263 ring->private = indio_dev;
265 buf->stufftoread = 0;
266 buf->attrs = &sca3000_ring_attr;
267 iio_buffer_init(buf);
272 static inline void sca3000_rb_free(struct iio_buffer *r)
274 kfree(iio_to_hw_buf(r));
277 static const struct iio_buffer_access_funcs sca3000_ring_access_funcs = {
278 .read_first_n = &sca3000_read_first_n_hw_rb,
279 .get_length = &sca3000_ring_get_length,
280 .get_bytes_per_datum = &sca3000_ring_get_bytes_per_datum,
283 int sca3000_configure_ring(struct iio_dev *indio_dev)
285 indio_dev->buffer = sca3000_rb_allocate(indio_dev);
286 if (indio_dev->buffer == NULL)
288 indio_dev->modes |= INDIO_BUFFER_HARDWARE;
290 indio_dev->buffer->access = &sca3000_ring_access_funcs;
295 void sca3000_unconfigure_ring(struct iio_dev *indio_dev)
297 sca3000_rb_free(indio_dev->buffer);
301 int __sca3000_hw_ring_state_set(struct iio_dev *indio_dev, bool state)
303 struct sca3000_state *st = iio_priv(indio_dev);
306 mutex_lock(&st->lock);
307 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1);
311 printk(KERN_INFO "supposedly enabling ring buffer\n");
312 ret = sca3000_write_reg(st,
313 SCA3000_REG_ADDR_MODE,
314 (st->rx[0] | SCA3000_RING_BUF_ENABLE));
316 ret = sca3000_write_reg(st,
317 SCA3000_REG_ADDR_MODE,
318 (st->rx[0] & ~SCA3000_RING_BUF_ENABLE));
320 mutex_unlock(&st->lock);
325 * sca3000_hw_ring_preenable() hw ring buffer preenable function
327 * Very simple enable function as the chip will allows normal reads
328 * during ring buffer operation so as long as it is indeed running
329 * before we notify the core, the precise ordering does not matter.
331 static int sca3000_hw_ring_preenable(struct iio_dev *indio_dev)
333 return __sca3000_hw_ring_state_set(indio_dev, 1);
336 static int sca3000_hw_ring_postdisable(struct iio_dev *indio_dev)
338 return __sca3000_hw_ring_state_set(indio_dev, 0);
341 static const struct iio_buffer_setup_ops sca3000_ring_setup_ops = {
342 .preenable = &sca3000_hw_ring_preenable,
343 .postdisable = &sca3000_hw_ring_postdisable,
346 void sca3000_register_ring_funcs(struct iio_dev *indio_dev)
348 indio_dev->setup_ops = &sca3000_ring_setup_ops;
352 * sca3000_ring_int_process() ring specific interrupt handling.
354 * This is only split from the main interrupt handler so as to
355 * reduce the amount of code if the ring buffer is not enabled.
357 void sca3000_ring_int_process(u8 val, struct iio_buffer *ring)
359 if (val & (SCA3000_INT_STATUS_THREE_QUARTERS |
360 SCA3000_INT_STATUS_HALF)) {
361 ring->stufftoread = true;
362 wake_up_interruptible(&ring->pollq);