aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS1
-rw-r--r--drivers/iio/accel/st_accel_core.c12
-rw-r--r--drivers/iio/adc/Kconfig2
-rw-r--r--drivers/iio/common/st_sensors/st_sensors_buffer.c4
-rw-r--r--drivers/iio/common/st_sensors/st_sensors_core.c13
-rw-r--r--drivers/iio/counter/104-quad-8.c13
-rw-r--r--drivers/iio/imu/bmi160/bmi160_core.c25
-rw-r--r--drivers/iio/light/max44000.c2
-rw-r--r--drivers/staging/octeon/ethernet.c2
-rw-r--r--include/linux/iio/common/st_sensors.h12
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>
5507M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 5507M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
5508S: Maintained 5508S: Maintained
5509F: drivers/staging/greybus/ 5509F: drivers/staging/greybus/
5510L: greybus-dev@lists.linaro.org
5510 5511
5511GREYBUS AUDIO PROTOCOLS DRIVERS 5512GREYBUS AUDIO PROTOCOLS DRIVERS
5512M: Vaibhav Agarwal <vaibhav.sr@gmail.com> 5513M: 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
562config TI_AM335X_ADC 562config 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
239static ssize_t quad8_write_set_to_preset_on_index(struct iio_dev *indio_dev, 239static 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
154struct bmi160_pmu_time { 152static 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
159static 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
170struct bmi160_scale { 157struct 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: */
119static const int max44000_scale_avail_ulux_array[] = { 119static 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 */
123struct 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;