aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-07-17 14:30:59 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-07-17 14:30:59 -0400
commiteb254374a30cc53f976f2302f2198813a3b687ea (patch)
treec7dd0bef113136b084ac48a73f9c38eae833676a
parent2b3eb6e33723a0d2ce2b2a56dda8a793460d66cc (diff)
parentd309509f84725f99326cc73d3b00aae096b374ae (diff)
Merge tag 'staging-4.2-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
Pull staging and IIO driver fixes from Greg KH: "Here's some staging and IIO driver fixes for 4.2-rc3. Nothing major, the majority are IIO issues that were reported, with a few other minor staging driver fixes. All have been in linux-next for a while with no reported issues" * tag 'staging-4.2-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (25 commits) staging: vt6656: check ieee80211_bss_conf bssid not NULL staging: vt6655: check ieee80211_bss_conf bssid not NULL staging:lustre: remove irq.h from socklnd.h staging: make board support depend on OF_IRQ and CLKDEV_LOOKUP iio: tmp006: Check channel info on write iio: sx9500: Add missing init in sx9500_buffer_pre{en,dis}able() iio:light:ltr501: fix regmap dependency iio:light:ltr501: fix variable in ltr501_init iio: sx9500: fix bug in compensation code iio: sx9500: rework error handling of raw readings iio: magnetometer: mmc35240: fix available sampling frequencies iio:light:stk3310: Fix REGMAP_I2C dependency iio: light: STK3310: un-invert proximity values iio:adc:cc10001_adc: fix Kconfig dependency iio: light: tcs3414: Fix bug preventing to set integration time iio:accel:bmc150-accel: fix counting direction iio:light:cm3323: clear bitmask before set iio: adc: at91_adc: allow to use full range of startup time iio: DAC: ad5624r_spi: fix bit shift of output data value iio: proximity: sx9500: Fix proximity value ...
-rw-r--r--Documentation/ABI/testing/sysfs-bus-iio6
-rw-r--r--drivers/iio/accel/bmc150-accel.c2
-rw-r--r--drivers/iio/adc/Kconfig3
-rw-r--r--drivers/iio/adc/at91_adc.c8
-rw-r--r--drivers/iio/adc/rockchip_saradc.c4
-rw-r--r--drivers/iio/adc/twl4030-madc.c3
-rw-r--r--drivers/iio/common/hid-sensors/hid-sensor-trigger.c11
-rw-r--r--drivers/iio/dac/ad5624r_spi.c4
-rw-r--r--drivers/iio/imu/inv_mpu6050/inv_mpu_core.c18
-rw-r--r--drivers/iio/light/Kconfig2
-rw-r--r--drivers/iio/light/cm3323.c2
-rw-r--r--drivers/iio/light/ltr501.c2
-rw-r--r--drivers/iio/light/stk3310.c53
-rw-r--r--drivers/iio/light/tcs3414.c2
-rw-r--r--drivers/iio/magnetometer/mmc35240.c35
-rw-r--r--drivers/iio/proximity/sx9500.c28
-rw-r--r--drivers/iio/temperature/tmp006.c3
-rw-r--r--drivers/staging/board/Kconfig2
-rw-r--r--drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h1
-rw-r--r--drivers/staging/vt6655/device_main.c2
-rw-r--r--drivers/staging/vt6656/main_usb.c2
-rw-r--r--include/linux/hid-sensor-hub.h1
22 files changed, 109 insertions, 85 deletions
diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio
index bbed111c31b4..70c9b1ac66db 100644
--- a/Documentation/ABI/testing/sysfs-bus-iio
+++ b/Documentation/ABI/testing/sysfs-bus-iio
@@ -1234,10 +1234,8 @@ Description:
1234 object is near the sensor, usually be observing 1234 object is near the sensor, usually be observing
1235 reflectivity of infrared or ultrasound emitted. 1235 reflectivity of infrared or ultrasound emitted.
1236 Often these sensors are unit less and as such conversion 1236 Often these sensors are unit less and as such conversion
1237 to SI units is not possible. Where it is, the units should 1237 to SI units is not possible. Higher proximity measurements
1238 be meters. If such a conversion is not possible, the reported 1238 indicate closer objects, and vice versa.
1239 values should behave in the same way as a distance, i.e. lower
1240 values indicate something is closer to the sensor.
1241 1239
1242What: /sys/.../iio:deviceX/in_illuminance_input 1240What: /sys/.../iio:deviceX/in_illuminance_input
1243What: /sys/.../iio:deviceX/in_illuminance_raw 1241What: /sys/.../iio:deviceX/in_illuminance_raw
diff --git a/drivers/iio/accel/bmc150-accel.c b/drivers/iio/accel/bmc150-accel.c
index 4e70f51c2370..cc5a35750b50 100644
--- a/drivers/iio/accel/bmc150-accel.c
+++ b/drivers/iio/accel/bmc150-accel.c
@@ -1464,7 +1464,7 @@ static void bmc150_accel_unregister_triggers(struct bmc150_accel_data *data,
1464{ 1464{
1465 int i; 1465 int i;
1466 1466
1467 for (i = from; i >= 0; i++) { 1467 for (i = from; i >= 0; i--) {
1468 if (data->triggers[i].indio_trig) { 1468 if (data->triggers[i].indio_trig) {
1469 iio_trigger_unregister(data->triggers[i].indio_trig); 1469 iio_trigger_unregister(data->triggers[i].indio_trig);
1470 data->triggers[i].indio_trig = NULL; 1470 data->triggers[i].indio_trig = NULL;
diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
index 7c5565891cb8..eb0cd897714a 100644
--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -153,8 +153,7 @@ config DA9150_GPADC
153 153
154config CC10001_ADC 154config CC10001_ADC
155 tristate "Cosmic Circuits 10001 ADC driver" 155 tristate "Cosmic Circuits 10001 ADC driver"
156 depends on HAVE_CLK || REGULATOR 156 depends on HAS_IOMEM && HAVE_CLK && REGULATOR
157 depends on HAS_IOMEM
158 select IIO_BUFFER 157 select IIO_BUFFER
159 select IIO_TRIGGERED_BUFFER 158 select IIO_TRIGGERED_BUFFER
160 help 159 help
diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c
index 8a0eb4a04fb5..7b40925dd4ff 100644
--- a/drivers/iio/adc/at91_adc.c
+++ b/drivers/iio/adc/at91_adc.c
@@ -182,7 +182,7 @@ struct at91_adc_caps {
182 u8 ts_pen_detect_sensitivity; 182 u8 ts_pen_detect_sensitivity;
183 183
184 /* startup time calculate function */ 184 /* startup time calculate function */
185 u32 (*calc_startup_ticks)(u8 startup_time, u32 adc_clk_khz); 185 u32 (*calc_startup_ticks)(u32 startup_time, u32 adc_clk_khz);
186 186
187 u8 num_channels; 187 u8 num_channels;
188 struct at91_adc_reg_desc registers; 188 struct at91_adc_reg_desc registers;
@@ -201,7 +201,7 @@ struct at91_adc_state {
201 u8 num_channels; 201 u8 num_channels;
202 void __iomem *reg_base; 202 void __iomem *reg_base;
203 struct at91_adc_reg_desc *registers; 203 struct at91_adc_reg_desc *registers;
204 u8 startup_time; 204 u32 startup_time;
205 u8 sample_hold_time; 205 u8 sample_hold_time;
206 bool sleep_mode; 206 bool sleep_mode;
207 struct iio_trigger **trig; 207 struct iio_trigger **trig;
@@ -779,7 +779,7 @@ ret:
779 return ret; 779 return ret;
780} 780}
781 781
782static u32 calc_startup_ticks_9260(u8 startup_time, u32 adc_clk_khz) 782static u32 calc_startup_ticks_9260(u32 startup_time, u32 adc_clk_khz)
783{ 783{
784 /* 784 /*
785 * Number of ticks needed to cover the startup time of the ADC 785 * Number of ticks needed to cover the startup time of the ADC
@@ -790,7 +790,7 @@ static u32 calc_startup_ticks_9260(u8 startup_time, u32 adc_clk_khz)
790 return round_up((startup_time * adc_clk_khz / 1000) - 1, 8) / 8; 790 return round_up((startup_time * adc_clk_khz / 1000) - 1, 8) / 8;
791} 791}
792 792
793static u32 calc_startup_ticks_9x5(u8 startup_time, u32 adc_clk_khz) 793static u32 calc_startup_ticks_9x5(u32 startup_time, u32 adc_clk_khz)
794{ 794{
795 /* 795 /*
796 * For sama5d3x and at91sam9x5, the formula changes to: 796 * For sama5d3x and at91sam9x5, the formula changes to:
diff --git a/drivers/iio/adc/rockchip_saradc.c b/drivers/iio/adc/rockchip_saradc.c
index 8d4e019ea4ca..9c311c1e1ac7 100644
--- a/drivers/iio/adc/rockchip_saradc.c
+++ b/drivers/iio/adc/rockchip_saradc.c
@@ -349,3 +349,7 @@ static struct platform_driver rockchip_saradc_driver = {
349}; 349};
350 350
351module_platform_driver(rockchip_saradc_driver); 351module_platform_driver(rockchip_saradc_driver);
352
353MODULE_AUTHOR("Heiko Stuebner <heiko@sntech.de>");
354MODULE_DESCRIPTION("Rockchip SARADC driver");
355MODULE_LICENSE("GPL v2");
diff --git a/drivers/iio/adc/twl4030-madc.c b/drivers/iio/adc/twl4030-madc.c
index 06f4792240f0..ebe415f10640 100644
--- a/drivers/iio/adc/twl4030-madc.c
+++ b/drivers/iio/adc/twl4030-madc.c
@@ -833,7 +833,8 @@ static int twl4030_madc_probe(struct platform_device *pdev)
833 irq = platform_get_irq(pdev, 0); 833 irq = platform_get_irq(pdev, 0);
834 ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, 834 ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
835 twl4030_madc_threaded_irq_handler, 835 twl4030_madc_threaded_irq_handler,
836 IRQF_TRIGGER_RISING, "twl4030_madc", madc); 836 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
837 "twl4030_madc", madc);
837 if (ret) { 838 if (ret) {
838 dev_err(&pdev->dev, "could not request irq\n"); 839 dev_err(&pdev->dev, "could not request irq\n");
839 goto err_i2c; 840 goto err_i2c;
diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
index 610fc98f88ef..595511022795 100644
--- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
+++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
@@ -36,6 +36,8 @@ static int _hid_sensor_power_state(struct hid_sensor_common *st, bool state)
36 s32 poll_value = 0; 36 s32 poll_value = 0;
37 37
38 if (state) { 38 if (state) {
39 if (!atomic_read(&st->user_requested_state))
40 return 0;
39 if (sensor_hub_device_open(st->hsdev)) 41 if (sensor_hub_device_open(st->hsdev))
40 return -EIO; 42 return -EIO;
41 43
@@ -52,8 +54,12 @@ static int _hid_sensor_power_state(struct hid_sensor_common *st, bool state)
52 54
53 poll_value = hid_sensor_read_poll_value(st); 55 poll_value = hid_sensor_read_poll_value(st);
54 } else { 56 } else {
55 if (!atomic_dec_and_test(&st->data_ready)) 57 int val;
58
59 val = atomic_dec_if_positive(&st->data_ready);
60 if (val < 0)
56 return 0; 61 return 0;
62
57 sensor_hub_device_close(st->hsdev); 63 sensor_hub_device_close(st->hsdev);
58 state_val = hid_sensor_get_usage_index(st->hsdev, 64 state_val = hid_sensor_get_usage_index(st->hsdev,
59 st->power_state.report_id, 65 st->power_state.report_id,
@@ -92,9 +98,11 @@ EXPORT_SYMBOL(hid_sensor_power_state);
92 98
93int hid_sensor_power_state(struct hid_sensor_common *st, bool state) 99int hid_sensor_power_state(struct hid_sensor_common *st, bool state)
94{ 100{
101
95#ifdef CONFIG_PM 102#ifdef CONFIG_PM
96 int ret; 103 int ret;
97 104
105 atomic_set(&st->user_requested_state, state);
98 if (state) 106 if (state)
99 ret = pm_runtime_get_sync(&st->pdev->dev); 107 ret = pm_runtime_get_sync(&st->pdev->dev);
100 else { 108 else {
@@ -109,6 +117,7 @@ int hid_sensor_power_state(struct hid_sensor_common *st, bool state)
109 117
110 return 0; 118 return 0;
111#else 119#else
120 atomic_set(&st->user_requested_state, state);
112 return _hid_sensor_power_state(st, state); 121 return _hid_sensor_power_state(st, state);
113#endif 122#endif
114} 123}
diff --git a/drivers/iio/dac/ad5624r_spi.c b/drivers/iio/dac/ad5624r_spi.c
index 61bb9d4239ea..e98428df0d44 100644
--- a/drivers/iio/dac/ad5624r_spi.c
+++ b/drivers/iio/dac/ad5624r_spi.c
@@ -22,7 +22,7 @@
22#include "ad5624r.h" 22#include "ad5624r.h"
23 23
24static int ad5624r_spi_write(struct spi_device *spi, 24static int ad5624r_spi_write(struct spi_device *spi,
25 u8 cmd, u8 addr, u16 val, u8 len) 25 u8 cmd, u8 addr, u16 val, u8 shift)
26{ 26{
27 u32 data; 27 u32 data;
28 u8 msg[3]; 28 u8 msg[3];
@@ -35,7 +35,7 @@ static int ad5624r_spi_write(struct spi_device *spi,
35 * 14-, 12-bit input code followed by 0, 2, or 4 don't care bits, 35 * 14-, 12-bit input code followed by 0, 2, or 4 don't care bits,
36 * for the AD5664R, AD5644R, and AD5624R, respectively. 36 * for the AD5664R, AD5644R, and AD5624R, respectively.
37 */ 37 */
38 data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << (16 - len)); 38 data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << shift);
39 msg[0] = data >> 16; 39 msg[0] = data >> 16;
40 msg[1] = data >> 8; 40 msg[1] = data >> 8;
41 msg[2] = data; 41 msg[2] = data;
diff --git a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
index 17d4bb15be4d..65ce86837177 100644
--- a/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
+++ b/drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
@@ -431,6 +431,23 @@ static int inv_mpu6050_write_gyro_scale(struct inv_mpu6050_state *st, int val)
431 return -EINVAL; 431 return -EINVAL;
432} 432}
433 433
434static int inv_write_raw_get_fmt(struct iio_dev *indio_dev,
435 struct iio_chan_spec const *chan, long mask)
436{
437 switch (mask) {
438 case IIO_CHAN_INFO_SCALE:
439 switch (chan->type) {
440 case IIO_ANGL_VEL:
441 return IIO_VAL_INT_PLUS_NANO;
442 default:
443 return IIO_VAL_INT_PLUS_MICRO;
444 }
445 default:
446 return IIO_VAL_INT_PLUS_MICRO;
447 }
448
449 return -EINVAL;
450}
434static int inv_mpu6050_write_accel_scale(struct inv_mpu6050_state *st, int val) 451static int inv_mpu6050_write_accel_scale(struct inv_mpu6050_state *st, int val)
435{ 452{
436 int result, i; 453 int result, i;
@@ -696,6 +713,7 @@ static const struct iio_info mpu_info = {
696 .driver_module = THIS_MODULE, 713 .driver_module = THIS_MODULE,
697 .read_raw = &inv_mpu6050_read_raw, 714 .read_raw = &inv_mpu6050_read_raw,
698 .write_raw = &inv_mpu6050_write_raw, 715 .write_raw = &inv_mpu6050_write_raw,
716 .write_raw_get_fmt = &inv_write_raw_get_fmt,
699 .attrs = &inv_attribute_group, 717 .attrs = &inv_attribute_group,
700 .validate_trigger = inv_mpu6050_validate_trigger, 718 .validate_trigger = inv_mpu6050_validate_trigger,
701}; 719};
diff --git a/drivers/iio/light/Kconfig b/drivers/iio/light/Kconfig
index e6198b7c9cbf..a5c59251ec0e 100644
--- a/drivers/iio/light/Kconfig
+++ b/drivers/iio/light/Kconfig
@@ -188,6 +188,7 @@ config SENSORS_LM3533
188config LTR501 188config LTR501
189 tristate "LTR-501ALS-01 light sensor" 189 tristate "LTR-501ALS-01 light sensor"
190 depends on I2C 190 depends on I2C
191 select REGMAP_I2C
191 select IIO_BUFFER 192 select IIO_BUFFER
192 select IIO_TRIGGERED_BUFFER 193 select IIO_TRIGGERED_BUFFER
193 help 194 help
@@ -201,6 +202,7 @@ config LTR501
201config STK3310 202config STK3310
202 tristate "STK3310 ALS and proximity sensor" 203 tristate "STK3310 ALS and proximity sensor"
203 depends on I2C 204 depends on I2C
205 select REGMAP_I2C
204 help 206 help
205 Say yes here to get support for the Sensortek STK3310 ambient light 207 Say yes here to get support for the Sensortek STK3310 ambient light
206 and proximity sensor. The STK3311 model is also supported by this 208 and proximity sensor. The STK3311 model is also supported by this
diff --git a/drivers/iio/light/cm3323.c b/drivers/iio/light/cm3323.c
index 869033e48a1f..a1d4905cc9d2 100644
--- a/drivers/iio/light/cm3323.c
+++ b/drivers/iio/light/cm3323.c
@@ -123,7 +123,7 @@ static int cm3323_set_it_bits(struct cm3323_data *data, int val, int val2)
123 for (i = 0; i < ARRAY_SIZE(cm3323_int_time); i++) { 123 for (i = 0; i < ARRAY_SIZE(cm3323_int_time); i++) {
124 if (val == cm3323_int_time[i].val && 124 if (val == cm3323_int_time[i].val &&
125 val2 == cm3323_int_time[i].val2) { 125 val2 == cm3323_int_time[i].val2) {
126 reg_conf = data->reg_conf; 126 reg_conf = data->reg_conf & ~CM3323_CONF_IT_MASK;
127 reg_conf |= i << CM3323_CONF_IT_SHIFT; 127 reg_conf |= i << CM3323_CONF_IT_SHIFT;
128 128
129 ret = i2c_smbus_write_word_data(data->client, 129 ret = i2c_smbus_write_word_data(data->client,
diff --git a/drivers/iio/light/ltr501.c b/drivers/iio/light/ltr501.c
index 1ef7d3773ab9..b5a0e66b5f28 100644
--- a/drivers/iio/light/ltr501.c
+++ b/drivers/iio/light/ltr501.c
@@ -1302,7 +1302,7 @@ static int ltr501_init(struct ltr501_data *data)
1302 if (ret < 0) 1302 if (ret < 0)
1303 return ret; 1303 return ret;
1304 1304
1305 data->als_contr = ret | data->chip_info->als_mode_active; 1305 data->als_contr = status | data->chip_info->als_mode_active;
1306 1306
1307 ret = regmap_read(data->regmap, LTR501_PS_CONTR, &status); 1307 ret = regmap_read(data->regmap, LTR501_PS_CONTR, &status);
1308 if (ret < 0) 1308 if (ret < 0)
diff --git a/drivers/iio/light/stk3310.c b/drivers/iio/light/stk3310.c
index fee4297d7c8f..c1a218236be5 100644
--- a/drivers/iio/light/stk3310.c
+++ b/drivers/iio/light/stk3310.c
@@ -43,7 +43,6 @@
43#define STK3311_CHIP_ID_VAL 0x1D 43#define STK3311_CHIP_ID_VAL 0x1D
44#define STK3310_PSINT_EN 0x01 44#define STK3310_PSINT_EN 0x01
45#define STK3310_PS_MAX_VAL 0xFFFF 45#define STK3310_PS_MAX_VAL 0xFFFF
46#define STK3310_THRESH_MAX 0xFFFF
47 46
48#define STK3310_DRIVER_NAME "stk3310" 47#define STK3310_DRIVER_NAME "stk3310"
49#define STK3310_REGMAP_NAME "stk3310_regmap" 48#define STK3310_REGMAP_NAME "stk3310_regmap"
@@ -84,15 +83,13 @@ static const struct reg_field stk3310_reg_field_flag_psint =
84 REG_FIELD(STK3310_REG_FLAG, 4, 4); 83 REG_FIELD(STK3310_REG_FLAG, 4, 4);
85static const struct reg_field stk3310_reg_field_flag_nf = 84static const struct reg_field stk3310_reg_field_flag_nf =
86 REG_FIELD(STK3310_REG_FLAG, 0, 0); 85 REG_FIELD(STK3310_REG_FLAG, 0, 0);
87/* 86
88 * Maximum PS values with regard to scale. Used to export the 'inverse' 87/* Estimate maximum proximity values with regard to measurement scale. */
89 * PS value (high values for far objects, low values for near objects).
90 */
91static const int stk3310_ps_max[4] = { 88static const int stk3310_ps_max[4] = {
92 STK3310_PS_MAX_VAL / 64, 89 STK3310_PS_MAX_VAL / 640,
93 STK3310_PS_MAX_VAL / 16, 90 STK3310_PS_MAX_VAL / 160,
94 STK3310_PS_MAX_VAL / 4, 91 STK3310_PS_MAX_VAL / 40,
95 STK3310_PS_MAX_VAL, 92 STK3310_PS_MAX_VAL / 10
96}; 93};
97 94
98static const int stk3310_scale_table[][2] = { 95static const int stk3310_scale_table[][2] = {
@@ -128,14 +125,14 @@ static const struct iio_event_spec stk3310_events[] = {
128 /* Proximity event */ 125 /* Proximity event */
129 { 126 {
130 .type = IIO_EV_TYPE_THRESH, 127 .type = IIO_EV_TYPE_THRESH,
131 .dir = IIO_EV_DIR_FALLING, 128 .dir = IIO_EV_DIR_RISING,
132 .mask_separate = BIT(IIO_EV_INFO_VALUE) | 129 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
133 BIT(IIO_EV_INFO_ENABLE), 130 BIT(IIO_EV_INFO_ENABLE),
134 }, 131 },
135 /* Out-of-proximity event */ 132 /* Out-of-proximity event */
136 { 133 {
137 .type = IIO_EV_TYPE_THRESH, 134 .type = IIO_EV_TYPE_THRESH,
138 .dir = IIO_EV_DIR_RISING, 135 .dir = IIO_EV_DIR_FALLING,
139 .mask_separate = BIT(IIO_EV_INFO_VALUE) | 136 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
140 BIT(IIO_EV_INFO_ENABLE), 137 BIT(IIO_EV_INFO_ENABLE),
141 }, 138 },
@@ -205,23 +202,16 @@ static int stk3310_read_event(struct iio_dev *indio_dev,
205 u8 reg; 202 u8 reg;
206 u16 buf; 203 u16 buf;
207 int ret; 204 int ret;
208 unsigned int index;
209 struct stk3310_data *data = iio_priv(indio_dev); 205 struct stk3310_data *data = iio_priv(indio_dev);
210 206
211 if (info != IIO_EV_INFO_VALUE) 207 if (info != IIO_EV_INFO_VALUE)
212 return -EINVAL; 208 return -EINVAL;
213 209
214 /* 210 /* Only proximity interrupts are implemented at the moment. */
215 * Only proximity interrupts are implemented at the moment.
216 * Since we're inverting proximity values, the sensor's 'high'
217 * threshold will become our 'low' threshold, associated with
218 * 'near' events. Similarly, the sensor's 'low' threshold will
219 * be our 'high' threshold, associated with 'far' events.
220 */
221 if (dir == IIO_EV_DIR_RISING) 211 if (dir == IIO_EV_DIR_RISING)
222 reg = STK3310_REG_THDL_PS;
223 else if (dir == IIO_EV_DIR_FALLING)
224 reg = STK3310_REG_THDH_PS; 212 reg = STK3310_REG_THDH_PS;
213 else if (dir == IIO_EV_DIR_FALLING)
214 reg = STK3310_REG_THDL_PS;
225 else 215 else
226 return -EINVAL; 216 return -EINVAL;
227 217
@@ -232,8 +222,7 @@ static int stk3310_read_event(struct iio_dev *indio_dev,
232 dev_err(&data->client->dev, "register read failed\n"); 222 dev_err(&data->client->dev, "register read failed\n");
233 return ret; 223 return ret;
234 } 224 }
235 regmap_field_read(data->reg_ps_gain, &index); 225 *val = swab16(buf);
236 *val = swab16(stk3310_ps_max[index] - buf);
237 226
238 return IIO_VAL_INT; 227 return IIO_VAL_INT;
239} 228}
@@ -257,13 +246,13 @@ static int stk3310_write_event(struct iio_dev *indio_dev,
257 return -EINVAL; 246 return -EINVAL;
258 247
259 if (dir == IIO_EV_DIR_RISING) 248 if (dir == IIO_EV_DIR_RISING)
260 reg = STK3310_REG_THDL_PS;
261 else if (dir == IIO_EV_DIR_FALLING)
262 reg = STK3310_REG_THDH_PS; 249 reg = STK3310_REG_THDH_PS;
250 else if (dir == IIO_EV_DIR_FALLING)
251 reg = STK3310_REG_THDL_PS;
263 else 252 else
264 return -EINVAL; 253 return -EINVAL;
265 254
266 buf = swab16(stk3310_ps_max[index] - val); 255 buf = swab16(val);
267 ret = regmap_bulk_write(data->regmap, reg, &buf, 2); 256 ret = regmap_bulk_write(data->regmap, reg, &buf, 2);
268 if (ret < 0) 257 if (ret < 0)
269 dev_err(&client->dev, "failed to set PS threshold!\n"); 258 dev_err(&client->dev, "failed to set PS threshold!\n");
@@ -334,14 +323,6 @@ static int stk3310_read_raw(struct iio_dev *indio_dev,
334 return ret; 323 return ret;
335 } 324 }
336 *val = swab16(buf); 325 *val = swab16(buf);
337 if (chan->type == IIO_PROXIMITY) {
338 /*
339 * Invert the proximity data so we return low values
340 * for close objects and high values for far ones.
341 */
342 regmap_field_read(data->reg_ps_gain, &index);
343 *val = stk3310_ps_max[index] - *val;
344 }
345 mutex_unlock(&data->lock); 326 mutex_unlock(&data->lock);
346 return IIO_VAL_INT; 327 return IIO_VAL_INT;
347 case IIO_CHAN_INFO_INT_TIME: 328 case IIO_CHAN_INFO_INT_TIME:
@@ -581,8 +562,8 @@ static irqreturn_t stk3310_irq_event_handler(int irq, void *private)
581 } 562 }
582 event = IIO_UNMOD_EVENT_CODE(IIO_PROXIMITY, 1, 563 event = IIO_UNMOD_EVENT_CODE(IIO_PROXIMITY, 1,
583 IIO_EV_TYPE_THRESH, 564 IIO_EV_TYPE_THRESH,
584 (dir ? IIO_EV_DIR_RISING : 565 (dir ? IIO_EV_DIR_FALLING :
585 IIO_EV_DIR_FALLING)); 566 IIO_EV_DIR_RISING));
586 iio_push_event(indio_dev, event, data->timestamp); 567 iio_push_event(indio_dev, event, data->timestamp);
587 568
588 /* Reset the interrupt flag */ 569 /* Reset the interrupt flag */
diff --git a/drivers/iio/light/tcs3414.c b/drivers/iio/light/tcs3414.c
index 71c2bde275aa..f8b1df018abe 100644
--- a/drivers/iio/light/tcs3414.c
+++ b/drivers/iio/light/tcs3414.c
@@ -185,7 +185,7 @@ static int tcs3414_write_raw(struct iio_dev *indio_dev,
185 if (val != 0) 185 if (val != 0)
186 return -EINVAL; 186 return -EINVAL;
187 for (i = 0; i < ARRAY_SIZE(tcs3414_times); i++) { 187 for (i = 0; i < ARRAY_SIZE(tcs3414_times); i++) {
188 if (val == tcs3414_times[i] * 1000) { 188 if (val2 == tcs3414_times[i] * 1000) {
189 data->timing &= ~TCS3414_INTEG_MASK; 189 data->timing &= ~TCS3414_INTEG_MASK;
190 data->timing |= i; 190 data->timing |= i;
191 return i2c_smbus_write_byte_data( 191 return i2c_smbus_write_byte_data(
diff --git a/drivers/iio/magnetometer/mmc35240.c b/drivers/iio/magnetometer/mmc35240.c
index 7a2ea71c659a..d927397a6ef7 100644
--- a/drivers/iio/magnetometer/mmc35240.c
+++ b/drivers/iio/magnetometer/mmc35240.c
@@ -84,10 +84,10 @@
84#define MMC35240_OTP_START_ADDR 0x1B 84#define MMC35240_OTP_START_ADDR 0x1B
85 85
86enum mmc35240_resolution { 86enum mmc35240_resolution {
87 MMC35240_16_BITS_SLOW = 0, /* 100 Hz */ 87 MMC35240_16_BITS_SLOW = 0, /* 7.92 ms */
88 MMC35240_16_BITS_FAST, /* 200 Hz */ 88 MMC35240_16_BITS_FAST, /* 4.08 ms */
89 MMC35240_14_BITS, /* 333 Hz */ 89 MMC35240_14_BITS, /* 2.16 ms */
90 MMC35240_12_BITS, /* 666 Hz */ 90 MMC35240_12_BITS, /* 1.20 ms */
91}; 91};
92 92
93enum mmc35240_axis { 93enum mmc35240_axis {
@@ -100,22 +100,22 @@ static const struct {
100 int sens[3]; /* sensitivity per X, Y, Z axis */ 100 int sens[3]; /* sensitivity per X, Y, Z axis */
101 int nfo; /* null field output */ 101 int nfo; /* null field output */
102} mmc35240_props_table[] = { 102} mmc35240_props_table[] = {
103 /* 16 bits, 100Hz ODR */ 103 /* 16 bits, 125Hz ODR */
104 { 104 {
105 {1024, 1024, 1024}, 105 {1024, 1024, 1024},
106 32768, 106 32768,
107 }, 107 },
108 /* 16 bits, 200Hz ODR */ 108 /* 16 bits, 250Hz ODR */
109 { 109 {
110 {1024, 1024, 770}, 110 {1024, 1024, 770},
111 32768, 111 32768,
112 }, 112 },
113 /* 14 bits, 333Hz ODR */ 113 /* 14 bits, 450Hz ODR */
114 { 114 {
115 {256, 256, 193}, 115 {256, 256, 193},
116 8192, 116 8192,
117 }, 117 },
118 /* 12 bits, 666Hz ODR */ 118 /* 12 bits, 800Hz ODR */
119 { 119 {
120 {64, 64, 48}, 120 {64, 64, 48},
121 2048, 121 2048,
@@ -133,9 +133,15 @@ struct mmc35240_data {
133 int axis_scale[3]; 133 int axis_scale[3];
134}; 134};
135 135
136static const int mmc35240_samp_freq[] = {100, 200, 333, 666}; 136static const struct {
137 int val;
138 int val2;
139} mmc35240_samp_freq[] = { {1, 500000},
140 {13, 0},
141 {25, 0},
142 {50, 0} };
137 143
138static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("100 200 333 666"); 144static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("1.5 13 25 50");
139 145
140#define MMC35240_CHANNEL(_axis) { \ 146#define MMC35240_CHANNEL(_axis) { \
141 .type = IIO_MAGN, \ 147 .type = IIO_MAGN, \
@@ -168,7 +174,8 @@ static int mmc35240_get_samp_freq_index(struct mmc35240_data *data,
168 int i; 174 int i;
169 175
170 for (i = 0; i < ARRAY_SIZE(mmc35240_samp_freq); i++) 176 for (i = 0; i < ARRAY_SIZE(mmc35240_samp_freq); i++)
171 if (mmc35240_samp_freq[i] == val) 177 if (mmc35240_samp_freq[i].val == val &&
178 mmc35240_samp_freq[i].val2 == val2)
172 return i; 179 return i;
173 return -EINVAL; 180 return -EINVAL;
174} 181}
@@ -378,9 +385,9 @@ static int mmc35240_read_raw(struct iio_dev *indio_dev,
378 if (i < 0 || i >= ARRAY_SIZE(mmc35240_samp_freq)) 385 if (i < 0 || i >= ARRAY_SIZE(mmc35240_samp_freq))
379 return -EINVAL; 386 return -EINVAL;
380 387
381 *val = mmc35240_samp_freq[i]; 388 *val = mmc35240_samp_freq[i].val;
382 *val2 = 0; 389 *val2 = mmc35240_samp_freq[i].val2;
383 return IIO_VAL_INT; 390 return IIO_VAL_INT_PLUS_MICRO;
384 default: 391 default:
385 return -EINVAL; 392 return -EINVAL;
386 } 393 }
diff --git a/drivers/iio/proximity/sx9500.c b/drivers/iio/proximity/sx9500.c
index 2042e375f835..3d756bd8c703 100644
--- a/drivers/iio/proximity/sx9500.c
+++ b/drivers/iio/proximity/sx9500.c
@@ -80,6 +80,7 @@
80#define SX9500_COMPSTAT_MASK GENMASK(3, 0) 80#define SX9500_COMPSTAT_MASK GENMASK(3, 0)
81 81
82#define SX9500_NUM_CHANNELS 4 82#define SX9500_NUM_CHANNELS 4
83#define SX9500_CHAN_MASK GENMASK(SX9500_NUM_CHANNELS - 1, 0)
83 84
84struct sx9500_data { 85struct sx9500_data {
85 struct mutex mutex; 86 struct mutex mutex;
@@ -281,7 +282,7 @@ static int sx9500_read_prox_data(struct sx9500_data *data,
281 if (ret < 0) 282 if (ret < 0)
282 return ret; 283 return ret;
283 284
284 *val = 32767 - (s16)be16_to_cpu(regval); 285 *val = be16_to_cpu(regval);
285 286
286 return IIO_VAL_INT; 287 return IIO_VAL_INT;
287} 288}
@@ -329,27 +330,29 @@ static int sx9500_read_proximity(struct sx9500_data *data,
329 else 330 else
330 ret = sx9500_wait_for_sample(data); 331 ret = sx9500_wait_for_sample(data);
331 332
332 if (ret < 0)
333 return ret;
334
335 mutex_lock(&data->mutex); 333 mutex_lock(&data->mutex);
336 334
337 ret = sx9500_read_prox_data(data, chan, val);
338 if (ret < 0) 335 if (ret < 0)
339 goto out; 336 goto out_dec_data_rdy;
340 337
341 ret = sx9500_dec_chan_users(data, chan->channel); 338 ret = sx9500_read_prox_data(data, chan, val);
342 if (ret < 0) 339 if (ret < 0)
343 goto out; 340 goto out_dec_data_rdy;
344 341
345 ret = sx9500_dec_data_rdy_users(data); 342 ret = sx9500_dec_data_rdy_users(data);
346 if (ret < 0) 343 if (ret < 0)
344 goto out_dec_chan;
345
346 ret = sx9500_dec_chan_users(data, chan->channel);
347 if (ret < 0)
347 goto out; 348 goto out;
348 349
349 ret = IIO_VAL_INT; 350 ret = IIO_VAL_INT;
350 351
351 goto out; 352 goto out;
352 353
354out_dec_data_rdy:
355 sx9500_dec_data_rdy_users(data);
353out_dec_chan: 356out_dec_chan:
354 sx9500_dec_chan_users(data, chan->channel); 357 sx9500_dec_chan_users(data, chan->channel);
355out: 358out:
@@ -679,7 +682,7 @@ out:
679static int sx9500_buffer_preenable(struct iio_dev *indio_dev) 682static int sx9500_buffer_preenable(struct iio_dev *indio_dev)
680{ 683{
681 struct sx9500_data *data = iio_priv(indio_dev); 684 struct sx9500_data *data = iio_priv(indio_dev);
682 int ret, i; 685 int ret = 0, i;
683 686
684 mutex_lock(&data->mutex); 687 mutex_lock(&data->mutex);
685 688
@@ -703,7 +706,7 @@ static int sx9500_buffer_preenable(struct iio_dev *indio_dev)
703static int sx9500_buffer_predisable(struct iio_dev *indio_dev) 706static int sx9500_buffer_predisable(struct iio_dev *indio_dev)
704{ 707{
705 struct sx9500_data *data = iio_priv(indio_dev); 708 struct sx9500_data *data = iio_priv(indio_dev);
706 int ret, i; 709 int ret = 0, i;
707 710
708 iio_triggered_buffer_predisable(indio_dev); 711 iio_triggered_buffer_predisable(indio_dev);
709 712
@@ -800,8 +803,7 @@ static int sx9500_init_compensation(struct iio_dev *indio_dev)
800 unsigned int val; 803 unsigned int val;
801 804
802 ret = regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0, 805 ret = regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0,
803 GENMASK(SX9500_NUM_CHANNELS, 0), 806 SX9500_CHAN_MASK, SX9500_CHAN_MASK);
804 GENMASK(SX9500_NUM_CHANNELS, 0));
805 if (ret < 0) 807 if (ret < 0)
806 return ret; 808 return ret;
807 809
@@ -821,7 +823,7 @@ static int sx9500_init_compensation(struct iio_dev *indio_dev)
821 823
822out: 824out:
823 regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0, 825 regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0,
824 GENMASK(SX9500_NUM_CHANNELS, 0), 0); 826 SX9500_CHAN_MASK, 0);
825 return ret; 827 return ret;
826} 828}
827 829
diff --git a/drivers/iio/temperature/tmp006.c b/drivers/iio/temperature/tmp006.c
index fcc49f89b946..8f21f32f9739 100644
--- a/drivers/iio/temperature/tmp006.c
+++ b/drivers/iio/temperature/tmp006.c
@@ -132,6 +132,9 @@ static int tmp006_write_raw(struct iio_dev *indio_dev,
132 struct tmp006_data *data = iio_priv(indio_dev); 132 struct tmp006_data *data = iio_priv(indio_dev);
133 int i; 133 int i;
134 134
135 if (mask != IIO_CHAN_INFO_SAMP_FREQ)
136 return -EINVAL;
137
135 for (i = 0; i < ARRAY_SIZE(tmp006_freqs); i++) 138 for (i = 0; i < ARRAY_SIZE(tmp006_freqs); i++)
136 if ((val == tmp006_freqs[i][0]) && 139 if ((val == tmp006_freqs[i][0]) &&
137 (val2 == tmp006_freqs[i][1])) { 140 (val2 == tmp006_freqs[i][1])) {
diff --git a/drivers/staging/board/Kconfig b/drivers/staging/board/Kconfig
index b8ee81840666..3f287c48e082 100644
--- a/drivers/staging/board/Kconfig
+++ b/drivers/staging/board/Kconfig
@@ -1,6 +1,6 @@
1config STAGING_BOARD 1config STAGING_BOARD
2 bool "Staging Board Support" 2 bool "Staging Board Support"
3 depends on OF_ADDRESS 3 depends on OF_ADDRESS && OF_IRQ && CLKDEV_LOOKUP
4 help 4 help
5 Select to enable per-board staging support code. 5 Select to enable per-board staging support code.
6 6
diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h
index 7125eb955ae5..8a9d4a0de129 100644
--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h
+++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h
@@ -31,7 +31,6 @@
31#define DEBUG_PORTAL_ALLOC 31#define DEBUG_PORTAL_ALLOC
32#define DEBUG_SUBSYSTEM S_LND 32#define DEBUG_SUBSYSTEM S_LND
33 33
34#include <asm/irq.h>
35#include <linux/crc32.h> 34#include <linux/crc32.h>
36#include <linux/errno.h> 35#include <linux/errno.h>
37#include <linux/if.h> 36#include <linux/if.h>
diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c
index ed040fbb7df8..b0c8e235b982 100644
--- a/drivers/staging/vt6655/device_main.c
+++ b/drivers/staging/vt6655/device_main.c
@@ -1418,7 +1418,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw,
1418 1418
1419 priv->current_aid = conf->aid; 1419 priv->current_aid = conf->aid;
1420 1420
1421 if (changed & BSS_CHANGED_BSSID) { 1421 if (changed & BSS_CHANGED_BSSID && conf->bssid) {
1422 unsigned long flags; 1422 unsigned long flags;
1423 1423
1424 spin_lock_irqsave(&priv->lock, flags); 1424 spin_lock_irqsave(&priv->lock, flags);
diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
index f97323f19acf..af572d718135 100644
--- a/drivers/staging/vt6656/main_usb.c
+++ b/drivers/staging/vt6656/main_usb.c
@@ -701,7 +701,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw,
701 701
702 priv->current_aid = conf->aid; 702 priv->current_aid = conf->aid;
703 703
704 if (changed & BSS_CHANGED_BSSID) 704 if (changed & BSS_CHANGED_BSSID && conf->bssid)
705 vnt_mac_set_bssid_addr(priv, (u8 *)conf->bssid); 705 vnt_mac_set_bssid_addr(priv, (u8 *)conf->bssid);
706 706
707 707
diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h
index 0042bf330b99..c02b5ce6c5cd 100644
--- a/include/linux/hid-sensor-hub.h
+++ b/include/linux/hid-sensor-hub.h
@@ -230,6 +230,7 @@ struct hid_sensor_common {
230 struct platform_device *pdev; 230 struct platform_device *pdev;
231 unsigned usage_id; 231 unsigned usage_id;
232 atomic_t data_ready; 232 atomic_t data_ready;
233 atomic_t user_requested_state;
233 struct iio_trigger *trigger; 234 struct iio_trigger *trigger;
234 struct hid_sensor_hub_attribute_info poll; 235 struct hid_sensor_hub_attribute_info poll;
235 struct hid_sensor_hub_attribute_info report_state; 236 struct hid_sensor_hub_attribute_info report_state;