diff options
-rw-r--r-- | drivers/iio/gyro/adis16260.c | 124 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16201_core.c | 14 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16203_core.c | 11 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16204_core.c | 12 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16209_core.c | 18 | ||||
-rw-r--r-- | drivers/staging/iio/accel/adis16240_core.c | 12 | ||||
-rw-r--r-- | include/linux/iio/imu/adis.h | 33 |
7 files changed, 99 insertions, 125 deletions
diff --git a/drivers/iio/gyro/adis16260.c b/drivers/iio/gyro/adis16260.c index 22b6fb80fa1a..75fe0edd3d0f 100644 --- a/drivers/iio/gyro/adis16260.c +++ b/drivers/iio/gyro/adis16260.c | |||
@@ -101,65 +101,6 @@ | |||
101 | #define ADIS16260_SCAN_TEMP 3 | 101 | #define ADIS16260_SCAN_TEMP 3 |
102 | #define ADIS16260_SCAN_ANGL 4 | 102 | #define ADIS16260_SCAN_ANGL 4 |
103 | 103 | ||
104 | static ssize_t adis16260_read_frequency(struct device *dev, | ||
105 | struct device_attribute *attr, | ||
106 | char *buf) | ||
107 | { | ||
108 | struct iio_dev *indio_dev = dev_to_iio_dev(dev); | ||
109 | struct adis *adis = iio_priv(indio_dev); | ||
110 | int ret, len = 0; | ||
111 | u16 t; | ||
112 | int sps; | ||
113 | ret = adis_read_reg_16(adis, ADIS16260_SMPL_PRD, &t); | ||
114 | if (ret) | ||
115 | return ret; | ||
116 | |||
117 | if (spi_get_device_id(adis->spi)->driver_data) /* If an adis16251 */ | ||
118 | sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256; | ||
119 | else | ||
120 | sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048; | ||
121 | sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1; | ||
122 | len = sprintf(buf, "%d\n", sps); | ||
123 | return len; | ||
124 | } | ||
125 | |||
126 | static ssize_t adis16260_write_frequency(struct device *dev, | ||
127 | struct device_attribute *attr, | ||
128 | const char *buf, | ||
129 | size_t len) | ||
130 | { | ||
131 | struct iio_dev *indio_dev = dev_to_iio_dev(dev); | ||
132 | struct adis *adis = iio_priv(indio_dev); | ||
133 | unsigned int val; | ||
134 | int ret; | ||
135 | u8 t; | ||
136 | |||
137 | ret = kstrtouint(buf, 10, &val); | ||
138 | if (ret) | ||
139 | return ret; | ||
140 | |||
141 | mutex_lock(&indio_dev->mlock); | ||
142 | if (spi_get_device_id(adis->spi)->driver_data) | ||
143 | t = 256 / val; | ||
144 | else | ||
145 | t = 2048 / val; | ||
146 | |||
147 | if (t > ADIS16260_SMPL_PRD_DIV_MASK) | ||
148 | t = ADIS16260_SMPL_PRD_DIV_MASK; | ||
149 | else if (t > 0) | ||
150 | t--; | ||
151 | |||
152 | if (t >= 0x0A) | ||
153 | adis->spi->max_speed_hz = ADIS16260_SPI_SLOW; | ||
154 | else | ||
155 | adis->spi->max_speed_hz = ADIS16260_SPI_FAST; | ||
156 | ret = adis_write_reg_8(adis, ADIS16260_SMPL_PRD, t); | ||
157 | |||
158 | mutex_unlock(&indio_dev->mlock); | ||
159 | |||
160 | return ret ? ret : len; | ||
161 | } | ||
162 | |||
163 | /* Power down the device */ | 104 | /* Power down the device */ |
164 | static int adis16260_stop_device(struct iio_dev *indio_dev) | 105 | static int adis16260_stop_device(struct iio_dev *indio_dev) |
165 | { | 106 | { |
@@ -174,18 +115,19 @@ static int adis16260_stop_device(struct iio_dev *indio_dev) | |||
174 | return ret; | 115 | return ret; |
175 | } | 116 | } |
176 | 117 | ||
177 | static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, | ||
178 | adis16260_read_frequency, | ||
179 | adis16260_write_frequency); | ||
180 | |||
181 | static const struct iio_chan_spec adis16260_channels[] = { | 118 | static const struct iio_chan_spec adis16260_channels[] = { |
182 | ADIS_GYRO_CHAN(X, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO, | 119 | ADIS_GYRO_CHAN(X, ADIS16260_GYRO_OUT, ADIS16260_SCAN_GYRO, |
183 | BIT(IIO_CHAN_INFO_CALIBBIAS) | | 120 | BIT(IIO_CHAN_INFO_CALIBBIAS) | |
184 | BIT(IIO_CHAN_INFO_CALIBSCALE), 14), | 121 | BIT(IIO_CHAN_INFO_CALIBSCALE), |
185 | ADIS_INCLI_CHAN(X, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, 14), | 122 | BIT(IIO_CHAN_INFO_SAMP_FREQ), 14), |
186 | ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, 12), | 123 | ADIS_INCLI_CHAN(X, ADIS16260_ANGL_OUT, ADIS16260_SCAN_ANGL, 0, |
187 | ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, 12), | 124 | BIT(IIO_CHAN_INFO_SAMP_FREQ), 14), |
188 | ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, 12), | 125 | ADIS_TEMP_CHAN(ADIS16260_TEMP_OUT, ADIS16260_SCAN_TEMP, |
126 | BIT(IIO_CHAN_INFO_SAMP_FREQ), 12), | ||
127 | ADIS_SUPPLY_CHAN(ADIS16260_SUPPLY_OUT, ADIS16260_SCAN_SUPPLY, | ||
128 | BIT(IIO_CHAN_INFO_SAMP_FREQ), 12), | ||
129 | ADIS_AUX_ADC_CHAN(ADIS16260_AUX_ADC, ADIS16260_SCAN_AUX_ADC, | ||
130 | BIT(IIO_CHAN_INFO_SAMP_FREQ), 12), | ||
189 | IIO_CHAN_SOFT_TIMESTAMP(5), | 131 | IIO_CHAN_SOFT_TIMESTAMP(5), |
190 | }; | 132 | }; |
191 | 133 | ||
@@ -258,6 +200,20 @@ static int adis16260_read_raw(struct iio_dev *indio_dev, | |||
258 | 200 | ||
259 | *val = val16; | 201 | *val = val16; |
260 | return IIO_VAL_INT; | 202 | return IIO_VAL_INT; |
203 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
204 | ret = adis_read_reg_16(adis, ADIS16260_SMPL_PRD, &val16); | ||
205 | if (ret) | ||
206 | return ret; | ||
207 | |||
208 | if (spi_get_device_id(adis->spi)->driver_data) | ||
209 | /* If an adis16251 */ | ||
210 | *val = (val16 & ADIS16260_SMPL_PRD_TIME_BASE) ? | ||
211 | 8 : 256; | ||
212 | else | ||
213 | *val = (val16 & ADIS16260_SMPL_PRD_TIME_BASE) ? | ||
214 | 66 : 2048; | ||
215 | *val /= (val16 & ADIS16260_SMPL_PRD_DIV_MASK) + 1; | ||
216 | return IIO_VAL_INT; | ||
261 | } | 217 | } |
262 | return -EINVAL; | 218 | return -EINVAL; |
263 | } | 219 | } |
@@ -269,7 +225,9 @@ static int adis16260_write_raw(struct iio_dev *indio_dev, | |||
269 | long mask) | 225 | long mask) |
270 | { | 226 | { |
271 | struct adis *adis = iio_priv(indio_dev); | 227 | struct adis *adis = iio_priv(indio_dev); |
228 | int ret; | ||
272 | u8 addr; | 229 | u8 addr; |
230 | u8 t; | ||
273 | 231 | ||
274 | switch (mask) { | 232 | switch (mask) { |
275 | case IIO_CHAN_INFO_CALIBBIAS: | 233 | case IIO_CHAN_INFO_CALIBBIAS: |
@@ -284,21 +242,31 @@ static int adis16260_write_raw(struct iio_dev *indio_dev, | |||
284 | 242 | ||
285 | addr = adis16260_addresses[chan->scan_index][1]; | 243 | addr = adis16260_addresses[chan->scan_index][1]; |
286 | return adis_write_reg_16(adis, addr, val); | 244 | return adis_write_reg_16(adis, addr, val); |
245 | case IIO_CHAN_INFO_SAMP_FREQ: | ||
246 | mutex_lock(&indio_dev->mlock); | ||
247 | if (spi_get_device_id(adis->spi)->driver_data) | ||
248 | t = 256 / val; | ||
249 | else | ||
250 | t = 2048 / val; | ||
251 | |||
252 | if (t > ADIS16260_SMPL_PRD_DIV_MASK) | ||
253 | t = ADIS16260_SMPL_PRD_DIV_MASK; | ||
254 | else if (t > 0) | ||
255 | t--; | ||
256 | |||
257 | if (t >= 0x0A) | ||
258 | adis->spi->max_speed_hz = ADIS16260_SPI_SLOW; | ||
259 | else | ||
260 | adis->spi->max_speed_hz = ADIS16260_SPI_FAST; | ||
261 | ret = adis_write_reg_8(adis, ADIS16260_SMPL_PRD, t); | ||
262 | |||
263 | mutex_unlock(&indio_dev->mlock); | ||
264 | return ret; | ||
287 | } | 265 | } |
288 | return -EINVAL; | 266 | return -EINVAL; |
289 | } | 267 | } |
290 | 268 | ||
291 | static struct attribute *adis16260_attributes[] = { | ||
292 | &iio_dev_attr_sampling_frequency.dev_attr.attr, | ||
293 | NULL | ||
294 | }; | ||
295 | |||
296 | static const struct attribute_group adis16260_attribute_group = { | ||
297 | .attrs = adis16260_attributes, | ||
298 | }; | ||
299 | |||
300 | static const struct iio_info adis16260_info = { | 269 | static const struct iio_info adis16260_info = { |
301 | .attrs = &adis16260_attribute_group, | ||
302 | .read_raw = &adis16260_read_raw, | 270 | .read_raw = &adis16260_read_raw, |
303 | .write_raw = &adis16260_write_raw, | 271 | .write_raw = &adis16260_write_raw, |
304 | .update_scan_mode = adis_update_scan_mode, | 272 | .update_scan_mode = adis_update_scan_mode, |
diff --git a/drivers/staging/iio/accel/adis16201_core.c b/drivers/staging/iio/accel/adis16201_core.c index 2105576fa77c..50ba1fa7f98a 100644 --- a/drivers/staging/iio/accel/adis16201_core.c +++ b/drivers/staging/iio/accel/adis16201_core.c | |||
@@ -131,17 +131,17 @@ static int adis16201_write_raw(struct iio_dev *indio_dev, | |||
131 | } | 131 | } |
132 | 132 | ||
133 | static const struct iio_chan_spec adis16201_channels[] = { | 133 | static const struct iio_chan_spec adis16201_channels[] = { |
134 | ADIS_SUPPLY_CHAN(ADIS16201_SUPPLY_OUT, ADIS16201_SCAN_SUPPLY, 12), | 134 | ADIS_SUPPLY_CHAN(ADIS16201_SUPPLY_OUT, ADIS16201_SCAN_SUPPLY, 0, 12), |
135 | ADIS_TEMP_CHAN(ADIS16201_TEMP_OUT, ADIS16201_SCAN_TEMP, 12), | 135 | ADIS_TEMP_CHAN(ADIS16201_TEMP_OUT, ADIS16201_SCAN_TEMP, 0, 12), |
136 | ADIS_ACCEL_CHAN(X, ADIS16201_XACCL_OUT, ADIS16201_SCAN_ACC_X, | 136 | ADIS_ACCEL_CHAN(X, ADIS16201_XACCL_OUT, ADIS16201_SCAN_ACC_X, |
137 | BIT(IIO_CHAN_INFO_CALIBBIAS), 14), | 137 | BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), |
138 | ADIS_ACCEL_CHAN(Y, ADIS16201_YACCL_OUT, ADIS16201_SCAN_ACC_Y, | 138 | ADIS_ACCEL_CHAN(Y, ADIS16201_YACCL_OUT, ADIS16201_SCAN_ACC_Y, |
139 | BIT(IIO_CHAN_INFO_CALIBBIAS), 14), | 139 | BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), |
140 | ADIS_AUX_ADC_CHAN(ADIS16201_AUX_ADC, ADIS16201_SCAN_AUX_ADC, 12), | 140 | ADIS_AUX_ADC_CHAN(ADIS16201_AUX_ADC, ADIS16201_SCAN_AUX_ADC, 0, 12), |
141 | ADIS_INCLI_CHAN(X, ADIS16201_XINCL_OUT, ADIS16201_SCAN_INCLI_X, | 141 | ADIS_INCLI_CHAN(X, ADIS16201_XINCL_OUT, ADIS16201_SCAN_INCLI_X, |
142 | BIT(IIO_CHAN_INFO_CALIBBIAS), 14), | 142 | BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), |
143 | ADIS_INCLI_CHAN(X, ADIS16201_YINCL_OUT, ADIS16201_SCAN_INCLI_Y, | 143 | ADIS_INCLI_CHAN(X, ADIS16201_YINCL_OUT, ADIS16201_SCAN_INCLI_Y, |
144 | BIT(IIO_CHAN_INFO_CALIBBIAS), 14), | 144 | BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), |
145 | IIO_CHAN_SOFT_TIMESTAMP(7) | 145 | IIO_CHAN_SOFT_TIMESTAMP(7) |
146 | }; | 146 | }; |
147 | 147 | ||
diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c index 409a28ed9043..f472137b0069 100644 --- a/drivers/staging/iio/accel/adis16203_core.c +++ b/drivers/staging/iio/accel/adis16203_core.c | |||
@@ -99,13 +99,14 @@ static int adis16203_read_raw(struct iio_dev *indio_dev, | |||
99 | } | 99 | } |
100 | 100 | ||
101 | static const struct iio_chan_spec adis16203_channels[] = { | 101 | static const struct iio_chan_spec adis16203_channels[] = { |
102 | ADIS_SUPPLY_CHAN(ADIS16203_SUPPLY_OUT, ADIS16203_SCAN_SUPPLY, 12), | 102 | ADIS_SUPPLY_CHAN(ADIS16203_SUPPLY_OUT, ADIS16203_SCAN_SUPPLY, 0, 12), |
103 | ADIS_AUX_ADC_CHAN(ADIS16203_AUX_ADC, ADIS16203_SCAN_AUX_ADC, 12), | 103 | ADIS_AUX_ADC_CHAN(ADIS16203_AUX_ADC, ADIS16203_SCAN_AUX_ADC, 0, 12), |
104 | ADIS_INCLI_CHAN(X, ADIS16203_XINCL_OUT, ADIS16203_SCAN_INCLI_X, | 104 | ADIS_INCLI_CHAN(X, ADIS16203_XINCL_OUT, ADIS16203_SCAN_INCLI_X, |
105 | BIT(IIO_CHAN_INFO_CALIBBIAS), 14), | 105 | BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), |
106 | /* Fixme: Not what it appears to be - see data sheet */ | 106 | /* Fixme: Not what it appears to be - see data sheet */ |
107 | ADIS_INCLI_CHAN(Y, ADIS16203_YINCL_OUT, ADIS16203_SCAN_INCLI_Y, 0, 14), | 107 | ADIS_INCLI_CHAN(Y, ADIS16203_YINCL_OUT, ADIS16203_SCAN_INCLI_Y, |
108 | ADIS_TEMP_CHAN(ADIS16203_TEMP_OUT, ADIS16203_SCAN_TEMP, 12), | 108 | 0, 0, 14), |
109 | ADIS_TEMP_CHAN(ADIS16203_TEMP_OUT, ADIS16203_SCAN_TEMP, 0, 12), | ||
109 | IIO_CHAN_SOFT_TIMESTAMP(5), | 110 | IIO_CHAN_SOFT_TIMESTAMP(5), |
110 | }; | 111 | }; |
111 | 112 | ||
diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c index b8ea76857cd6..19eaebc77d7a 100644 --- a/drivers/staging/iio/accel/adis16204_core.c +++ b/drivers/staging/iio/accel/adis16204_core.c | |||
@@ -136,15 +136,15 @@ static int adis16204_write_raw(struct iio_dev *indio_dev, | |||
136 | } | 136 | } |
137 | 137 | ||
138 | static const struct iio_chan_spec adis16204_channels[] = { | 138 | static const struct iio_chan_spec adis16204_channels[] = { |
139 | ADIS_SUPPLY_CHAN(ADIS16204_SUPPLY_OUT, ADIS16204_SCAN_SUPPLY, 12), | 139 | ADIS_SUPPLY_CHAN(ADIS16204_SUPPLY_OUT, ADIS16204_SCAN_SUPPLY, 0, 12), |
140 | ADIS_AUX_ADC_CHAN(ADIS16204_AUX_ADC, ADIS16204_SCAN_AUX_ADC, 12), | 140 | ADIS_AUX_ADC_CHAN(ADIS16204_AUX_ADC, ADIS16204_SCAN_AUX_ADC, 0, 12), |
141 | ADIS_TEMP_CHAN(ADIS16204_TEMP_OUT, ADIS16204_SCAN_TEMP, 12), | 141 | ADIS_TEMP_CHAN(ADIS16204_TEMP_OUT, ADIS16204_SCAN_TEMP, 0, 12), |
142 | ADIS_ACCEL_CHAN(X, ADIS16204_XACCL_OUT, ADIS16204_SCAN_ACC_X, | 142 | ADIS_ACCEL_CHAN(X, ADIS16204_XACCL_OUT, ADIS16204_SCAN_ACC_X, |
143 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 14), | 143 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 14), |
144 | ADIS_ACCEL_CHAN(Y, ADIS16204_YACCL_OUT, ADIS16204_SCAN_ACC_Y, | 144 | ADIS_ACCEL_CHAN(Y, ADIS16204_YACCL_OUT, ADIS16204_SCAN_ACC_Y, |
145 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 14), | 145 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 14), |
146 | ADIS_ACCEL_CHAN(ROOT_SUM_SQUARED_X_Y, ADIS16204_XY_RSS_OUT, | 146 | ADIS_ACCEL_CHAN(ROOT_SUM_SQUARED_X_Y, ADIS16204_XY_RSS_OUT, |
147 | ADIS16204_SCAN_ACC_XY, BIT(IIO_CHAN_INFO_PEAK), 14), | 147 | ADIS16204_SCAN_ACC_XY, BIT(IIO_CHAN_INFO_PEAK), 0, 14), |
148 | IIO_CHAN_SOFT_TIMESTAMP(5), | 148 | IIO_CHAN_SOFT_TIMESTAMP(5), |
149 | }; | 149 | }; |
150 | 150 | ||
diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c index 4492e51d8886..374dc6edbcf5 100644 --- a/drivers/staging/iio/accel/adis16209_core.c +++ b/drivers/staging/iio/accel/adis16209_core.c | |||
@@ -130,16 +130,18 @@ static int adis16209_read_raw(struct iio_dev *indio_dev, | |||
130 | } | 130 | } |
131 | 131 | ||
132 | static const struct iio_chan_spec adis16209_channels[] = { | 132 | static const struct iio_chan_spec adis16209_channels[] = { |
133 | ADIS_SUPPLY_CHAN(ADIS16209_SUPPLY_OUT, ADIS16209_SCAN_SUPPLY, 14), | 133 | ADIS_SUPPLY_CHAN(ADIS16209_SUPPLY_OUT, ADIS16209_SCAN_SUPPLY, 0, 14), |
134 | ADIS_TEMP_CHAN(ADIS16209_TEMP_OUT, ADIS16209_SCAN_TEMP, 12), | 134 | ADIS_TEMP_CHAN(ADIS16209_TEMP_OUT, ADIS16209_SCAN_TEMP, 0, 12), |
135 | ADIS_ACCEL_CHAN(X, ADIS16209_XACCL_OUT, ADIS16209_SCAN_ACC_X, | 135 | ADIS_ACCEL_CHAN(X, ADIS16209_XACCL_OUT, ADIS16209_SCAN_ACC_X, |
136 | BIT(IIO_CHAN_INFO_CALIBBIAS), 14), | 136 | BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), |
137 | ADIS_ACCEL_CHAN(Y, ADIS16209_YACCL_OUT, ADIS16209_SCAN_ACC_Y, | 137 | ADIS_ACCEL_CHAN(Y, ADIS16209_YACCL_OUT, ADIS16209_SCAN_ACC_Y, |
138 | BIT(IIO_CHAN_INFO_CALIBBIAS), 14), | 138 | BIT(IIO_CHAN_INFO_CALIBBIAS), 0, 14), |
139 | ADIS_AUX_ADC_CHAN(ADIS16209_AUX_ADC, ADIS16209_SCAN_AUX_ADC, 12), | 139 | ADIS_AUX_ADC_CHAN(ADIS16209_AUX_ADC, ADIS16209_SCAN_AUX_ADC, 0, 12), |
140 | ADIS_INCLI_CHAN(X, ADIS16209_XINCL_OUT, ADIS16209_SCAN_INCLI_X, 0, 14), | 140 | ADIS_INCLI_CHAN(X, ADIS16209_XINCL_OUT, ADIS16209_SCAN_INCLI_X, |
141 | ADIS_INCLI_CHAN(Y, ADIS16209_YINCL_OUT, ADIS16209_SCAN_INCLI_Y, 0, 14), | 141 | 0, 0, 14), |
142 | ADIS_ROT_CHAN(X, ADIS16209_ROT_OUT, ADIS16209_SCAN_ROT, 0, 14), | 142 | ADIS_INCLI_CHAN(Y, ADIS16209_YINCL_OUT, ADIS16209_SCAN_INCLI_Y, |
143 | 0, 0, 14), | ||
144 | ADIS_ROT_CHAN(X, ADIS16209_ROT_OUT, ADIS16209_SCAN_ROT, 0, 0, 14), | ||
143 | IIO_CHAN_SOFT_TIMESTAMP(8) | 145 | IIO_CHAN_SOFT_TIMESTAMP(8) |
144 | }; | 146 | }; |
145 | 147 | ||
diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c index 3a303a03d028..74ace2a8769d 100644 --- a/drivers/staging/iio/accel/adis16240_core.c +++ b/drivers/staging/iio/accel/adis16240_core.c | |||
@@ -173,15 +173,15 @@ static int adis16240_write_raw(struct iio_dev *indio_dev, | |||
173 | } | 173 | } |
174 | 174 | ||
175 | static const struct iio_chan_spec adis16240_channels[] = { | 175 | static const struct iio_chan_spec adis16240_channels[] = { |
176 | ADIS_SUPPLY_CHAN(ADIS16240_SUPPLY_OUT, ADIS16240_SCAN_SUPPLY, 10), | 176 | ADIS_SUPPLY_CHAN(ADIS16240_SUPPLY_OUT, ADIS16240_SCAN_SUPPLY, 0, 10), |
177 | ADIS_AUX_ADC_CHAN(ADIS16240_AUX_ADC, ADIS16240_SCAN_AUX_ADC, 10), | 177 | ADIS_AUX_ADC_CHAN(ADIS16240_AUX_ADC, ADIS16240_SCAN_AUX_ADC, 0, 10), |
178 | ADIS_ACCEL_CHAN(X, ADIS16240_XACCL_OUT, ADIS16240_SCAN_ACC_X, | 178 | ADIS_ACCEL_CHAN(X, ADIS16240_XACCL_OUT, ADIS16240_SCAN_ACC_X, |
179 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10), | 179 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 10), |
180 | ADIS_ACCEL_CHAN(Y, ADIS16240_YACCL_OUT, ADIS16240_SCAN_ACC_Y, | 180 | ADIS_ACCEL_CHAN(Y, ADIS16240_YACCL_OUT, ADIS16240_SCAN_ACC_Y, |
181 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10), | 181 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 10), |
182 | ADIS_ACCEL_CHAN(Z, ADIS16240_ZACCL_OUT, ADIS16240_SCAN_ACC_Z, | 182 | ADIS_ACCEL_CHAN(Z, ADIS16240_ZACCL_OUT, ADIS16240_SCAN_ACC_Z, |
183 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 10), | 183 | BIT(IIO_CHAN_INFO_CALIBBIAS) | BIT(IIO_CHAN_INFO_PEAK), 0, 10), |
184 | ADIS_TEMP_CHAN(ADIS16240_TEMP_OUT, ADIS16240_SCAN_TEMP, 10), | 184 | ADIS_TEMP_CHAN(ADIS16240_TEMP_OUT, ADIS16240_SCAN_TEMP, 0, 10), |
185 | IIO_CHAN_SOFT_TIMESTAMP(6) | 185 | IIO_CHAN_SOFT_TIMESTAMP(6) |
186 | }; | 186 | }; |
187 | 187 | ||
diff --git a/include/linux/iio/imu/adis.h b/include/linux/iio/imu/adis.h index b665dc7f017b..fa2d01ef8f55 100644 --- a/include/linux/iio/imu/adis.h +++ b/include/linux/iio/imu/adis.h | |||
@@ -157,13 +157,14 @@ int adis_single_conversion(struct iio_dev *indio_dev, | |||
157 | const struct iio_chan_spec *chan, unsigned int error_mask, | 157 | const struct iio_chan_spec *chan, unsigned int error_mask, |
158 | int *val); | 158 | int *val); |
159 | 159 | ||
160 | #define ADIS_VOLTAGE_CHAN(addr, si, chan, name, bits) { \ | 160 | #define ADIS_VOLTAGE_CHAN(addr, si, chan, name, info_all, bits) { \ |
161 | .type = IIO_VOLTAGE, \ | 161 | .type = IIO_VOLTAGE, \ |
162 | .indexed = 1, \ | 162 | .indexed = 1, \ |
163 | .channel = (chan), \ | 163 | .channel = (chan), \ |
164 | .extend_name = name, \ | 164 | .extend_name = name, \ |
165 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ | 165 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ |
166 | BIT(IIO_CHAN_INFO_SCALE), \ | 166 | BIT(IIO_CHAN_INFO_SCALE), \ |
167 | .info_mask_shared_by_all = info_all, \ | ||
167 | .address = (addr), \ | 168 | .address = (addr), \ |
168 | .scan_index = (si), \ | 169 | .scan_index = (si), \ |
169 | .scan_type = { \ | 170 | .scan_type = { \ |
@@ -174,19 +175,20 @@ int adis_single_conversion(struct iio_dev *indio_dev, | |||
174 | }, \ | 175 | }, \ |
175 | } | 176 | } |
176 | 177 | ||
177 | #define ADIS_SUPPLY_CHAN(addr, si, bits) \ | 178 | #define ADIS_SUPPLY_CHAN(addr, si, info_all, bits) \ |
178 | ADIS_VOLTAGE_CHAN(addr, si, 0, "supply", bits) | 179 | ADIS_VOLTAGE_CHAN(addr, si, 0, "supply", info_all, bits) |
179 | 180 | ||
180 | #define ADIS_AUX_ADC_CHAN(addr, si, bits) \ | 181 | #define ADIS_AUX_ADC_CHAN(addr, si, info_all, bits) \ |
181 | ADIS_VOLTAGE_CHAN(addr, si, 1, NULL, bits) | 182 | ADIS_VOLTAGE_CHAN(addr, si, 1, NULL, info_all, bits) |
182 | 183 | ||
183 | #define ADIS_TEMP_CHAN(addr, si, bits) { \ | 184 | #define ADIS_TEMP_CHAN(addr, si, info_all, bits) { \ |
184 | .type = IIO_TEMP, \ | 185 | .type = IIO_TEMP, \ |
185 | .indexed = 1, \ | 186 | .indexed = 1, \ |
186 | .channel = 0, \ | 187 | .channel = 0, \ |
187 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ | 188 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ |
188 | BIT(IIO_CHAN_INFO_SCALE) | \ | 189 | BIT(IIO_CHAN_INFO_SCALE) | \ |
189 | BIT(IIO_CHAN_INFO_OFFSET), \ | 190 | BIT(IIO_CHAN_INFO_OFFSET), \ |
191 | .info_mask_shared_by_all = info_all, \ | ||
190 | .address = (addr), \ | 192 | .address = (addr), \ |
191 | .scan_index = (si), \ | 193 | .scan_index = (si), \ |
192 | .scan_type = { \ | 194 | .scan_type = { \ |
@@ -197,13 +199,14 @@ int adis_single_conversion(struct iio_dev *indio_dev, | |||
197 | }, \ | 199 | }, \ |
198 | } | 200 | } |
199 | 201 | ||
200 | #define ADIS_MOD_CHAN(_type, mod, addr, si, info_sep, bits) { \ | 202 | #define ADIS_MOD_CHAN(_type, mod, addr, si, info_sep, info_all, bits) { \ |
201 | .type = (_type), \ | 203 | .type = (_type), \ |
202 | .modified = 1, \ | 204 | .modified = 1, \ |
203 | .channel2 = IIO_MOD_ ## mod, \ | 205 | .channel2 = IIO_MOD_ ## mod, \ |
204 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ | 206 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ |
205 | info_sep, \ | 207 | info_sep, \ |
206 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ | 208 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ |
209 | .info_mask_shared_by_all = info_all, \ | ||
207 | .address = (addr), \ | 210 | .address = (addr), \ |
208 | .scan_index = (si), \ | 211 | .scan_index = (si), \ |
209 | .scan_type = { \ | 212 | .scan_type = { \ |
@@ -214,17 +217,17 @@ int adis_single_conversion(struct iio_dev *indio_dev, | |||
214 | }, \ | 217 | }, \ |
215 | } | 218 | } |
216 | 219 | ||
217 | #define ADIS_ACCEL_CHAN(mod, addr, si, info_sep, bits) \ | 220 | #define ADIS_ACCEL_CHAN(mod, addr, si, info_sep, info_all, bits) \ |
218 | ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info_sep, bits) | 221 | ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info_sep, info_all, bits) |
219 | 222 | ||
220 | #define ADIS_GYRO_CHAN(mod, addr, si, info_sep, bits) \ | 223 | #define ADIS_GYRO_CHAN(mod, addr, si, info_sep, info_all, bits) \ |
221 | ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info_sep, bits) | 224 | ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info_sep, info_all, bits) |
222 | 225 | ||
223 | #define ADIS_INCLI_CHAN(mod, addr, si, info_sep, bits) \ | 226 | #define ADIS_INCLI_CHAN(mod, addr, si, info_sep, info_all, bits) \ |
224 | ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info_sep, bits) | 227 | ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info_sep, info_all, bits) |
225 | 228 | ||
226 | #define ADIS_ROT_CHAN(mod, addr, si, info_sep, bits) \ | 229 | #define ADIS_ROT_CHAN(mod, addr, si, info_sep, info_all, bits) \ |
227 | ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info_sep, bits) | 230 | ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info_sep, info_all, bits) |
228 | 231 | ||
229 | #ifdef CONFIG_IIO_ADIS_LIB_BUFFER | 232 | #ifdef CONFIG_IIO_ADIS_LIB_BUFFER |
230 | 233 | ||