Jonathan Cameron wrote on 2012-05-30: > Reduces code and makes this channel available within the kernel. > Note that it is not added to the buffer, thus maintaining the > previous functionality of this driver. > > Signed-off-by: Jonathan Cameron <jic23@xxxxxxxxxx> Acked-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx> > --- > drivers/staging/iio/accel/adis16204_core.c | 83 ++++++++++---------- > -------- 1 file changed, 29 insertions(+), 54 deletions(-) > diff --git a/drivers/staging/iio/accel/adis16204_core.c > b/drivers/staging/iio/accel/adis16204_core.c index a36135d..cb8701d > 100644 --- a/drivers/staging/iio/accel/adis16204_core.c +++ > b/drivers/staging/iio/accel/adis16204_core.c @@ -169,32 +169,6 @@ > error_ret: > 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; @@ > -282,16 +256,6 @@ err_ret: } > > /* 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, @@ -299,9 +263,10 @@ enum > adis16204_channel { 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 }, @@ -309,6 +274,8 > @@ static u8 adis16204_addresses[5][3] = { 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, > @@ -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_CHAN_MOD_X) > - *val2 = 17125; > - else > - *val2 = 8407; > + switch (chan->channel2) { > + case IIO_MOD_X: > + case IIO_MOD_ROOT_SUM_SQUARED_X_Y: > + *val2 = 17125; > + break; > + case IIO_MOD_Y: > + case IIO_MOD_Z: > + *val2 = 8407; > + break; > + } > return IIO_VAL_INT_PLUS_MICRO; > default: > return -EINVAL; > @@ -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, > @@ -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; Greetings, Michael -- Analog Devices GmbH Wilhelm-Wagenfeld-Str. 6 80807 Muenchen Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368; Geschaeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin, Margaret Seif -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html