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@kernel.org>
 
  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_transfer xfer[2] = {
 
  50         *rx_p = kmalloc(len, GFP_KERNEL);
 
  55         xfer[1].rx_buf = *rx_p;
 
  56         st->tx[0] = SCA3000_READ_REG(reg_address_high);
 
  57         ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer));
 
  59                 dev_err(get_device(&st->us->dev), "problem reading register");
 
  71  * sca3000_read_first_n_hw_rb() - main ring access, pulls data from ring
 
  73  * @count:              number of samples to try and pull
 
  74  * @data:               output the actual samples pulled from the hw ring
 
  76  * Currently does not provide timestamps.  As the hardware doesn't add them they
 
  77  * can only be inferred approximately from ring buffer events such as 50% full
 
  78  * and knowledge of when buffer was last emptied.  This is left to userspace.
 
  80 static int sca3000_read_first_n_hw_rb(struct iio_buffer *r,
 
  81                                       size_t count, char __user *buf)
 
  83         struct iio_hw_buffer *hw_ring = iio_to_hw_buf(r);
 
  84         struct iio_dev *indio_dev = hw_ring->private;
 
  85         struct sca3000_state *st = iio_priv(indio_dev);
 
  87         int ret, i, num_available, num_read = 0;
 
  88         int bytes_per_sample = 1;
 
  93         mutex_lock(&st->lock);
 
  94         if (count % bytes_per_sample) {
 
  99         ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_BUF_COUNT, 1);
 
 103                 num_available = st->rx[0];
 
 105          * num_available is the total number of samples available
 
 106          * i.e. number of time points * number of channels.
 
 108         if (count > num_available * bytes_per_sample)
 
 109                 num_read = num_available*bytes_per_sample;
 
 113         ret = sca3000_read_data(st,
 
 114                                 SCA3000_REG_ADDR_RING_OUT,
 
 119         for (i = 0; i < num_read; i++)
 
 120                 *(((u16 *)rx) + i) = be16_to_cpup((__be16 *)rx + i);
 
 122         if (copy_to_user(buf, rx, num_read))
 
 127         mutex_unlock(&st->lock);
 
 129         return ret ? ret : num_read;
 
 132 /* This is only valid with all 3 elements enabled */
 
 133 static int sca3000_ring_get_length(struct iio_buffer *r)
 
 138 /* only valid if resolution is kept at 11bits */
 
 139 static int sca3000_ring_get_bytes_per_datum(struct iio_buffer *r)
 
 144 static bool sca3000_ring_buf_data_available(struct iio_buffer *r)
 
 146         return r->stufftoread;
 
 149 static IIO_BUFFER_ENABLE_ATTR;
 
 150 static IIO_BUFFER_LENGTH_ATTR;
 
 153  * sca3000_query_ring_int() is the hardware ring status interrupt enabled
 
 155 static ssize_t sca3000_query_ring_int(struct device *dev,
 
 156                                       struct device_attribute *attr,
 
 159         struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 
 161         struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 
 162         struct sca3000_state *st = iio_priv(indio_dev);
 
 164         mutex_lock(&st->lock);
 
 165         ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1);
 
 167         mutex_unlock(&st->lock);
 
 171         return sprintf(buf, "%d\n", !!(val & this_attr->address));
 
 175  * sca3000_set_ring_int() set state of ring status interrupt
 
 177 static ssize_t sca3000_set_ring_int(struct device *dev,
 
 178                                       struct device_attribute *attr,
 
 182         struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 
 183         struct sca3000_state *st = iio_priv(indio_dev);
 
 184         struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 
 188         mutex_lock(&st->lock);
 
 189         ret = kstrtou8(buf, 10, &val);
 
 192         ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1);
 
 196                 ret = sca3000_write_reg(st,
 
 197                                         SCA3000_REG_ADDR_INT_MASK,
 
 198                                         st->rx[0] | this_attr->address);
 
 200                 ret = sca3000_write_reg(st,
 
 201                                         SCA3000_REG_ADDR_INT_MASK,
 
 202                                         st->rx[0] & ~this_attr->address);
 
 204         mutex_unlock(&st->lock);
 
 206         return ret ? ret : len;
 
 209 static IIO_DEVICE_ATTR(50_percent, S_IRUGO | S_IWUSR,
 
 210                        sca3000_query_ring_int,
 
 211                        sca3000_set_ring_int,
 
 212                        SCA3000_INT_MASK_RING_HALF);
 
 214 static IIO_DEVICE_ATTR(75_percent, S_IRUGO | S_IWUSR,
 
 215                        sca3000_query_ring_int,
 
 216                        sca3000_set_ring_int,
 
 217                        SCA3000_INT_MASK_RING_THREE_QUARTER);
 
 219 static ssize_t sca3000_show_buffer_scale(struct device *dev,
 
 220                                          struct device_attribute *attr,
 
 223         struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 
 224         struct sca3000_state *st = iio_priv(indio_dev);
 
 226         return sprintf(buf, "0.%06d\n", 4*st->info->scale);
 
 229 static IIO_DEVICE_ATTR(in_accel_scale,
 
 231                        sca3000_show_buffer_scale,
 
 236  * Ring buffer attributes
 
 237  * This device is a bit unusual in that the sampling frequency and bpse
 
 238  * only apply to the ring buffer.  At all times full rate and accuracy
 
 239  * is available via direct reading from registers.
 
 241 static struct attribute *sca3000_ring_attributes[] = {
 
 242         &dev_attr_length.attr,
 
 243         &dev_attr_enable.attr,
 
 244         &iio_dev_attr_50_percent.dev_attr.attr,
 
 245         &iio_dev_attr_75_percent.dev_attr.attr,
 
 246         &iio_dev_attr_in_accel_scale.dev_attr.attr,
 
 250 static struct attribute_group sca3000_ring_attr = {
 
 251         .attrs = sca3000_ring_attributes,
 
 255 static struct iio_buffer *sca3000_rb_allocate(struct iio_dev *indio_dev)
 
 257         struct iio_buffer *buf;
 
 258         struct iio_hw_buffer *ring;
 
 260         ring = kzalloc(sizeof(*ring), GFP_KERNEL);
 
 264         ring->private = indio_dev;
 
 266         buf->stufftoread = 0;
 
 267         buf->attrs = &sca3000_ring_attr;
 
 268         iio_buffer_init(buf);
 
 273 static void sca3000_ring_release(struct iio_buffer *r)
 
 275         kfree(iio_to_hw_buf(r));
 
 278 static const struct iio_buffer_access_funcs sca3000_ring_access_funcs = {
 
 279         .read_first_n = &sca3000_read_first_n_hw_rb,
 
 280         .get_length = &sca3000_ring_get_length,
 
 281         .get_bytes_per_datum = &sca3000_ring_get_bytes_per_datum,
 
 282         .data_available = sca3000_ring_buf_data_available,
 
 283         .release = sca3000_ring_release,
 
 286 int sca3000_configure_ring(struct iio_dev *indio_dev)
 
 288         struct iio_buffer *buffer;
 
 290         buffer = sca3000_rb_allocate(indio_dev);
 
 293         indio_dev->modes |= INDIO_BUFFER_HARDWARE;
 
 295         indio_dev->buffer->access = &sca3000_ring_access_funcs;
 
 297         iio_device_attach_buffer(indio_dev, buffer);
 
 302 void sca3000_unconfigure_ring(struct iio_dev *indio_dev)
 
 304         iio_buffer_put(indio_dev->buffer);
 
 308 int __sca3000_hw_ring_state_set(struct iio_dev *indio_dev, bool state)
 
 310         struct sca3000_state *st = iio_priv(indio_dev);
 
 313         mutex_lock(&st->lock);
 
 314         ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1);
 
 318                 dev_info(&indio_dev->dev, "supposedly enabling ring buffer\n");
 
 319                 ret = sca3000_write_reg(st,
 
 320                                         SCA3000_REG_ADDR_MODE,
 
 321                                         (st->rx[0] | SCA3000_RING_BUF_ENABLE));
 
 323                 ret = sca3000_write_reg(st,
 
 324                                         SCA3000_REG_ADDR_MODE,
 
 325                                         (st->rx[0] & ~SCA3000_RING_BUF_ENABLE));
 
 327         mutex_unlock(&st->lock);
 
 332  * sca3000_hw_ring_preenable() hw ring buffer preenable function
 
 334  * Very simple enable function as the chip will allows normal reads
 
 335  * during ring buffer operation so as long as it is indeed running
 
 336  * before we notify the core, the precise ordering does not matter.
 
 338 static int sca3000_hw_ring_preenable(struct iio_dev *indio_dev)
 
 340         return __sca3000_hw_ring_state_set(indio_dev, 1);
 
 343 static int sca3000_hw_ring_postdisable(struct iio_dev *indio_dev)
 
 345         return __sca3000_hw_ring_state_set(indio_dev, 0);
 
 348 static const struct iio_buffer_setup_ops sca3000_ring_setup_ops = {
 
 349         .preenable = &sca3000_hw_ring_preenable,
 
 350         .postdisable = &sca3000_hw_ring_postdisable,
 
 353 void sca3000_register_ring_funcs(struct iio_dev *indio_dev)
 
 355         indio_dev->setup_ops = &sca3000_ring_setup_ops;
 
 359  * sca3000_ring_int_process() ring specific interrupt handling.
 
 361  * This is only split from the main interrupt handler so as to
 
 362  * reduce the amount of code if the ring buffer is not enabled.
 
 364 void sca3000_ring_int_process(u8 val, struct iio_buffer *ring)
 
 366         if (val & (SCA3000_INT_STATUS_THREE_QUARTERS |
 
 367                    SCA3000_INT_STATUS_HALF)) {
 
 368                 ring->stufftoread = true;
 
 369                 wake_up_interruptible(&ring->pollq);