Skip to content

Commit

Permalink
iio:staging:accelerometers move towards the new abi
Browse files Browse the repository at this point in the history
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Jonathan Cameron authored and Greg Kroah-Hartman committed May 11, 2010
1 parent ff7723e commit f3fb001
Show file tree
Hide file tree
Showing 9 changed files with 262 additions and 232 deletions.
8 changes: 3 additions & 5 deletions drivers/staging/iio/accel/accel.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
#include "../sysfs.h"

/* Accelerometer types of attribute */

#define IIO_DEV_ATTR_ACCEL_X_OFFSET(_mode, _show, _store, _addr) \
IIO_DEVICE_ATTR(accel_x_offset, _mode, _show, _store, _addr)

Expand All @@ -22,13 +21,13 @@
IIO_DEVICE_ATTR(accel_z_gain, _mode, _show, _store, _addr)

#define IIO_DEV_ATTR_ACCEL_X(_show, _addr) \
IIO_DEVICE_ATTR(accel_x, S_IRUGO, _show, NULL, _addr)
IIO_DEVICE_ATTR(accel_x_raw, S_IRUGO, _show, NULL, _addr)

#define IIO_DEV_ATTR_ACCEL_Y(_show, _addr) \
IIO_DEVICE_ATTR(accel_y, S_IRUGO, _show, NULL, _addr)
IIO_DEVICE_ATTR(accel_y_raw, S_IRUGO, _show, NULL, _addr)

#define IIO_DEV_ATTR_ACCEL_Z(_show, _addr) \
IIO_DEVICE_ATTR(accel_z, S_IRUGO, _show, NULL, _addr)
IIO_DEVICE_ATTR(accel_z_raw, S_IRUGO, _show, NULL, _addr)

/* Thresholds are somewhat chip dependent - may need quite a few defs here */
/* For unified thresholds (shared across all directions */
Expand Down Expand Up @@ -61,7 +60,6 @@
#define IIO_DEV_ATTR_ACCEL_THRESH_Z(_mode, _show, _store, _addr) \
IIO_DEVICE_ATTR(thresh_accel_z, _mode, _show, _store, _addr)


/**
* IIO_EVENT_ATTR_ACCEL_X_HIGH: threshold event, x acceleration
* @_show: read x acceleration high threshold
Expand Down
88 changes: 51 additions & 37 deletions drivers/staging/iio/accel/kxsd9.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <linux/rtc.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/string.h>

#include "../iio.h"
#include "../sysfs.h"
Expand All @@ -51,8 +52,10 @@
#define KXSD9_READ(a) (0x80 | (a))
#define KXSD9_WRITE(a) (a)

#define IIO_DEV_ATTR_ACCEL_SET_RANGE(_mode, _show, _store) \
IIO_DEVICE_ATTR(accel_range, _mode, _show, _store, 0)
#define KXSD9_SCALE_2G "0.011978"
#define KXSD9_SCALE_4G "0.023927"
#define KXSD9_SCALE_6G "0.035934"
#define KXSD9_SCALE_8G "0.047853"

#define KXSD9_STATE_RX_SIZE 2
#define KXSD9_STATE_TX_SIZE 4
Expand All @@ -73,9 +76,9 @@ struct kxsd9_state {
};

/* This may want to move to mili g to allow for non integer ranges */
static ssize_t kxsd9_read_accel_range(struct device *dev,
struct device_attribute *attr,
char *buf)
static ssize_t kxsd9_read_scale(struct device *dev,
struct device_attribute *attr,
char *buf)
{
int ret;
ssize_t len = 0;
Expand All @@ -101,16 +104,16 @@ static ssize_t kxsd9_read_accel_range(struct device *dev,

switch (st->rx[1] & KXSD9_FS_MASK) {
case KXSD9_FS_8:
len += sprintf(buf, "8\n");
len += sprintf(buf, "%s\n", KXSD9_SCALE_8G);
break;
case KXSD9_FS_6:
len += sprintf(buf, "6\n");
len += sprintf(buf, "%s\n", KXSD9_SCALE_6G);
break;
case KXSD9_FS_4:
len += sprintf(buf, "4\n");
len += sprintf(buf, "%s\n", KXSD9_SCALE_4G);
break;
case KXSD9_FS_2:
len += sprintf(buf, "2\n");
len += sprintf(buf, "%s\n", KXSD9_SCALE_2G);
break;
}

Expand All @@ -119,12 +122,12 @@ static ssize_t kxsd9_read_accel_range(struct device *dev,

return ret ? ret : len;
}
static ssize_t kxsd9_write_accel_range(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
static ssize_t kxsd9_write_scale(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t len)
{
long readin;

struct spi_message msg;
int ret;
struct iio_dev *indio_dev = dev_get_drvdata(dev);
Expand All @@ -145,25 +148,25 @@ static ssize_t kxsd9_write_accel_range(struct device *dev,
},
};

ret = strict_strtol(buf, 10, &readin);
if (ret)
return ret;
switch (readin) {
case 8:
if (!strncmp(buf, KXSD9_SCALE_8G,
strlen(buf) < strlen(KXSD9_SCALE_8G)
? strlen(buf) : strlen(KXSD9_SCALE_8G)))
val = KXSD9_FS_8;
break;
case 6:
else if (!strncmp(buf, KXSD9_SCALE_6G,
strlen(buf) < strlen(KXSD9_SCALE_6G)
? strlen(buf) : strlen(KXSD9_SCALE_6G)))
val = KXSD9_FS_6;
break;
case 4:
else if (!strncmp(buf, KXSD9_SCALE_4G,
strlen(buf) < strlen(KXSD9_SCALE_4G)
? strlen(buf) : strlen(KXSD9_SCALE_4G)))
val = KXSD9_FS_4;
break;
case 2:
else if (!strncmp(buf, KXSD9_SCALE_2G,
strlen(buf) < strlen(KXSD9_SCALE_2G)
? strlen(buf) : strlen(KXSD9_SCALE_2G)))
val = KXSD9_FS_2;
break;
default:
else
return -EINVAL;
}

mutex_lock(&st->buf_lock);
st->tx[0] = KXSD9_READ(KXSD9_REG_CTRL_C);
st->tx[1] = 0;
Expand All @@ -182,6 +185,7 @@ static ssize_t kxsd9_write_accel_range(struct device *dev,
mutex_unlock(&st->buf_lock);
return ret ? ret : len;
}

static ssize_t kxsd9_read_accel(struct device *dev,
struct device_attribute *attr,
char *buf)
Expand Down Expand Up @@ -227,17 +231,27 @@ static ssize_t kxsd9_read_accel(struct device *dev,
static IIO_DEV_ATTR_ACCEL_X(kxsd9_read_accel, KXSD9_REG_X);
static IIO_DEV_ATTR_ACCEL_Y(kxsd9_read_accel, KXSD9_REG_Y);
static IIO_DEV_ATTR_ACCEL_Z(kxsd9_read_accel, KXSD9_REG_Z);
static IIO_DEV_ATTR_ADC(0, kxsd9_read_accel, KXSD9_REG_AUX);
static IIO_DEV_ATTR_ACCEL_SET_RANGE(S_IRUGO | S_IWUSR,
kxsd9_read_accel_range,
kxsd9_write_accel_range);
static IIO_DEV_ATTR_IN_RAW(0, kxsd9_read_accel, KXSD9_REG_AUX);

static IIO_DEVICE_ATTR(accel_scale,
S_IRUGO | S_IWUSR,
kxsd9_read_scale,
kxsd9_write_scale,
0);

static IIO_CONST_ATTR(accel_scale_available,
KXSD9_SCALE_2G " "
KXSD9_SCALE_4G " "
KXSD9_SCALE_6G " "
KXSD9_SCALE_8G);

static struct attribute *kxsd9_attributes[] = {
&iio_dev_attr_accel_x.dev_attr.attr,
&iio_dev_attr_accel_y.dev_attr.attr,
&iio_dev_attr_accel_z.dev_attr.attr,
&iio_dev_attr_adc_0.dev_attr.attr,
&iio_dev_attr_accel_range.dev_attr.attr,
&iio_dev_attr_accel_x_raw.dev_attr.attr,
&iio_dev_attr_accel_y_raw.dev_attr.attr,
&iio_dev_attr_accel_z_raw.dev_attr.attr,
&iio_dev_attr_in0_raw.dev_attr.attr,
&iio_dev_attr_accel_scale.dev_attr.attr,
&iio_const_attr_accel_scale_available.dev_attr.attr,
NULL,
};

Expand Down
4 changes: 0 additions & 4 deletions drivers/staging/iio/accel/lis3l02dq.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,6 @@ int lis3l02dq_spi_read_reg_8(struct device *dev,
int lis3l02dq_spi_write_reg_8(struct device *dev,
u8 reg_address,
u8 *val);
#define LIS3L02DQ_SCAN_ACC_X 0
#define LIS3L02DQ_SCAN_ACC_Y 1
#define LIS3L02DQ_SCAN_ACC_Z 2


#ifdef CONFIG_IIO_RING_BUFFER
/* At the moment triggers are only used for ring buffer
Expand Down
Loading

0 comments on commit f3fb001

Please sign in to comment.