* [PATCH 0/3] Initial filtering (hardware) control for IIO.
@ 2011-11-27 11:39 Jonathan Cameron
2011-11-27 11:39 ` [PATCH 1/3] staging:iio: filter description - low pass 3db frequency Jonathan Cameron
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Jonathan Cameron @ 2011-11-27 11:39 UTC (permalink / raw)
To: greg; +Cc: linux-iio, Jonathan Cameron
Hi Greg,
Thanks for merging all those patches yesterday.
These have been sitting in my tree and on linux-iio for far too long.
I think all issues raised about the initial patch set were answered
and fear this is not of sufficient interest to anyone to get a second
review!
Anyhow fairly uncontroversial support for the low pass filters on
the ADI imu units.
Original message was:
Hi All,
Technically this has all been on list before, just now it is in a coherent
patch set.
Introduces low pass filter controls and description via 3db point.
JohnLM suggested a whole load more stuff that we might want to know
about filters. Whilst I am in favour of adding these at somepoint
I think it should be as and when we have a user. I believe the
naming here allows space for all the other things that have been
suggested.
Thanks.
v1->v2 Added documentation.
Jonathan Cameron (3):
staging:iio: filter description - low pass 3db frequency.
staging:iio:imu:adis16400 add control of data filtering.
staging:iio:documentation: document filter_low_pass_3db_frequency.
drivers/staging/iio/Documentation/sysfs-bus-iio | 10 ++
drivers/staging/iio/iio.h | 7 +
drivers/staging/iio/imu/adis16400.h | 2 +
drivers/staging/iio/imu/adis16400_core.c | 177 ++++++++++++++++++-----
drivers/staging/iio/industrialio-core.c | 2 +
5 files changed, 161 insertions(+), 37 deletions(-)
--
1.7.7.3
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/3] staging:iio: filter description - low pass 3db frequency. 2011-11-27 11:39 [PATCH 0/3] Initial filtering (hardware) control for IIO Jonathan Cameron @ 2011-11-27 11:39 ` Jonathan Cameron 2011-11-27 11:39 ` [PATCH 2/3] staging:iio:imu:adis16400 add control of data filtering Jonathan Cameron ` (2 subsequent siblings) 3 siblings, 0 replies; 6+ messages in thread From: Jonathan Cameron @ 2011-11-27 11:39 UTC (permalink / raw) To: greg; +Cc: linux-iio, Jonathan Cameron From: Jonathan Cameron <jic23@cam.ac.uk> Introduce the first data filtering related parameter. For now we are ignoring the filter type and merely specifying its approximate (I read them off tiny graphs) 3db point. Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> --- drivers/staging/iio/iio.h | 7 +++++++ drivers/staging/iio/industrialio-core.c | 2 ++ 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/drivers/staging/iio/iio.h b/drivers/staging/iio/iio.h index 66c2604..4aed915 100644 --- a/drivers/staging/iio/iio.h +++ b/drivers/staging/iio/iio.h @@ -35,6 +35,7 @@ enum iio_chan_info_enum { IIO_CHAN_INFO_PEAK_SCALE, IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW, IIO_CHAN_INFO_AVERAGE_RAW, + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY, }; #define IIO_CHAN_INFO_SHARED_BIT(type) BIT(type*2) @@ -74,6 +75,12 @@ enum iio_chan_info_enum { IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_AVERAGE_RAW) #define IIO_CHAN_INFO_AVERAGE_RAW_SHARED_BIT \ IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_AVERAGE_RAW) +#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT \ + IIO_CHAN_INFO_SHARED_BIT( \ + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY) +#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT \ + IIO_CHAN_INFO_SEPARATE_BIT( \ + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY) enum iio_endian { IIO_CPU, diff --git a/drivers/staging/iio/industrialio-core.c b/drivers/staging/iio/industrialio-core.c index 0b67166..55c0b48 100644 --- a/drivers/staging/iio/industrialio-core.c +++ b/drivers/staging/iio/industrialio-core.c @@ -85,6 +85,8 @@ static const char * const iio_chan_info_postfix[] = { [IIO_CHAN_INFO_PEAK_SCALE] = "peak_scale", [IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW] = "quadrature_correction_raw", [IIO_CHAN_INFO_AVERAGE_RAW] = "mean_raw", + [IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY] + = "filter_low_pass_3db_frequency", }; /** -- 1.7.7.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] staging:iio:imu:adis16400 add control of data filtering. 2011-11-27 11:39 [PATCH 0/3] Initial filtering (hardware) control for IIO Jonathan Cameron 2011-11-27 11:39 ` [PATCH 1/3] staging:iio: filter description - low pass 3db frequency Jonathan Cameron @ 2011-11-27 11:39 ` Jonathan Cameron 2011-11-27 11:39 ` [PATCH 3/3] staging:iio:documentation: document filter_low_pass_3db_frequency Jonathan Cameron 2011-11-27 19:23 ` [PATCH 0/3] Initial filtering (hardware) control for IIO Greg KH 3 siblings, 0 replies; 6+ messages in thread From: Jonathan Cameron @ 2011-11-27 11:39 UTC (permalink / raw) To: greg; +Cc: linux-iio, Jonathan Cameron From: Jonathan Cameron <jic23@cam.ac.uk> Bartlett filter used. Values read of figures on datasheet so far from precise. Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> --- drivers/staging/iio/imu/adis16400.h | 2 + drivers/staging/iio/imu/adis16400_core.c | 177 +++++++++++++++++++++++------ 2 files changed, 142 insertions(+), 37 deletions(-) diff --git a/drivers/staging/iio/imu/adis16400.h b/drivers/staging/iio/imu/adis16400.h index f3546ee..83d133e 100644 --- a/drivers/staging/iio/imu/adis16400.h +++ b/drivers/staging/iio/imu/adis16400.h @@ -148,12 +148,14 @@ struct adis16400_chip_info { * @tx: transmit buffer * @rx: receive buffer * @buf_lock: mutex to protect tx and rx + * @filt_int: integer part of requested filter frequency **/ struct adis16400_state { struct spi_device *us; struct iio_trigger *trig; struct mutex buf_lock; struct adis16400_chip_info *variant; + int filt_int; u8 tx[ADIS16400_MAX_TX] ____cacheline_aligned; u8 rx[ADIS16400_MAX_RX] ____cacheline_aligned; diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c index a6da69f..de12f9a 100644 --- a/drivers/staging/iio/imu/adis16400_core.c +++ b/drivers/staging/iio/imu/adis16400_core.c @@ -161,25 +161,65 @@ error_ret: return ret; } +static int adis16400_get_freq(struct iio_dev *indio_dev) +{ + u16 t; + int sps, ret; + + ret = adis16400_spi_read_reg_16(indio_dev, ADIS16400_SMPL_PRD, &t); + if (ret < 0) + return ret; + sps = (t & ADIS16400_SMPL_PRD_TIME_BASE) ? 53 : 1638; + sps /= (t & ADIS16400_SMPL_PRD_DIV_MASK) + 1; + + return sps; +} + static ssize_t adis16400_read_frequency(struct device *dev, struct device_attribute *attr, char *buf) { struct iio_dev *indio_dev = dev_get_drvdata(dev); int ret, len = 0; - u16 t; - int sps; - ret = adis16400_spi_read_reg_16(indio_dev, - ADIS16400_SMPL_PRD, - &t); - if (ret) + ret = adis16400_get_freq(indio_dev); + if (ret < 0) return ret; - sps = (t & ADIS16400_SMPL_PRD_TIME_BASE) ? 53 : 1638; - sps /= (t & ADIS16400_SMPL_PRD_DIV_MASK) + 1; - len = sprintf(buf, "%d SPS\n", sps); + len = sprintf(buf, "%d SPS\n", ret); return len; } +static const unsigned adis16400_3db_divisors[] = { + [0] = 2, /* Special case */ + [1] = 5, + [2] = 10, + [3] = 50, + [4] = 200, +}; + +static int adis16400_set_filter(struct iio_dev *indio_dev, int sps, int val) +{ + int i, ret; + u16 val16; + for (i = ARRAY_SIZE(adis16400_3db_divisors) - 1; i >= 0; i--) + if (sps/adis16400_3db_divisors[i] > val) + break; + if (i == -1) + ret = -EINVAL; + else { + ret = adis16400_spi_read_reg_16(indio_dev, + ADIS16400_SENS_AVG, + &val16); + if (ret < 0) + goto error_ret; + + ret = adis16400_spi_write_reg_16(indio_dev, + ADIS16400_SENS_AVG, + (val16 & ~0x03) | i); + } +error_ret: + return ret; +} + static ssize_t adis16400_write_frequency(struct device *dev, struct device_attribute *attr, const char *buf, @@ -210,6 +250,7 @@ static ssize_t adis16400_write_frequency(struct device *dev, ADIS16400_SMPL_PRD, t); + /* Also update the filter */ mutex_unlock(&indio_dev->mlock); return ret ? ret : len; @@ -455,13 +496,15 @@ static u8 adis16400_addresses[17][2] = { [incli_y] = { ADIS16300_ROLL_OUT } }; + static int adis16400_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { - int ret; + struct adis16400_state *st = iio_priv(indio_dev); + int ret, sps; switch (mask) { case IIO_CHAN_INFO_CALIBBIAS: @@ -471,6 +514,21 @@ static int adis16400_write_raw(struct iio_dev *indio_dev, val); mutex_unlock(&indio_dev->mlock); return ret; + case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: + /* Need to cache values so we can update if the frequency + changes */ + mutex_lock(&indio_dev->mlock); + st->filt_int = val; + /* Work out update to current value */ + sps = adis16400_get_freq(indio_dev); + if (sps < 0) { + mutex_unlock(&indio_dev->mlock); + return sps; + } + + ret = adis16400_set_filter(indio_dev, sps, val); + mutex_unlock(&indio_dev->mlock); + return ret; default: return -EINVAL; } @@ -548,6 +606,24 @@ static int adis16400_read_raw(struct iio_dev *indio_dev, *val = 198; *val2 = 160000; return IIO_VAL_INT_PLUS_MICRO; + case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: + mutex_lock(&indio_dev->mlock); + /* Need both the number of taps and the sampling frequency */ + ret = adis16400_spi_read_reg_16(indio_dev, + ADIS16400_SENS_AVG, + &val16); + if (ret < 0) { + mutex_unlock(&indio_dev->mlock); + return ret; + } + ret = adis16400_get_freq(indio_dev); + if (ret > 0) + *val = ret/adis16400_3db_divisors[val16 & 0x03]; + *val2 = 0; + mutex_unlock(&indio_dev->mlock); + if (ret < 0) + return ret; + return IIO_VAL_INT_PLUS_MICRO; default: return -EINVAL; } @@ -568,7 +644,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_x, .scan_index = ADIS16400_SCAN_GYRO_X, .scan_type = IIO_ST('s', 14, 16, 0) @@ -577,7 +654,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_y, .scan_index = ADIS16400_SCAN_GYRO_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -586,7 +664,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_z, .scan_index = ADIS16400_SCAN_GYRO_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -595,7 +674,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_x, .scan_index = ADIS16400_SCAN_ACC_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -604,7 +684,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_y, .scan_index = ADIS16400_SCAN_ACC_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -613,7 +694,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_z, .scan_index = ADIS16400_SCAN_ACC_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -621,7 +703,8 @@ static struct iio_chan_spec adis16400_channels[] = { .type = IIO_MAGN, .modified = 1, .channel2 = IIO_MOD_X, - .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT, + .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = magn_x, .scan_index = ADIS16400_SCAN_MAGN_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -629,7 +712,8 @@ static struct iio_chan_spec adis16400_channels[] = { .type = IIO_MAGN, .modified = 1, .channel2 = IIO_MOD_Y, - .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT, + .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = magn_y, .scan_index = ADIS16400_SCAN_MAGN_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -637,7 +721,8 @@ static struct iio_chan_spec adis16400_channels[] = { .type = IIO_MAGN, .modified = 1, .channel2 = IIO_MOD_Z, - .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT, + .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = magn_z, .scan_index = ADIS16400_SCAN_MAGN_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -677,7 +762,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_x, .scan_index = ADIS16400_SCAN_GYRO_X, .scan_type = IIO_ST('s', 14, 16, 0) @@ -686,7 +772,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_y, .scan_index = ADIS16400_SCAN_GYRO_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -695,7 +782,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_z, .scan_index = ADIS16400_SCAN_GYRO_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -704,7 +792,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_x, .scan_index = ADIS16400_SCAN_ACC_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -713,7 +802,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_y, .scan_index = ADIS16400_SCAN_ACC_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -722,7 +812,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_z, .scan_index = ADIS16400_SCAN_ACC_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -732,7 +823,8 @@ static struct iio_chan_spec adis16350_channels[] = { .channel = 0, .extend_name = "x", .info_mask = IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SEPARATE_BIT, + IIO_CHAN_INFO_SCALE_SEPARATE_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = temp0, .scan_index = ADIS16350_SCAN_TEMP_X, .scan_type = IIO_ST('s', 12, 16, 0), @@ -742,7 +834,8 @@ static struct iio_chan_spec adis16350_channels[] = { .channel = 1, .extend_name = "y", .info_mask = IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SEPARATE_BIT, + IIO_CHAN_INFO_SCALE_SEPARATE_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = temp1, .scan_index = ADIS16350_SCAN_TEMP_Y, .scan_type = IIO_ST('s', 12, 16, 0), @@ -783,7 +876,8 @@ static struct iio_chan_spec adis16300_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_x, .scan_index = ADIS16400_SCAN_GYRO_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -792,7 +886,8 @@ static struct iio_chan_spec adis16300_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_x, .scan_index = ADIS16400_SCAN_ACC_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -801,7 +896,8 @@ static struct iio_chan_spec adis16300_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_y, .scan_index = ADIS16400_SCAN_ACC_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -810,7 +906,8 @@ static struct iio_chan_spec adis16300_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_z, .scan_index = ADIS16400_SCAN_ACC_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -857,7 +954,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_x, .scan_index = ADIS16400_SCAN_GYRO_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -866,7 +964,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_y, .scan_index = ADIS16400_SCAN_GYRO_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -875,7 +974,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = gyro_z, .scan_index = ADIS16400_SCAN_GYRO_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -884,7 +984,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_x, .scan_index = ADIS16400_SCAN_ACC_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -893,7 +994,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_y, .scan_index = ADIS16400_SCAN_ACC_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -902,7 +1004,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | - IIO_CHAN_INFO_SCALE_SHARED_BIT, + IIO_CHAN_INFO_SCALE_SHARED_BIT | + IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT, .address = accel_z, .scan_index = ADIS16400_SCAN_ACC_Z, .scan_type = IIO_ST('s', 14, 16, 0), -- 1.7.7.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] staging:iio:documentation: document filter_low_pass_3db_frequency. 2011-11-27 11:39 [PATCH 0/3] Initial filtering (hardware) control for IIO Jonathan Cameron 2011-11-27 11:39 ` [PATCH 1/3] staging:iio: filter description - low pass 3db frequency Jonathan Cameron 2011-11-27 11:39 ` [PATCH 2/3] staging:iio:imu:adis16400 add control of data filtering Jonathan Cameron @ 2011-11-27 11:39 ` Jonathan Cameron 2011-11-27 19:23 ` [PATCH 0/3] Initial filtering (hardware) control for IIO Greg KH 3 siblings, 0 replies; 6+ messages in thread From: Jonathan Cameron @ 2011-11-27 11:39 UTC (permalink / raw) To: greg; +Cc: linux-iio, Jonathan Cameron From: Jonathan Cameron <jic23@cam.ac.uk> Add the sysfs ABI docs for all current instances of this parameter. Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> --- drivers/staging/iio/Documentation/sysfs-bus-iio | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/drivers/staging/iio/Documentation/sysfs-bus-iio b/drivers/staging/iio/Documentation/sysfs-bus-iio index 0d6823d..46a995d 100644 --- a/drivers/staging/iio/Documentation/sysfs-bus-iio +++ b/drivers/staging/iio/Documentation/sysfs-bus-iio @@ -276,6 +276,16 @@ Description: If a discrete set of scale values are available, they are listed in this attribute. +What: /sys/.../in_accel_filter_low_pass_3db_frequency +What: /sys/.../in_magn_filter_low_pass_3db_frequency +What: /sys/.../in_anglvel_filter_low_pass_3db_frequency +KernelVersion: 3.2 +Contact: linux-iio@vger.kernel.org +Description: + If a known or controllable low pass filter is applied + to the underlying data channel, then this parameter + gives the 3dB frequency of the filter in Hz. + What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_raw KernelVersion: 2.6.37 Contact: linux-iio@vger.kernel.org -- 1.7.7.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/3] Initial filtering (hardware) control for IIO. 2011-11-27 11:39 [PATCH 0/3] Initial filtering (hardware) control for IIO Jonathan Cameron ` (2 preceding siblings ...) 2011-11-27 11:39 ` [PATCH 3/3] staging:iio:documentation: document filter_low_pass_3db_frequency Jonathan Cameron @ 2011-11-27 19:23 ` Greg KH 3 siblings, 0 replies; 6+ messages in thread From: Greg KH @ 2011-11-27 19:23 UTC (permalink / raw) To: Jonathan Cameron; +Cc: linux-iio On Sun, Nov 27, 2011 at 11:39:11AM +0000, Jonathan Cameron wrote: > Hi Greg, > > Thanks for merging all those patches yesterday. > > These have been sitting in my tree and on linux-iio for far too long. > I think all issues raised about the initial patch set were answered > and fear this is not of sufficient interest to anyone to get a second > review! > > Anyhow fairly uncontroversial support for the low pass filters on > the ADI imu units. All now applied, thanks. greg k-h ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 0/3 V2] IIO: Filtering (previously RFC ...- how to handle). @ 2011-10-14 15:39 Jonathan Cameron 2011-10-14 15:39 ` [PATCH 2/3] staging:iio:imu:adis16400 add control of data filtering Jonathan Cameron 0 siblings, 1 reply; 6+ messages in thread From: Jonathan Cameron @ 2011-10-14 15:39 UTC (permalink / raw) To: linux-iio Cc: johnlm, Device-drivers-devel, Michael.Hennerich, Jonathan Cameron Hi All, Technically this has all been on list before, just now it is in a coherent patch set. Introduces low pass filter controls and description via 3db point. JohnLM suggested a whole load more stuff that we might want to know about filters. Whilst I am in favour of adding these at somepoint I think it should be as and when we have a user. I believe the naming here allows space for all the other things that have been suggested. Thanks. v1->v2 Added documentation. Jonathan Cameron (3): staging:iio: filter description - low pass 3db frequency. staging:iio:imu:adis16400 add control of data filtering. staging:iio:documentation: document filter_low_pass_3db_frequency. drivers/staging/iio/Documentation/sysfs-bus-iio | 10 ++ drivers/staging/iio/iio.h | 2 + drivers/staging/iio/imu/adis16400.h | 2 + drivers/staging/iio/imu/adis16400_core.c | 177 ++++++++++++++++++----- drivers/staging/iio/industrialio-core.c | 2 + 5 files changed, 156 insertions(+), 37 deletions(-) -- 1.7.7 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/3] staging:iio:imu:adis16400 add control of data filtering. 2011-10-14 15:39 [PATCH 0/3 V2] IIO: Filtering (previously RFC ...- how to handle) Jonathan Cameron @ 2011-10-14 15:39 ` Jonathan Cameron 0 siblings, 0 replies; 6+ messages in thread From: Jonathan Cameron @ 2011-10-14 15:39 UTC (permalink / raw) To: linux-iio Cc: johnlm, Device-drivers-devel, Michael.Hennerich, Jonathan Cameron Bartlett filter used. Values read of figures on datasheet so far from precise. Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk> --- drivers/staging/iio/imu/adis16400.h | 2 + drivers/staging/iio/imu/adis16400_core.c | 177 +++++++++++++++++++++++------ 2 files changed, 142 insertions(+), 37 deletions(-) diff --git a/drivers/staging/iio/imu/adis16400.h b/drivers/staging/iio/imu/adis16400.h index f3546ee..83d133e 100644 --- a/drivers/staging/iio/imu/adis16400.h +++ b/drivers/staging/iio/imu/adis16400.h @@ -148,12 +148,14 @@ struct adis16400_chip_info { * @tx: transmit buffer * @rx: receive buffer * @buf_lock: mutex to protect tx and rx + * @filt_int: integer part of requested filter frequency **/ struct adis16400_state { struct spi_device *us; struct iio_trigger *trig; struct mutex buf_lock; struct adis16400_chip_info *variant; + int filt_int; u8 tx[ADIS16400_MAX_TX] ____cacheline_aligned; u8 rx[ADIS16400_MAX_RX] ____cacheline_aligned; diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c index d082a37..ba7da18 100644 --- a/drivers/staging/iio/imu/adis16400_core.c +++ b/drivers/staging/iio/imu/adis16400_core.c @@ -161,25 +161,65 @@ error_ret: return ret; } +static int adis16400_get_freq(struct iio_dev *indio_dev) +{ + u16 t; + int sps, ret; + + ret = adis16400_spi_read_reg_16(indio_dev, ADIS16400_SMPL_PRD, &t); + if (ret < 0) + return ret; + sps = (t & ADIS16400_SMPL_PRD_TIME_BASE) ? 53 : 1638; + sps /= (t & ADIS16400_SMPL_PRD_DIV_MASK) + 1; + + return sps; +} + static ssize_t adis16400_read_frequency(struct device *dev, struct device_attribute *attr, char *buf) { struct iio_dev *indio_dev = dev_get_drvdata(dev); int ret, len = 0; - u16 t; - int sps; - ret = adis16400_spi_read_reg_16(indio_dev, - ADIS16400_SMPL_PRD, - &t); - if (ret) + ret = adis16400_get_freq(indio_dev); + if (ret < 0) return ret; - sps = (t & ADIS16400_SMPL_PRD_TIME_BASE) ? 53 : 1638; - sps /= (t & ADIS16400_SMPL_PRD_DIV_MASK) + 1; - len = sprintf(buf, "%d SPS\n", sps); + len = sprintf(buf, "%d SPS\n", ret); return len; } +static const unsigned adis16400_3db_divisors[] = { + [0] = 2, /* Special case */ + [1] = 5, + [2] = 10, + [3] = 50, + [4] = 200, +}; + +static int adis16400_set_filter(struct iio_dev *indio_dev, int sps, int val) +{ + int i, ret; + u16 val16; + for (i = ARRAY_SIZE(adis16400_3db_divisors) - 1; i >= 0; i--) + if (sps/adis16400_3db_divisors[i] > val) + break; + if (i == -1) + ret = -EINVAL; + else { + ret = adis16400_spi_read_reg_16(indio_dev, + ADIS16400_SENS_AVG, + &val16); + if (ret < 0) + goto error_ret; + + ret = adis16400_spi_write_reg_16(indio_dev, + ADIS16400_SENS_AVG, + (val16 & ~0x03) | i); + } +error_ret: + return ret; +} + static ssize_t adis16400_write_frequency(struct device *dev, struct device_attribute *attr, const char *buf, @@ -210,6 +250,7 @@ static ssize_t adis16400_write_frequency(struct device *dev, ADIS16400_SMPL_PRD, t); + /* Also update the filter */ mutex_unlock(&indio_dev->mlock); return ret ? ret : len; @@ -455,13 +496,15 @@ static u8 adis16400_addresses[17][2] = { [incli_y] = { ADIS16300_ROLL_OUT } }; + static int adis16400_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { - int ret; + struct adis16400_state *st = iio_priv(indio_dev); + int ret, sps; switch (mask) { case (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE): @@ -471,6 +514,21 @@ static int adis16400_write_raw(struct iio_dev *indio_dev, val); mutex_unlock(&indio_dev->mlock); return ret; + case (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED): + /* Need to cache values so we can update if the frequency + changes */ + mutex_lock(&indio_dev->mlock); + st->filt_int = val; + /* Work out update to current value */ + sps = adis16400_get_freq(indio_dev); + if (sps < 0) { + mutex_unlock(&indio_dev->mlock); + return sps; + } + + ret = adis16400_set_filter(indio_dev, sps, val); + mutex_unlock(&indio_dev->mlock); + return ret; default: return -EINVAL; } @@ -549,6 +607,24 @@ static int adis16400_read_raw(struct iio_dev *indio_dev, *val = 198; *val2 = 160000; return IIO_VAL_INT_PLUS_MICRO; + case (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED): + mutex_lock(&indio_dev->mlock); + /* Need both the number of taps and the sampling frequency */ + ret = adis16400_spi_read_reg_16(indio_dev, + ADIS16400_SENS_AVG, + &val16); + if (ret < 0) { + mutex_unlock(&indio_dev->mlock); + return ret; + } + ret = adis16400_get_freq(indio_dev); + if (ret > 0) + *val = ret/adis16400_3db_divisors[val16 & 0x03]; + *val2 = 0; + mutex_unlock(&indio_dev->mlock); + if (ret < 0) + return ret; + return IIO_VAL_INT_PLUS_MICRO; default: return -EINVAL; } @@ -569,7 +645,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_x, .scan_index = ADIS16400_SCAN_GYRO_X, .scan_type = IIO_ST('s', 14, 16, 0) @@ -578,7 +655,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_y, .scan_index = ADIS16400_SCAN_GYRO_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -587,7 +665,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_z, .scan_index = ADIS16400_SCAN_GYRO_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -596,7 +675,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_x, .scan_index = ADIS16400_SCAN_ACC_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -605,7 +685,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_y, .scan_index = ADIS16400_SCAN_ACC_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -614,7 +695,8 @@ static struct iio_chan_spec adis16400_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_z, .scan_index = ADIS16400_SCAN_ACC_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -622,7 +704,8 @@ static struct iio_chan_spec adis16400_channels[] = { .type = IIO_MAGN, .modified = 1, .channel2 = IIO_MOD_X, - .info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED), + .info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = magn_x, .scan_index = ADIS16400_SCAN_MAGN_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -630,7 +713,8 @@ static struct iio_chan_spec adis16400_channels[] = { .type = IIO_MAGN, .modified = 1, .channel2 = IIO_MOD_Y, - .info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED), + .info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = magn_y, .scan_index = ADIS16400_SCAN_MAGN_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -638,7 +722,8 @@ static struct iio_chan_spec adis16400_channels[] = { .type = IIO_MAGN, .modified = 1, .channel2 = IIO_MOD_Z, - .info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED), + .info_mask = (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = magn_z, .scan_index = ADIS16400_SCAN_MAGN_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -678,7 +763,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_x, .scan_index = ADIS16400_SCAN_GYRO_X, .scan_type = IIO_ST('s', 14, 16, 0) @@ -687,7 +773,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_y, .scan_index = ADIS16400_SCAN_GYRO_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -696,7 +783,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_z, .scan_index = ADIS16400_SCAN_GYRO_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -705,7 +793,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_x, .scan_index = ADIS16400_SCAN_ACC_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -714,7 +803,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_y, .scan_index = ADIS16400_SCAN_ACC_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -723,7 +813,8 @@ static struct iio_chan_spec adis16350_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_z, .scan_index = ADIS16400_SCAN_ACC_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -733,7 +824,8 @@ static struct iio_chan_spec adis16350_channels[] = { .channel = 0, .extend_name = "x", .info_mask = (1 << IIO_CHAN_INFO_OFFSET_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SEPARATE), + (1 << IIO_CHAN_INFO_SCALE_SEPARATE) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = temp0, .scan_index = ADIS16350_SCAN_TEMP_X, .scan_type = IIO_ST('s', 12, 16, 0), @@ -743,7 +835,8 @@ static struct iio_chan_spec adis16350_channels[] = { .channel = 1, .extend_name = "y", .info_mask = (1 << IIO_CHAN_INFO_OFFSET_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SEPARATE), + (1 << IIO_CHAN_INFO_SCALE_SEPARATE) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = temp1, .scan_index = ADIS16350_SCAN_TEMP_Y, .scan_type = IIO_ST('s', 12, 16, 0), @@ -784,7 +877,8 @@ static struct iio_chan_spec adis16300_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_x, .scan_index = ADIS16400_SCAN_GYRO_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -793,7 +887,8 @@ static struct iio_chan_spec adis16300_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_x, .scan_index = ADIS16400_SCAN_ACC_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -802,7 +897,8 @@ static struct iio_chan_spec adis16300_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_y, .scan_index = ADIS16400_SCAN_ACC_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -811,7 +907,8 @@ static struct iio_chan_spec adis16300_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_z, .scan_index = ADIS16400_SCAN_ACC_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -858,7 +955,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_x, .scan_index = ADIS16400_SCAN_GYRO_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -867,7 +965,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_y, .scan_index = ADIS16400_SCAN_GYRO_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -876,7 +975,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = gyro_z, .scan_index = ADIS16400_SCAN_GYRO_Z, .scan_type = IIO_ST('s', 14, 16, 0), @@ -885,7 +985,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_X, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_x, .scan_index = ADIS16400_SCAN_ACC_X, .scan_type = IIO_ST('s', 14, 16, 0), @@ -894,7 +995,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_Y, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_y, .scan_index = ADIS16400_SCAN_ACC_Y, .scan_type = IIO_ST('s', 14, 16, 0), @@ -903,7 +1005,8 @@ static const struct iio_chan_spec adis16334_channels[] = { .modified = 1, .channel2 = IIO_MOD_Z, .info_mask = (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | - (1 << IIO_CHAN_INFO_SCALE_SHARED), + (1 << IIO_CHAN_INFO_SCALE_SHARED) | + (1 << IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED), .address = accel_z, .scan_index = ADIS16400_SCAN_ACC_Z, .scan_type = IIO_ST('s', 14, 16, 0), -- 1.7.7 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-11-27 19:38 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-11-27 11:39 [PATCH 0/3] Initial filtering (hardware) control for IIO Jonathan Cameron 2011-11-27 11:39 ` [PATCH 1/3] staging:iio: filter description - low pass 3db frequency Jonathan Cameron 2011-11-27 11:39 ` [PATCH 2/3] staging:iio:imu:adis16400 add control of data filtering Jonathan Cameron 2011-11-27 11:39 ` [PATCH 3/3] staging:iio:documentation: document filter_low_pass_3db_frequency Jonathan Cameron 2011-11-27 19:23 ` [PATCH 0/3] Initial filtering (hardware) control for IIO Greg KH -- strict thread matches above, loose matches on Subject: below -- 2011-10-14 15:39 [PATCH 0/3 V2] IIO: Filtering (previously RFC ...- how to handle) Jonathan Cameron 2011-10-14 15:39 ` [PATCH 2/3] staging:iio:imu:adis16400 add control of data filtering Jonathan Cameron
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).