Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 317726
b: refs/heads/master
c: f699d10
h: refs/heads/master
v: v3
  • Loading branch information
Jonathan Cameron committed Jun 30, 2012
1 parent 1d64e2d commit 3f989ef
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 53 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8f5879b20be7f918cdc4b3d831cfd8f3dc02c74c
refs/heads/master: f699d10202d50a764614ff9191b5c4b9dd75e36c
79 changes: 27 additions & 52 deletions trunk/drivers/staging/iio/accel/adis16204_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,32 +169,6 @@ static int adis16204_check_status(struct iio_dev *indio_dev)
return ret;
}

static ssize_t adis16204_read_14bit_signed(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
s16 val = 0;
ssize_t ret;

mutex_lock(&indio_dev->mlock);

ret = adis16204_spi_read_reg_16(indio_dev,
this_attr->address, (u16 *)&val);
if (!ret) {
if (val & ADIS16204_ERROR_ACTIVE)
adis16204_check_status(indio_dev);

val = ((s16)(val << 2) >> 2);
ret = sprintf(buf, "%d\n", val);
}

mutex_unlock(&indio_dev->mlock);

return ret;
}

static int adis16204_reset(struct iio_dev *indio_dev)
{
int ret;
Expand Down Expand Up @@ -282,33 +256,26 @@ static int adis16204_initial_setup(struct iio_dev *indio_dev)
}

/* Unique to this driver currently */
#define IIO_DEV_ATTR_ACCEL_XY(_show, _addr) \
IIO_DEVICE_ATTR(in_accel_xy, S_IRUGO, _show, NULL, _addr)
#define IIO_DEV_ATTR_ACCEL_XYPEAK(_show, _addr) \
IIO_DEVICE_ATTR(in_accel_xypeak, S_IRUGO, _show, NULL, _addr)

static IIO_DEV_ATTR_ACCEL_XY(adis16204_read_14bit_signed,
ADIS16204_XY_RSS_OUT);
static IIO_DEV_ATTR_ACCEL_XYPEAK(adis16204_read_14bit_signed,
ADIS16204_XY_PEAK_OUT);
static IIO_CONST_ATTR(in_accel_xy_scale, "0.017125");

enum adis16204_channel {
in_supply,
in_aux,
temp,
accel_x,
accel_y,
accel_xy,
};

static u8 adis16204_addresses[5][3] = {
static u8 adis16204_addresses[6][3] = {
[in_supply] = { ADIS16204_SUPPLY_OUT },
[in_aux] = { ADIS16204_AUX_ADC },
[temp] = { ADIS16204_TEMP_OUT },
[accel_x] = { ADIS16204_XACCL_OUT, ADIS16204_XACCL_NULL,
ADIS16204_X_PEAK_OUT },
[accel_y] = { ADIS16204_XACCL_OUT, ADIS16204_YACCL_NULL,
ADIS16204_Y_PEAK_OUT },
[accel_xy] = { ADIS16204_XY_RSS_OUT, 0,
ADIS16204_XY_PEAK_OUT },
};

static int adis16204_read_raw(struct iio_dev *indio_dev,
Expand Down Expand Up @@ -362,10 +329,16 @@ static int adis16204_read_raw(struct iio_dev *indio_dev,
return IIO_VAL_INT_PLUS_MICRO;
case IIO_ACCEL:
*val = 0;
if (chan->channel2 == IIO_MOD_X)
switch (chan->channel2) {
case IIO_MOD_X:
case IIO_MOD_ROOT_SUM_SQUARED_X_Y:
*val2 = 17125;
else
break;
case IIO_MOD_Y:
case IIO_MOD_Z:
*val2 = 8407;
break;
}
return IIO_VAL_INT_PLUS_MICRO;
default:
return -EINVAL;
Expand Down Expand Up @@ -498,21 +471,23 @@ static struct iio_chan_spec adis16204_channels[] = {
},
},
IIO_CHAN_SOFT_TIMESTAMP(5),
};

static struct attribute *adis16204_attributes[] = {
&iio_dev_attr_in_accel_xy.dev_attr.attr,
&iio_dev_attr_in_accel_xypeak.dev_attr.attr,
&iio_const_attr_in_accel_xy_scale.dev_attr.attr,
NULL
};

static const struct attribute_group adis16204_attribute_group = {
.attrs = adis16204_attributes,
{
.type = IIO_ACCEL,
.modified = 1,
.channel2 = IIO_MOD_ROOT_SUM_SQUARED_X_Y,
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
IIO_CHAN_INFO_PEAK_SEPARATE_BIT,
.address = accel_xy,
.scan_type = {
.sign = 'u',
.realbits = 14,
.storagebits = 16,
},
}
};

static const struct iio_info adis16204_info = {
.attrs = &adis16204_attribute_group,
.read_raw = &adis16204_read_raw,
.write_raw = &adis16204_write_raw,
.driver_module = THIS_MODULE,
Expand Down Expand Up @@ -549,7 +524,7 @@ static int __devinit adis16204_probe(struct spi_device *spi)

ret = iio_buffer_register(indio_dev,
adis16204_channels,
ARRAY_SIZE(adis16204_channels));
6);
if (ret) {
printk(KERN_ERR "failed to initialize the ring\n");
goto error_unreg_ring_funcs;
Expand Down

0 comments on commit 3f989ef

Please sign in to comment.