diff options
-rw-r--r-- | MAINTAINERS | 1 | ||||
-rw-r--r-- | drivers/iio/accel/st_accel_core.c | 12 | ||||
-rw-r--r-- | drivers/iio/adc/Kconfig | 2 | ||||
-rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_buffer.c | 4 | ||||
-rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_core.c | 13 | ||||
-rw-r--r-- | drivers/iio/counter/104-quad-8.c | 13 | ||||
-rw-r--r-- | drivers/iio/imu/bmi160/bmi160_core.c | 25 | ||||
-rw-r--r-- | drivers/iio/light/max44000.c | 2 | ||||
-rw-r--r-- | drivers/staging/octeon/ethernet.c | 2 | ||||
-rw-r--r-- | include/linux/iio/common/st_sensors.h | 12 |
10 files changed, 56 insertions, 30 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index a136dfbb8eea..c0441ab2f8b0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -5507,6 +5507,7 @@ M: Alex Elder <elder@kernel.org> | |||
5507 | M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 5507 | M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
5508 | S: Maintained | 5508 | S: Maintained |
5509 | F: drivers/staging/greybus/ | 5509 | F: drivers/staging/greybus/ |
5510 | L: greybus-dev@lists.linaro.org | ||
5510 | 5511 | ||
5511 | GREYBUS AUDIO PROTOCOLS DRIVERS | 5512 | GREYBUS AUDIO PROTOCOLS DRIVERS |
5512 | M: Vaibhav Agarwal <vaibhav.sr@gmail.com> | 5513 | M: Vaibhav Agarwal <vaibhav.sr@gmail.com> |
diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c index f6b6d42385e1..784670e2736b 100644 --- a/drivers/iio/accel/st_accel_core.c +++ b/drivers/iio/accel/st_accel_core.c | |||
@@ -353,12 +353,12 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = { | |||
353 | [0] = { | 353 | [0] = { |
354 | .num = ST_ACCEL_FS_AVL_2G, | 354 | .num = ST_ACCEL_FS_AVL_2G, |
355 | .value = 0x00, | 355 | .value = 0x00, |
356 | .gain = IIO_G_TO_M_S_2(1024), | 356 | .gain = IIO_G_TO_M_S_2(1000), |
357 | }, | 357 | }, |
358 | [1] = { | 358 | [1] = { |
359 | .num = ST_ACCEL_FS_AVL_6G, | 359 | .num = ST_ACCEL_FS_AVL_6G, |
360 | .value = 0x01, | 360 | .value = 0x01, |
361 | .gain = IIO_G_TO_M_S_2(340), | 361 | .gain = IIO_G_TO_M_S_2(3000), |
362 | }, | 362 | }, |
363 | }, | 363 | }, |
364 | }, | 364 | }, |
@@ -366,6 +366,14 @@ static const struct st_sensor_settings st_accel_sensors_settings[] = { | |||
366 | .addr = 0x21, | 366 | .addr = 0x21, |
367 | .mask = 0x40, | 367 | .mask = 0x40, |
368 | }, | 368 | }, |
369 | /* | ||
370 | * Data Alignment Setting - needs to be set to get | ||
371 | * left-justified data like all other sensors. | ||
372 | */ | ||
373 | .das = { | ||
374 | .addr = 0x21, | ||
375 | .mask = 0x01, | ||
376 | }, | ||
369 | .drdy_irq = { | 377 | .drdy_irq = { |
370 | .addr = 0x21, | 378 | .addr = 0x21, |
371 | .mask_int1 = 0x04, | 379 | .mask_int1 = 0x04, |
diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index 38bc319904c4..9c8b558ba19e 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig | |||
@@ -561,7 +561,7 @@ config TI_ADS8688 | |||
561 | 561 | ||
562 | config TI_AM335X_ADC | 562 | config TI_AM335X_ADC |
563 | tristate "TI's AM335X ADC driver" | 563 | tristate "TI's AM335X ADC driver" |
564 | depends on MFD_TI_AM335X_TSCADC | 564 | depends on MFD_TI_AM335X_TSCADC && HAS_DMA |
565 | select IIO_BUFFER | 565 | select IIO_BUFFER |
566 | select IIO_KFIFO_BUF | 566 | select IIO_KFIFO_BUF |
567 | help | 567 | help |
diff --git a/drivers/iio/common/st_sensors/st_sensors_buffer.c b/drivers/iio/common/st_sensors/st_sensors_buffer.c index fe7775bb3740..df4045203a07 100644 --- a/drivers/iio/common/st_sensors/st_sensors_buffer.c +++ b/drivers/iio/common/st_sensors/st_sensors_buffer.c | |||
@@ -30,7 +30,9 @@ static int st_sensors_get_buffer_element(struct iio_dev *indio_dev, u8 *buf) | |||
30 | 30 | ||
31 | for_each_set_bit(i, indio_dev->active_scan_mask, num_data_channels) { | 31 | for_each_set_bit(i, indio_dev->active_scan_mask, num_data_channels) { |
32 | const struct iio_chan_spec *channel = &indio_dev->channels[i]; | 32 | const struct iio_chan_spec *channel = &indio_dev->channels[i]; |
33 | unsigned int bytes_to_read = channel->scan_type.realbits >> 3; | 33 | unsigned int bytes_to_read = |
34 | DIV_ROUND_UP(channel->scan_type.realbits + | ||
35 | channel->scan_type.shift, 8); | ||
34 | unsigned int storage_bytes = | 36 | unsigned int storage_bytes = |
35 | channel->scan_type.storagebits >> 3; | 37 | channel->scan_type.storagebits >> 3; |
36 | 38 | ||
diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c index 975a1f19f747..79c8c7cd70d5 100644 --- a/drivers/iio/common/st_sensors/st_sensors_core.c +++ b/drivers/iio/common/st_sensors/st_sensors_core.c | |||
@@ -401,6 +401,15 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev, | |||
401 | return err; | 401 | return err; |
402 | } | 402 | } |
403 | 403 | ||
404 | /* set DAS */ | ||
405 | if (sdata->sensor_settings->das.addr) { | ||
406 | err = st_sensors_write_data_with_mask(indio_dev, | ||
407 | sdata->sensor_settings->das.addr, | ||
408 | sdata->sensor_settings->das.mask, 1); | ||
409 | if (err < 0) | ||
410 | return err; | ||
411 | } | ||
412 | |||
404 | if (sdata->int_pin_open_drain) { | 413 | if (sdata->int_pin_open_drain) { |
405 | dev_info(&indio_dev->dev, | 414 | dev_info(&indio_dev->dev, |
406 | "set interrupt line to open drain mode\n"); | 415 | "set interrupt line to open drain mode\n"); |
@@ -483,8 +492,10 @@ static int st_sensors_read_axis_data(struct iio_dev *indio_dev, | |||
483 | int err; | 492 | int err; |
484 | u8 *outdata; | 493 | u8 *outdata; |
485 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 494 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
486 | unsigned int byte_for_channel = ch->scan_type.realbits >> 3; | 495 | unsigned int byte_for_channel; |
487 | 496 | ||
497 | byte_for_channel = DIV_ROUND_UP(ch->scan_type.realbits + | ||
498 | ch->scan_type.shift, 8); | ||
488 | outdata = kmalloc(byte_for_channel, GFP_KERNEL); | 499 | outdata = kmalloc(byte_for_channel, GFP_KERNEL); |
489 | if (!outdata) | 500 | if (!outdata) |
490 | return -ENOMEM; | 501 | return -ENOMEM; |
diff --git a/drivers/iio/counter/104-quad-8.c b/drivers/iio/counter/104-quad-8.c index 2d2ee353dde7..a5913e97945e 100644 --- a/drivers/iio/counter/104-quad-8.c +++ b/drivers/iio/counter/104-quad-8.c | |||
@@ -153,7 +153,7 @@ static int quad8_write_raw(struct iio_dev *indio_dev, | |||
153 | ior_cfg = val | priv->preset_enable[chan->channel] << 1; | 153 | ior_cfg = val | priv->preset_enable[chan->channel] << 1; |
154 | 154 | ||
155 | /* Load I/O control configuration */ | 155 | /* Load I/O control configuration */ |
156 | outb(0x40 | ior_cfg, base_offset); | 156 | outb(0x40 | ior_cfg, base_offset + 1); |
157 | 157 | ||
158 | return 0; | 158 | return 0; |
159 | case IIO_CHAN_INFO_SCALE: | 159 | case IIO_CHAN_INFO_SCALE: |
@@ -233,7 +233,7 @@ static ssize_t quad8_read_set_to_preset_on_index(struct iio_dev *indio_dev, | |||
233 | const struct quad8_iio *const priv = iio_priv(indio_dev); | 233 | const struct quad8_iio *const priv = iio_priv(indio_dev); |
234 | 234 | ||
235 | return snprintf(buf, PAGE_SIZE, "%u\n", | 235 | return snprintf(buf, PAGE_SIZE, "%u\n", |
236 | priv->preset_enable[chan->channel]); | 236 | !priv->preset_enable[chan->channel]); |
237 | } | 237 | } |
238 | 238 | ||
239 | static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev, | 239 | static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev, |
@@ -241,7 +241,7 @@ static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev, | |||
241 | size_t len) | 241 | size_t len) |
242 | { | 242 | { |
243 | struct quad8_iio *const priv = iio_priv(indio_dev); | 243 | struct quad8_iio *const priv = iio_priv(indio_dev); |
244 | const int base_offset = priv->base + 2 * chan->channel; | 244 | const int base_offset = priv->base + 2 * chan->channel + 1; |
245 | bool preset_enable; | 245 | bool preset_enable; |
246 | int ret; | 246 | int ret; |
247 | unsigned int ior_cfg; | 247 | unsigned int ior_cfg; |
@@ -250,6 +250,9 @@ static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev, | |||
250 | if (ret) | 250 | if (ret) |
251 | return ret; | 251 | return ret; |
252 | 252 | ||
253 | /* Preset enable is active low in Input/Output Control register */ | ||
254 | preset_enable = !preset_enable; | ||
255 | |||
253 | priv->preset_enable[chan->channel] = preset_enable; | 256 | priv->preset_enable[chan->channel] = preset_enable; |
254 | 257 | ||
255 | ior_cfg = priv->ab_enable[chan->channel] | | 258 | ior_cfg = priv->ab_enable[chan->channel] | |
@@ -362,7 +365,7 @@ static int quad8_set_synchronous_mode(struct iio_dev *indio_dev, | |||
362 | priv->synchronous_mode[chan->channel] = synchronous_mode; | 365 | priv->synchronous_mode[chan->channel] = synchronous_mode; |
363 | 366 | ||
364 | /* Load Index Control configuration to Index Control Register */ | 367 | /* Load Index Control configuration to Index Control Register */ |
365 | outb(0x40 | idr_cfg, base_offset); | 368 | outb(0x60 | idr_cfg, base_offset); |
366 | 369 | ||
367 | return 0; | 370 | return 0; |
368 | } | 371 | } |
@@ -444,7 +447,7 @@ static int quad8_set_index_polarity(struct iio_dev *indio_dev, | |||
444 | priv->index_polarity[chan->channel] = index_polarity; | 447 | priv->index_polarity[chan->channel] = index_polarity; |
445 | 448 | ||
446 | /* Load Index Control configuration to Index Control Register */ | 449 | /* Load Index Control configuration to Index Control Register */ |
447 | outb(0x40 | idr_cfg, base_offset); | 450 | outb(0x60 | idr_cfg, base_offset); |
448 | 451 | ||
449 | return 0; | 452 | return 0; |
450 | } | 453 | } |
diff --git a/drivers/iio/imu/bmi160/bmi160_core.c b/drivers/iio/imu/bmi160/bmi160_core.c index 5355507f8fa1..c9e319bff58b 100644 --- a/drivers/iio/imu/bmi160/bmi160_core.c +++ b/drivers/iio/imu/bmi160/bmi160_core.c | |||
@@ -66,10 +66,8 @@ | |||
66 | 66 | ||
67 | #define BMI160_REG_DUMMY 0x7F | 67 | #define BMI160_REG_DUMMY 0x7F |
68 | 68 | ||
69 | #define BMI160_ACCEL_PMU_MIN_USLEEP 3200 | 69 | #define BMI160_ACCEL_PMU_MIN_USLEEP 3800 |
70 | #define BMI160_ACCEL_PMU_MAX_USLEEP 3800 | 70 | #define BMI160_GYRO_PMU_MIN_USLEEP 80000 |
71 | #define BMI160_GYRO_PMU_MIN_USLEEP 55000 | ||
72 | #define BMI160_GYRO_PMU_MAX_USLEEP 80000 | ||
73 | #define BMI160_SOFTRESET_USLEEP 1000 | 71 | #define BMI160_SOFTRESET_USLEEP 1000 |
74 | 72 | ||
75 | #define BMI160_CHANNEL(_type, _axis, _index) { \ | 73 | #define BMI160_CHANNEL(_type, _axis, _index) { \ |
@@ -151,20 +149,9 @@ static struct bmi160_regs bmi160_regs[] = { | |||
151 | }, | 149 | }, |
152 | }; | 150 | }; |
153 | 151 | ||
154 | struct bmi160_pmu_time { | 152 | static unsigned long bmi160_pmu_time[] = { |
155 | unsigned long min; | 153 | [BMI160_ACCEL] = BMI160_ACCEL_PMU_MIN_USLEEP, |
156 | unsigned long max; | 154 | [BMI160_GYRO] = BMI160_GYRO_PMU_MIN_USLEEP, |
157 | }; | ||
158 | |||
159 | static struct bmi160_pmu_time bmi160_pmu_time[] = { | ||
160 | [BMI160_ACCEL] = { | ||
161 | .min = BMI160_ACCEL_PMU_MIN_USLEEP, | ||
162 | .max = BMI160_ACCEL_PMU_MAX_USLEEP | ||
163 | }, | ||
164 | [BMI160_GYRO] = { | ||
165 | .min = BMI160_GYRO_PMU_MIN_USLEEP, | ||
166 | .max = BMI160_GYRO_PMU_MIN_USLEEP, | ||
167 | }, | ||
168 | }; | 155 | }; |
169 | 156 | ||
170 | struct bmi160_scale { | 157 | struct bmi160_scale { |
@@ -289,7 +276,7 @@ int bmi160_set_mode(struct bmi160_data *data, enum bmi160_sensor_type t, | |||
289 | if (ret < 0) | 276 | if (ret < 0) |
290 | return ret; | 277 | return ret; |
291 | 278 | ||
292 | usleep_range(bmi160_pmu_time[t].min, bmi160_pmu_time[t].max); | 279 | usleep_range(bmi160_pmu_time[t], bmi160_pmu_time[t] + 1000); |
293 | 280 | ||
294 | return 0; | 281 | return 0; |
295 | } | 282 | } |
diff --git a/drivers/iio/light/max44000.c b/drivers/iio/light/max44000.c index a144ca3461fc..81bd8e8da4a6 100644 --- a/drivers/iio/light/max44000.c +++ b/drivers/iio/light/max44000.c | |||
@@ -113,7 +113,7 @@ static const char max44000_int_time_avail_str[] = | |||
113 | "0.100 " | 113 | "0.100 " |
114 | "0.025 " | 114 | "0.025 " |
115 | "0.00625 " | 115 | "0.00625 " |
116 | "0.001625"; | 116 | "0.0015625"; |
117 | 117 | ||
118 | /* Available scales (internal to ulux) with pretty manual alignment: */ | 118 | /* Available scales (internal to ulux) with pretty manual alignment: */ |
119 | static const int max44000_scale_avail_ulux_array[] = { | 119 | static const int max44000_scale_avail_ulux_array[] = { |
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c index 8130dfe89745..4971aa54756a 100644 --- a/drivers/staging/octeon/ethernet.c +++ b/drivers/staging/octeon/ethernet.c | |||
@@ -770,6 +770,7 @@ static int cvm_oct_probe(struct platform_device *pdev) | |||
770 | /* Initialize the device private structure. */ | 770 | /* Initialize the device private structure. */ |
771 | struct octeon_ethernet *priv = netdev_priv(dev); | 771 | struct octeon_ethernet *priv = netdev_priv(dev); |
772 | 772 | ||
773 | SET_NETDEV_DEV(dev, &pdev->dev); | ||
773 | dev->netdev_ops = &cvm_oct_pow_netdev_ops; | 774 | dev->netdev_ops = &cvm_oct_pow_netdev_ops; |
774 | priv->imode = CVMX_HELPER_INTERFACE_MODE_DISABLED; | 775 | priv->imode = CVMX_HELPER_INTERFACE_MODE_DISABLED; |
775 | priv->port = CVMX_PIP_NUM_INPUT_PORTS; | 776 | priv->port = CVMX_PIP_NUM_INPUT_PORTS; |
@@ -816,6 +817,7 @@ static int cvm_oct_probe(struct platform_device *pdev) | |||
816 | } | 817 | } |
817 | 818 | ||
818 | /* Initialize the device private structure. */ | 819 | /* Initialize the device private structure. */ |
820 | SET_NETDEV_DEV(dev, &pdev->dev); | ||
819 | priv = netdev_priv(dev); | 821 | priv = netdev_priv(dev); |
820 | priv->netdev = dev; | 822 | priv->netdev = dev; |
821 | priv->of_node = cvm_oct_node_for_port(pip, interface, | 823 | priv->of_node = cvm_oct_node_for_port(pip, interface, |
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h index 228bd44efa4c..497f2b3a5a62 100644 --- a/include/linux/iio/common/st_sensors.h +++ b/include/linux/iio/common/st_sensors.h | |||
@@ -116,6 +116,16 @@ struct st_sensor_bdu { | |||
116 | }; | 116 | }; |
117 | 117 | ||
118 | /** | 118 | /** |
119 | * struct st_sensor_das - ST sensor device data alignment selection | ||
120 | * @addr: address of the register. | ||
121 | * @mask: mask to write the das flag for left alignment. | ||
122 | */ | ||
123 | struct st_sensor_das { | ||
124 | u8 addr; | ||
125 | u8 mask; | ||
126 | }; | ||
127 | |||
128 | /** | ||
119 | * struct st_sensor_data_ready_irq - ST sensor device data-ready interrupt | 129 | * struct st_sensor_data_ready_irq - ST sensor device data-ready interrupt |
120 | * @addr: address of the register. | 130 | * @addr: address of the register. |
121 | * @mask_int1: mask to enable/disable IRQ on INT1 pin. | 131 | * @mask_int1: mask to enable/disable IRQ on INT1 pin. |
@@ -185,6 +195,7 @@ struct st_sensor_transfer_function { | |||
185 | * @enable_axis: Enable one or more axis of the sensor. | 195 | * @enable_axis: Enable one or more axis of the sensor. |
186 | * @fs: Full scale register and full scale list available. | 196 | * @fs: Full scale register and full scale list available. |
187 | * @bdu: Block data update register. | 197 | * @bdu: Block data update register. |
198 | * @das: Data Alignment Selection register. | ||
188 | * @drdy_irq: Data ready register of the sensor. | 199 | * @drdy_irq: Data ready register of the sensor. |
189 | * @multi_read_bit: Use or not particular bit for [I2C/SPI] multi-read. | 200 | * @multi_read_bit: Use or not particular bit for [I2C/SPI] multi-read. |
190 | * @bootime: samples to discard when sensor passing from power-down to power-up. | 201 | * @bootime: samples to discard when sensor passing from power-down to power-up. |
@@ -200,6 +211,7 @@ struct st_sensor_settings { | |||
200 | struct st_sensor_axis enable_axis; | 211 | struct st_sensor_axis enable_axis; |
201 | struct st_sensor_fullscale fs; | 212 | struct st_sensor_fullscale fs; |
202 | struct st_sensor_bdu bdu; | 213 | struct st_sensor_bdu bdu; |
214 | struct st_sensor_das das; | ||
203 | struct st_sensor_data_ready_irq drdy_irq; | 215 | struct st_sensor_data_ready_irq drdy_irq; |
204 | bool multi_read_bit; | 216 | bool multi_read_bit; |
205 | unsigned int bootime; | 217 | unsigned int bootime; |