/drivers/staging/iio/accel/sca3000_ring.c
C | 461 lines | 332 code | 57 blank | 72 comment | 28 complexity | 58c19910f1ff703dea25781b3a7512c2 MD5 | raw file
Possible License(s): LGPL-2.0, AGPL-1.0, GPL-2.0
1/* 2 * sca3000_ring.c -- support VTI sca3000 series accelerometers via SPI 3 * 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. 7 * 8 * Copyright (c) 2009 Jonathan Cameron <jic23@cam.ac.uk> 9 * 10 */ 11 12#include <linux/interrupt.h> 13#include <linux/gpio.h> 14#include <linux/fs.h> 15#include <linux/device.h> 16#include <linux/slab.h> 17#include <linux/kernel.h> 18#include <linux/spi/spi.h> 19#include <linux/sysfs.h> 20#include <linux/sched.h> 21#include <linux/poll.h> 22 23#include "../iio.h" 24#include "../sysfs.h" 25#include "../ring_generic.h" 26#include "../ring_hw.h" 27#include "accel.h" 28#include "sca3000.h" 29 30/* RFC / future work 31 * 32 * The internal ring buffer doesn't actually change what it holds depending 33 * on which signals are enabled etc, merely whether you can read them. 34 * As such the scan mode selection is somewhat different than for a software 35 * ring buffer and changing it actually covers any data already in the buffer. 36 * Currently scan elements aren't configured so it doesn't matter. 37 */ 38 39static int sca3000_read_data(struct sca3000_state *st, 40 uint8_t reg_address_high, 41 u8 **rx_p, 42 int len) 43{ 44 int ret; 45 struct spi_message msg; 46 struct spi_transfer xfer[2] = { 47 { 48 .len = 1, 49 .tx_buf = st->tx, 50 }, { 51 .len = len, 52 } 53 }; 54 *rx_p = kmalloc(len, GFP_KERNEL); 55 if (*rx_p == NULL) { 56 ret = -ENOMEM; 57 goto error_ret; 58 } 59 xfer[1].rx_buf = *rx_p; 60 st->tx[0] = SCA3000_READ_REG(reg_address_high); 61 spi_message_init(&msg); 62 spi_message_add_tail(&xfer[0], &msg); 63 spi_message_add_tail(&xfer[1], &msg); 64 ret = spi_sync(st->us, &msg); 65 if (ret) { 66 dev_err(get_device(&st->us->dev), "problem reading register"); 67 goto error_free_rx; 68 } 69 70 return 0; 71error_free_rx: 72 kfree(*rx_p); 73error_ret: 74 return ret; 75} 76 77/** 78 * sca3000_read_first_n_hw_rb() - main ring access, pulls data from ring 79 * @r: the ring 80 * @count: number of samples to try and pull 81 * @data: output the actual samples pulled from the hw ring 82 * 83 * Currently does not provide timestamps. As the hardware doesn't add them they 84 * can only be inferred approximately from ring buffer events such as 50% full 85 * and knowledge of when buffer was last emptied. This is left to userspace. 86 **/ 87static int sca3000_read_first_n_hw_rb(struct iio_ring_buffer *r, 88 size_t count, char __user *buf) 89{ 90 struct iio_hw_ring_buffer *hw_ring = iio_to_hw_ring_buf(r); 91 struct iio_dev *indio_dev = hw_ring->private; 92 struct sca3000_state *st = iio_priv(indio_dev); 93 u8 *rx; 94 int ret, i, num_available, num_read = 0; 95 int bytes_per_sample = 1; 96 97 if (st->bpse == 11) 98 bytes_per_sample = 2; 99 100 mutex_lock(&st->lock); 101 if (count % bytes_per_sample) { 102 ret = -EINVAL; 103 goto error_ret; 104 } 105 106 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_BUF_COUNT, 1); 107 if (ret) 108 goto error_ret; 109 else 110 num_available = st->rx[0]; 111 /* 112 * num_available is the total number of samples available 113 * i.e. number of time points * number of channels. 114 */ 115 if (count > num_available * bytes_per_sample) 116 num_read = num_available*bytes_per_sample; 117 else 118 num_read = count; 119 120 ret = sca3000_read_data(st, 121 SCA3000_REG_ADDR_RING_OUT, 122 &rx, num_read); 123 if (ret) 124 goto error_ret; 125 126 for (i = 0; i < num_read; i++) 127 *(((u16 *)rx) + i) = be16_to_cpup((u16 *)rx + i); 128 129 if (copy_to_user(buf, rx, num_read)) 130 ret = -EFAULT; 131 kfree(rx); 132 r->stufftoread = 0; 133error_ret: 134 mutex_unlock(&st->lock); 135 136 return ret ? ret : num_read; 137} 138 139/* This is only valid with all 3 elements enabled */ 140static int sca3000_ring_get_length(struct iio_ring_buffer *r) 141{ 142 return 64; 143} 144 145/* only valid if resolution is kept at 11bits */ 146static int sca3000_ring_get_bytes_per_datum(struct iio_ring_buffer *r) 147{ 148 return 6; 149} 150static void sca3000_ring_release(struct device *dev) 151{ 152 struct iio_ring_buffer *r = to_iio_ring_buffer(dev); 153 kfree(iio_to_hw_ring_buf(r)); 154} 155 156static IIO_RING_ENABLE_ATTR; 157static IIO_RING_BYTES_PER_DATUM_ATTR; 158static IIO_RING_LENGTH_ATTR; 159 160/** 161 * sca3000_query_ring_int() is the hardware ring status interrupt enabled 162 **/ 163static ssize_t sca3000_query_ring_int(struct device *dev, 164 struct device_attribute *attr, 165 char *buf) 166{ 167 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 168 int ret, val; 169 struct iio_ring_buffer *ring = dev_get_drvdata(dev); 170 struct iio_dev *indio_dev = ring->indio_dev; 171 struct sca3000_state *st = iio_priv(indio_dev); 172 173 mutex_lock(&st->lock); 174 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1); 175 val = st->rx[0]; 176 mutex_unlock(&st->lock); 177 if (ret) 178 return ret; 179 180 return sprintf(buf, "%d\n", !!(val & this_attr->address)); 181} 182 183/** 184 * sca3000_set_ring_int() set state of ring status interrupt 185 **/ 186static ssize_t sca3000_set_ring_int(struct device *dev, 187 struct device_attribute *attr, 188 const char *buf, 189 size_t len) 190{ 191 struct iio_ring_buffer *ring = dev_get_drvdata(dev); 192 struct iio_dev *indio_dev = ring->indio_dev; 193 struct sca3000_state *st = iio_priv(indio_dev); 194 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 195 long val; 196 int ret; 197 198 mutex_lock(&st->lock); 199 ret = strict_strtol(buf, 10, &val); 200 if (ret) 201 goto error_ret; 202 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_INT_MASK, 1); 203 if (ret) 204 goto error_ret; 205 if (val) 206 ret = sca3000_write_reg(st, 207 SCA3000_REG_ADDR_INT_MASK, 208 st->rx[0] | this_attr->address); 209 else 210 ret = sca3000_write_reg(st, 211 SCA3000_REG_ADDR_INT_MASK, 212 st->rx[0] & ~this_attr->address); 213error_ret: 214 mutex_unlock(&st->lock); 215 216 return ret ? ret : len; 217} 218 219static IIO_DEVICE_ATTR(50_percent, S_IRUGO | S_IWUSR, 220 sca3000_query_ring_int, 221 sca3000_set_ring_int, 222 SCA3000_INT_MASK_RING_HALF); 223 224static IIO_DEVICE_ATTR(75_percent, S_IRUGO | S_IWUSR, 225 sca3000_query_ring_int, 226 sca3000_set_ring_int, 227 SCA3000_INT_MASK_RING_THREE_QUARTER); 228 229 230/** 231 * sca3000_show_ring_bpse() -sysfs function to query bits per sample from ring 232 * @dev: ring buffer device 233 * @attr: this device attribute 234 * @buf: buffer to write to 235 **/ 236static ssize_t sca3000_show_ring_bpse(struct device *dev, 237 struct device_attribute *attr, 238 char *buf) 239{ 240 int len = 0, ret; 241 struct iio_ring_buffer *ring = dev_get_drvdata(dev); 242 struct iio_dev *indio_dev = ring->indio_dev; 243 struct sca3000_state *st = iio_priv(indio_dev); 244 245 mutex_lock(&st->lock); 246 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1); 247 if (ret) 248 goto error_ret; 249 if (st->rx[0] & SCA3000_RING_BUF_8BIT) 250 len = sprintf(buf, "s8/8\n"); 251 else 252 len = sprintf(buf, "s11/16\n"); 253error_ret: 254 mutex_unlock(&st->lock); 255 256 return ret ? ret : len; 257} 258 259/** 260 * sca3000_store_ring_bpse() - bits per scan element 261 * @dev: ring buffer device 262 * @attr: attribute called from 263 * @buf: input from userspace 264 * @len: length of input 265 **/ 266static ssize_t sca3000_store_ring_bpse(struct device *dev, 267 struct device_attribute *attr, 268 const char *buf, 269 size_t len) 270{ 271 struct iio_ring_buffer *ring = dev_get_drvdata(dev); 272 struct iio_dev *indio_dev = ring->indio_dev; 273 struct sca3000_state *st = iio_priv(indio_dev); 274 int ret; 275 276 mutex_lock(&st->lock); 277 278 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1); 279 if (ret) 280 goto error_ret; 281 if (sysfs_streq(buf, "s8/8")) { 282 ret = sca3000_write_reg(st, SCA3000_REG_ADDR_MODE, 283 st->rx[0] | SCA3000_RING_BUF_8BIT); 284 st->bpse = 8; 285 } else if (sysfs_streq(buf, "s11/16")) { 286 ret = sca3000_write_reg(st, SCA3000_REG_ADDR_MODE, 287 st->rx[0] & ~SCA3000_RING_BUF_8BIT); 288 st->bpse = 11; 289 } else 290 ret = -EINVAL; 291error_ret: 292 mutex_unlock(&st->lock); 293 294 return ret ? ret : len; 295} 296 297static ssize_t sca3000_show_buffer_scale(struct device *dev, 298 struct device_attribute *attr, 299 char *buf) 300{ 301 struct iio_ring_buffer *ring = dev_get_drvdata(dev); 302 struct iio_dev *indio_dev = ring->indio_dev; 303 struct sca3000_state *st = iio_priv(indio_dev); 304 305 return sprintf(buf, "0.%06d\n", 4*st->info->scale); 306} 307 308static IIO_DEVICE_ATTR(accel_scale, 309 S_IRUGO, 310 sca3000_show_buffer_scale, 311 NULL, 312 0); 313 314/* 315 * Ring buffer attributes 316 * This device is a bit unusual in that the sampling frequency and bpse 317 * only apply to the ring buffer. At all times full rate and accuracy 318 * is available via direct reading from registers. 319 */ 320static struct attribute *sca3000_ring_attributes[] = { 321 &dev_attr_length.attr, 322 &dev_attr_bytes_per_datum.attr, 323 &dev_attr_enable.attr, 324 &iio_dev_attr_50_percent.dev_attr.attr, 325 &iio_dev_attr_75_percent.dev_attr.attr, 326 &iio_dev_attr_accel_scale.dev_attr.attr, 327 NULL, 328}; 329 330static struct attribute_group sca3000_ring_attr = { 331 .attrs = sca3000_ring_attributes, 332}; 333 334static const struct attribute_group *sca3000_ring_attr_groups[] = { 335 &sca3000_ring_attr, 336 NULL 337}; 338 339static struct device_type sca3000_ring_type = { 340 .release = sca3000_ring_release, 341 .groups = sca3000_ring_attr_groups, 342}; 343 344static struct iio_ring_buffer *sca3000_rb_allocate(struct iio_dev *indio_dev) 345{ 346 struct iio_ring_buffer *buf; 347 struct iio_hw_ring_buffer *ring; 348 349 ring = kzalloc(sizeof *ring, GFP_KERNEL); 350 if (!ring) 351 return NULL; 352 353 ring->private = indio_dev; 354 buf = &ring->buf; 355 buf->stufftoread = 0; 356 iio_ring_buffer_init(buf, indio_dev); 357 buf->dev.type = &sca3000_ring_type; 358 buf->dev.parent = &indio_dev->dev; 359 dev_set_drvdata(&buf->dev, (void *)buf); 360 361 return buf; 362} 363 364static inline void sca3000_rb_free(struct iio_ring_buffer *r) 365{ 366 if (r) 367 iio_put_ring_buffer(r); 368} 369 370static const struct iio_ring_access_funcs sca3000_ring_access_funcs = { 371 .read_first_n = &sca3000_read_first_n_hw_rb, 372 .get_length = &sca3000_ring_get_length, 373 .get_bytes_per_datum = &sca3000_ring_get_bytes_per_datum, 374}; 375 376int sca3000_configure_ring(struct iio_dev *indio_dev) 377{ 378 indio_dev->ring = sca3000_rb_allocate(indio_dev); 379 if (indio_dev->ring == NULL) 380 return -ENOMEM; 381 indio_dev->modes |= INDIO_RING_HARDWARE_BUFFER; 382 383 indio_dev->ring->access = &sca3000_ring_access_funcs; 384 385 iio_scan_mask_set(indio_dev->ring, 0); 386 iio_scan_mask_set(indio_dev->ring, 1); 387 iio_scan_mask_set(indio_dev->ring, 2); 388 389 return 0; 390} 391 392void sca3000_unconfigure_ring(struct iio_dev *indio_dev) 393{ 394 sca3000_rb_free(indio_dev->ring); 395} 396 397static inline 398int __sca3000_hw_ring_state_set(struct iio_dev *indio_dev, bool state) 399{ 400 struct sca3000_state *st = iio_priv(indio_dev); 401 int ret; 402 403 mutex_lock(&st->lock); 404 ret = sca3000_read_data_short(st, SCA3000_REG_ADDR_MODE, 1); 405 if (ret) 406 goto error_ret; 407 if (state) { 408 printk(KERN_INFO "supposedly enabling ring buffer\n"); 409 ret = sca3000_write_reg(st, 410 SCA3000_REG_ADDR_MODE, 411 (st->rx[0] | SCA3000_RING_BUF_ENABLE)); 412 } else 413 ret = sca3000_write_reg(st, 414 SCA3000_REG_ADDR_MODE, 415 (st->rx[0] & ~SCA3000_RING_BUF_ENABLE)); 416error_ret: 417 mutex_unlock(&st->lock); 418 419 return ret; 420} 421/** 422 * sca3000_hw_ring_preenable() hw ring buffer preenable function 423 * 424 * Very simple enable function as the chip will allows normal reads 425 * during ring buffer operation so as long as it is indeed running 426 * before we notify the core, the precise ordering does not matter. 427 **/ 428static int sca3000_hw_ring_preenable(struct iio_dev *indio_dev) 429{ 430 return __sca3000_hw_ring_state_set(indio_dev, 1); 431} 432 433static int sca3000_hw_ring_postdisable(struct iio_dev *indio_dev) 434{ 435 return __sca3000_hw_ring_state_set(indio_dev, 0); 436} 437 438static const struct iio_ring_setup_ops sca3000_ring_setup_ops = { 439 .preenable = &sca3000_hw_ring_preenable, 440 .postdisable = &sca3000_hw_ring_postdisable, 441}; 442 443void sca3000_register_ring_funcs(struct iio_dev *indio_dev) 444{ 445 indio_dev->ring->setup_ops = &sca3000_ring_setup_ops; 446} 447 448/** 449 * sca3000_ring_int_process() ring specific interrupt handling. 450 * 451 * This is only split from the main interrupt handler so as to 452 * reduce the amount of code if the ring buffer is not enabled. 453 **/ 454void sca3000_ring_int_process(u8 val, struct iio_ring_buffer *ring) 455{ 456 if (val & (SCA3000_INT_STATUS_THREE_QUARTERS | 457 SCA3000_INT_STATUS_HALF)) { 458 ring->stufftoread = true; 459 wake_up_interruptible(&ring->pollq); 460 } 461}