diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-05-13 14:51:14 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-05-13 14:51:14 -0400 |
commit | ec94efcdadab69f41d257a1054260f8295ab77ef (patch) | |
tree | 6287158245d80fa79b6017787d0bd762bad89c96 /drivers/iio | |
parent | 892c89d5d7ffd1bb794fe54d86c0eef18d215fab (diff) | |
parent | f0828ba96d02d4d4b197c531b34c662ee3c928df (diff) |
Merge tag 'iio-fixes-for-4.1a-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-linus
Jonathan writes:
The usual mixed bag of fixes for IIO in the 4.1 cycle.
Second version of this pull request as a small fix to a fix turned
up before Greg pulled it for a cc10001 patch near the top of the tree.
One core fix
* Set updated for a iio kfifo was incorrectly set to false during a failed
update, resulting in atttempts to repeat the failed operation appearing
to succeed.
This time I've decided to list the driver fixes in alphabetical order rather
than 'randomly'.
* axp288_adc - a recent change added a check for valid info masks when
reading channels from consumer drivers.
* bmp280 - temperature compensation was failing to read the tfine value, hence
causing a temperature of 0 to always be returned and incorrect presure
measurements.
* cc10001 - Fix channel number mapping when some channels are reserved for
remote CPUs. Fix an issue with the use of the power-up/power-down register
(basically wrong polarity). Fix an issue due to the missinterpretting the
return value from regulator_get_voltage. Add a delay before the start bit
as recommended for the hardware to avoid data corruption.
* hid pressure - fix channel spec of modfiied, but no modifier (which makes no
sense!)
* hid proximity - fix channel spec of modified, but no modifier (which makes
no sense!). Fix a memory leak in the probe function.
* mcp320x - occasional incorrect readings on dma using spi busses due to
cacheline corruption. Fixed by forcing ___cacheline_aligned for the buffers.
* mma9551 - buffer overrun fix (miss specified maximum length of buffers)
* mma9553 - endian fix on status message. Add an enable element for activity
channel. Input checking for activity period to avoid rather unpredictable
results.
* spmi-vadc - fix an overflow in the output value normalization seen on some
boards.
* st-snesors - oops due to use of a mutex that is not yet initialized during
probe.
* xilinx adc - Some wrong register addresses, a wrong address for vccaux
channel, incorrect scale on VREFP and incorrect sign on VREFN.
Diffstat (limited to 'drivers/iio')
-rw-r--r-- | drivers/iio/accel/mma9551_core.c | 21 | ||||
-rw-r--r-- | drivers/iio/accel/mma9553.c | 18 | ||||
-rw-r--r-- | drivers/iio/accel/st_accel_core.c | 1 | ||||
-rw-r--r-- | drivers/iio/adc/axp288_adc.c | 12 | ||||
-rw-r--r-- | drivers/iio/adc/cc10001_adc.c | 60 | ||||
-rw-r--r-- | drivers/iio/adc/mcp320x.c | 6 | ||||
-rw-r--r-- | drivers/iio/adc/qcom-spmi-vadc.c | 7 | ||||
-rw-r--r-- | drivers/iio/adc/xilinx-xadc-core.c | 5 | ||||
-rw-r--r-- | drivers/iio/adc/xilinx-xadc.h | 6 | ||||
-rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_core.c | 2 | ||||
-rw-r--r-- | drivers/iio/gyro/st_gyro_core.c | 1 | ||||
-rw-r--r-- | drivers/iio/kfifo_buf.c | 3 | ||||
-rw-r--r-- | drivers/iio/light/hid-sensor-prox.c | 12 | ||||
-rw-r--r-- | drivers/iio/magnetometer/st_magn_core.c | 1 | ||||
-rw-r--r-- | drivers/iio/pressure/bmp280.c | 1 | ||||
-rw-r--r-- | drivers/iio/pressure/hid-sensor-press.c | 2 | ||||
-rw-r--r-- | drivers/iio/pressure/st_pressure_core.c | 1 |
17 files changed, 93 insertions, 66 deletions
diff --git a/drivers/iio/accel/mma9551_core.c b/drivers/iio/accel/mma9551_core.c index 7f55a6d7cd03..c6d5a3a40b60 100644 --- a/drivers/iio/accel/mma9551_core.c +++ b/drivers/iio/accel/mma9551_core.c | |||
@@ -389,7 +389,12 @@ int mma9551_read_config_words(struct i2c_client *client, u8 app_id, | |||
389 | { | 389 | { |
390 | int ret, i; | 390 | int ret, i; |
391 | int len_words = len / sizeof(u16); | 391 | int len_words = len / sizeof(u16); |
392 | __be16 be_buf[MMA9551_MAX_MAILBOX_DATA_REGS]; | 392 | __be16 be_buf[MMA9551_MAX_MAILBOX_DATA_REGS / 2]; |
393 | |||
394 | if (len_words > ARRAY_SIZE(be_buf)) { | ||
395 | dev_err(&client->dev, "Invalid buffer size %d\n", len); | ||
396 | return -EINVAL; | ||
397 | } | ||
393 | 398 | ||
394 | ret = mma9551_transfer(client, app_id, MMA9551_CMD_READ_CONFIG, | 399 | ret = mma9551_transfer(client, app_id, MMA9551_CMD_READ_CONFIG, |
395 | reg, NULL, 0, (u8 *) be_buf, len); | 400 | reg, NULL, 0, (u8 *) be_buf, len); |
@@ -424,7 +429,12 @@ int mma9551_read_status_words(struct i2c_client *client, u8 app_id, | |||
424 | { | 429 | { |
425 | int ret, i; | 430 | int ret, i; |
426 | int len_words = len / sizeof(u16); | 431 | int len_words = len / sizeof(u16); |
427 | __be16 be_buf[MMA9551_MAX_MAILBOX_DATA_REGS]; | 432 | __be16 be_buf[MMA9551_MAX_MAILBOX_DATA_REGS / 2]; |
433 | |||
434 | if (len_words > ARRAY_SIZE(be_buf)) { | ||
435 | dev_err(&client->dev, "Invalid buffer size %d\n", len); | ||
436 | return -EINVAL; | ||
437 | } | ||
428 | 438 | ||
429 | ret = mma9551_transfer(client, app_id, MMA9551_CMD_READ_STATUS, | 439 | ret = mma9551_transfer(client, app_id, MMA9551_CMD_READ_STATUS, |
430 | reg, NULL, 0, (u8 *) be_buf, len); | 440 | reg, NULL, 0, (u8 *) be_buf, len); |
@@ -459,7 +469,12 @@ int mma9551_write_config_words(struct i2c_client *client, u8 app_id, | |||
459 | { | 469 | { |
460 | int i; | 470 | int i; |
461 | int len_words = len / sizeof(u16); | 471 | int len_words = len / sizeof(u16); |
462 | __be16 be_buf[MMA9551_MAX_MAILBOX_DATA_REGS]; | 472 | __be16 be_buf[(MMA9551_MAX_MAILBOX_DATA_REGS - 1) / 2]; |
473 | |||
474 | if (len_words > ARRAY_SIZE(be_buf)) { | ||
475 | dev_err(&client->dev, "Invalid buffer size %d\n", len); | ||
476 | return -EINVAL; | ||
477 | } | ||
463 | 478 | ||
464 | for (i = 0; i < len_words; i++) | 479 | for (i = 0; i < len_words; i++) |
465 | be_buf[i] = cpu_to_be16(buf[i]); | 480 | be_buf[i] = cpu_to_be16(buf[i]); |
diff --git a/drivers/iio/accel/mma9553.c b/drivers/iio/accel/mma9553.c index 2df1af7d43fc..365a109aaaef 100644 --- a/drivers/iio/accel/mma9553.c +++ b/drivers/iio/accel/mma9553.c | |||
@@ -54,6 +54,7 @@ | |||
54 | #define MMA9553_MASK_CONF_STEPCOALESCE GENMASK(7, 0) | 54 | #define MMA9553_MASK_CONF_STEPCOALESCE GENMASK(7, 0) |
55 | 55 | ||
56 | #define MMA9553_REG_CONF_ACTTHD 0x0E | 56 | #define MMA9553_REG_CONF_ACTTHD 0x0E |
57 | #define MMA9553_MAX_ACTTHD GENMASK(15, 0) | ||
57 | 58 | ||
58 | /* Pedometer status registers (R-only) */ | 59 | /* Pedometer status registers (R-only) */ |
59 | #define MMA9553_REG_STATUS 0x00 | 60 | #define MMA9553_REG_STATUS 0x00 |
@@ -316,22 +317,19 @@ static int mma9553_set_config(struct mma9553_data *data, u16 reg, | |||
316 | static int mma9553_read_activity_stepcnt(struct mma9553_data *data, | 317 | static int mma9553_read_activity_stepcnt(struct mma9553_data *data, |
317 | u8 *activity, u16 *stepcnt) | 318 | u8 *activity, u16 *stepcnt) |
318 | { | 319 | { |
319 | u32 status_stepcnt; | 320 | u16 buf[2]; |
320 | u16 status; | ||
321 | int ret; | 321 | int ret; |
322 | 322 | ||
323 | ret = mma9551_read_status_words(data->client, MMA9551_APPID_PEDOMETER, | 323 | ret = mma9551_read_status_words(data->client, MMA9551_APPID_PEDOMETER, |
324 | MMA9553_REG_STATUS, sizeof(u32), | 324 | MMA9553_REG_STATUS, sizeof(u32), buf); |
325 | (u16 *) &status_stepcnt); | ||
326 | if (ret < 0) { | 325 | if (ret < 0) { |
327 | dev_err(&data->client->dev, | 326 | dev_err(&data->client->dev, |
328 | "error reading status and stepcnt\n"); | 327 | "error reading status and stepcnt\n"); |
329 | return ret; | 328 | return ret; |
330 | } | 329 | } |
331 | 330 | ||
332 | status = status_stepcnt & MMA9553_MASK_CONF_WORD; | 331 | *activity = mma9553_get_bits(buf[0], MMA9553_MASK_STATUS_ACTIVITY); |
333 | *activity = mma9553_get_bits(status, MMA9553_MASK_STATUS_ACTIVITY); | 332 | *stepcnt = buf[1]; |
334 | *stepcnt = status_stepcnt >> 16; | ||
335 | 333 | ||
336 | return 0; | 334 | return 0; |
337 | } | 335 | } |
@@ -872,6 +870,9 @@ static int mma9553_write_event_value(struct iio_dev *indio_dev, | |||
872 | case IIO_EV_INFO_PERIOD: | 870 | case IIO_EV_INFO_PERIOD: |
873 | switch (chan->type) { | 871 | switch (chan->type) { |
874 | case IIO_ACTIVITY: | 872 | case IIO_ACTIVITY: |
873 | if (val < 0 || val > MMA9553_ACTIVITY_THD_TO_SEC( | ||
874 | MMA9553_MAX_ACTTHD)) | ||
875 | return -EINVAL; | ||
875 | mutex_lock(&data->mutex); | 876 | mutex_lock(&data->mutex); |
876 | ret = mma9553_set_config(data, MMA9553_REG_CONF_ACTTHD, | 877 | ret = mma9553_set_config(data, MMA9553_REG_CONF_ACTTHD, |
877 | &data->conf.actthd, | 878 | &data->conf.actthd, |
@@ -971,7 +972,8 @@ static const struct iio_chan_spec_ext_info mma9553_ext_info[] = { | |||
971 | .modified = 1, \ | 972 | .modified = 1, \ |
972 | .channel2 = _chan2, \ | 973 | .channel2 = _chan2, \ |
973 | .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), \ | 974 | .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), \ |
974 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBHEIGHT), \ | 975 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_CALIBHEIGHT) | \ |
976 | BIT(IIO_CHAN_INFO_ENABLE), \ | ||
975 | .event_spec = mma9553_activity_events, \ | 977 | .event_spec = mma9553_activity_events, \ |
976 | .num_event_specs = ARRAY_SIZE(mma9553_activity_events), \ | 978 | .num_event_specs = ARRAY_SIZE(mma9553_activity_events), \ |
977 | .ext_info = mma9553_ext_info, \ | 979 | .ext_info = mma9553_ext_info, \ |
diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c index 58d1d13d552a..211b13271c61 100644 --- a/drivers/iio/accel/st_accel_core.c +++ b/drivers/iio/accel/st_accel_core.c | |||
@@ -546,6 +546,7 @@ int st_accel_common_probe(struct iio_dev *indio_dev) | |||
546 | 546 | ||
547 | indio_dev->modes = INDIO_DIRECT_MODE; | 547 | indio_dev->modes = INDIO_DIRECT_MODE; |
548 | indio_dev->info = &accel_info; | 548 | indio_dev->info = &accel_info; |
549 | mutex_init(&adata->tb.buf_lock); | ||
549 | 550 | ||
550 | st_sensors_power_enable(indio_dev); | 551 | st_sensors_power_enable(indio_dev); |
551 | 552 | ||
diff --git a/drivers/iio/adc/axp288_adc.c b/drivers/iio/adc/axp288_adc.c index 08bcfb061ca5..56008a86b78f 100644 --- a/drivers/iio/adc/axp288_adc.c +++ b/drivers/iio/adc/axp288_adc.c | |||
@@ -53,39 +53,42 @@ static const struct iio_chan_spec const axp288_adc_channels[] = { | |||
53 | .channel = 0, | 53 | .channel = 0, |
54 | .address = AXP288_TS_ADC_H, | 54 | .address = AXP288_TS_ADC_H, |
55 | .datasheet_name = "TS_PIN", | 55 | .datasheet_name = "TS_PIN", |
56 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | ||
56 | }, { | 57 | }, { |
57 | .indexed = 1, | 58 | .indexed = 1, |
58 | .type = IIO_TEMP, | 59 | .type = IIO_TEMP, |
59 | .channel = 1, | 60 | .channel = 1, |
60 | .address = AXP288_PMIC_ADC_H, | 61 | .address = AXP288_PMIC_ADC_H, |
61 | .datasheet_name = "PMIC_TEMP", | 62 | .datasheet_name = "PMIC_TEMP", |
63 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | ||
62 | }, { | 64 | }, { |
63 | .indexed = 1, | 65 | .indexed = 1, |
64 | .type = IIO_TEMP, | 66 | .type = IIO_TEMP, |
65 | .channel = 2, | 67 | .channel = 2, |
66 | .address = AXP288_GP_ADC_H, | 68 | .address = AXP288_GP_ADC_H, |
67 | .datasheet_name = "GPADC", | 69 | .datasheet_name = "GPADC", |
70 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | ||
68 | }, { | 71 | }, { |
69 | .indexed = 1, | 72 | .indexed = 1, |
70 | .type = IIO_CURRENT, | 73 | .type = IIO_CURRENT, |
71 | .channel = 3, | 74 | .channel = 3, |
72 | .address = AXP20X_BATT_CHRG_I_H, | 75 | .address = AXP20X_BATT_CHRG_I_H, |
73 | .datasheet_name = "BATT_CHG_I", | 76 | .datasheet_name = "BATT_CHG_I", |
74 | .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), | 77 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), |
75 | }, { | 78 | }, { |
76 | .indexed = 1, | 79 | .indexed = 1, |
77 | .type = IIO_CURRENT, | 80 | .type = IIO_CURRENT, |
78 | .channel = 4, | 81 | .channel = 4, |
79 | .address = AXP20X_BATT_DISCHRG_I_H, | 82 | .address = AXP20X_BATT_DISCHRG_I_H, |
80 | .datasheet_name = "BATT_DISCHRG_I", | 83 | .datasheet_name = "BATT_DISCHRG_I", |
81 | .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), | 84 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), |
82 | }, { | 85 | }, { |
83 | .indexed = 1, | 86 | .indexed = 1, |
84 | .type = IIO_VOLTAGE, | 87 | .type = IIO_VOLTAGE, |
85 | .channel = 5, | 88 | .channel = 5, |
86 | .address = AXP20X_BATT_V_H, | 89 | .address = AXP20X_BATT_V_H, |
87 | .datasheet_name = "BATT_V", | 90 | .datasheet_name = "BATT_V", |
88 | .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), | 91 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), |
89 | }, | 92 | }, |
90 | }; | 93 | }; |
91 | 94 | ||
@@ -151,9 +154,6 @@ static int axp288_adc_read_raw(struct iio_dev *indio_dev, | |||
151 | chan->address)) | 154 | chan->address)) |
152 | dev_err(&indio_dev->dev, "TS pin restore\n"); | 155 | dev_err(&indio_dev->dev, "TS pin restore\n"); |
153 | break; | 156 | break; |
154 | case IIO_CHAN_INFO_PROCESSED: | ||
155 | ret = axp288_adc_read_channel(val, chan->address, info->regmap); | ||
156 | break; | ||
157 | default: | 157 | default: |
158 | ret = -EINVAL; | 158 | ret = -EINVAL; |
159 | } | 159 | } |
diff --git a/drivers/iio/adc/cc10001_adc.c b/drivers/iio/adc/cc10001_adc.c index 51e2a83c9404..115f6e99a7fa 100644 --- a/drivers/iio/adc/cc10001_adc.c +++ b/drivers/iio/adc/cc10001_adc.c | |||
@@ -35,8 +35,9 @@ | |||
35 | #define CC10001_ADC_EOC_SET BIT(0) | 35 | #define CC10001_ADC_EOC_SET BIT(0) |
36 | 36 | ||
37 | #define CC10001_ADC_CHSEL_SAMPLED 0x0c | 37 | #define CC10001_ADC_CHSEL_SAMPLED 0x0c |
38 | #define CC10001_ADC_POWER_UP 0x10 | 38 | #define CC10001_ADC_POWER_DOWN 0x10 |
39 | #define CC10001_ADC_POWER_UP_SET BIT(0) | 39 | #define CC10001_ADC_POWER_DOWN_SET BIT(0) |
40 | |||
40 | #define CC10001_ADC_DEBUG 0x14 | 41 | #define CC10001_ADC_DEBUG 0x14 |
41 | #define CC10001_ADC_DATA_COUNT 0x20 | 42 | #define CC10001_ADC_DATA_COUNT 0x20 |
42 | 43 | ||
@@ -62,7 +63,6 @@ struct cc10001_adc_device { | |||
62 | u16 *buf; | 63 | u16 *buf; |
63 | 64 | ||
64 | struct mutex lock; | 65 | struct mutex lock; |
65 | unsigned long channel_map; | ||
66 | unsigned int start_delay_ns; | 66 | unsigned int start_delay_ns; |
67 | unsigned int eoc_delay_ns; | 67 | unsigned int eoc_delay_ns; |
68 | }; | 68 | }; |
@@ -79,6 +79,18 @@ static inline u32 cc10001_adc_read_reg(struct cc10001_adc_device *adc_dev, | |||
79 | return readl(adc_dev->reg_base + reg); | 79 | return readl(adc_dev->reg_base + reg); |
80 | } | 80 | } |
81 | 81 | ||
82 | static void cc10001_adc_power_up(struct cc10001_adc_device *adc_dev) | ||
83 | { | ||
84 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_DOWN, 0); | ||
85 | ndelay(adc_dev->start_delay_ns); | ||
86 | } | ||
87 | |||
88 | static void cc10001_adc_power_down(struct cc10001_adc_device *adc_dev) | ||
89 | { | ||
90 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_DOWN, | ||
91 | CC10001_ADC_POWER_DOWN_SET); | ||
92 | } | ||
93 | |||
82 | static void cc10001_adc_start(struct cc10001_adc_device *adc_dev, | 94 | static void cc10001_adc_start(struct cc10001_adc_device *adc_dev, |
83 | unsigned int channel) | 95 | unsigned int channel) |
84 | { | 96 | { |
@@ -88,6 +100,7 @@ static void cc10001_adc_start(struct cc10001_adc_device *adc_dev, | |||
88 | val = (channel & CC10001_ADC_CH_MASK) | CC10001_ADC_MODE_SINGLE_CONV; | 100 | val = (channel & CC10001_ADC_CH_MASK) | CC10001_ADC_MODE_SINGLE_CONV; |
89 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_CONFIG, val); | 101 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_CONFIG, val); |
90 | 102 | ||
103 | udelay(1); | ||
91 | val = cc10001_adc_read_reg(adc_dev, CC10001_ADC_CONFIG); | 104 | val = cc10001_adc_read_reg(adc_dev, CC10001_ADC_CONFIG); |
92 | val = val | CC10001_ADC_START_CONV; | 105 | val = val | CC10001_ADC_START_CONV; |
93 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_CONFIG, val); | 106 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_CONFIG, val); |
@@ -129,6 +142,7 @@ static irqreturn_t cc10001_adc_trigger_h(int irq, void *p) | |||
129 | struct iio_dev *indio_dev; | 142 | struct iio_dev *indio_dev; |
130 | unsigned int delay_ns; | 143 | unsigned int delay_ns; |
131 | unsigned int channel; | 144 | unsigned int channel; |
145 | unsigned int scan_idx; | ||
132 | bool sample_invalid; | 146 | bool sample_invalid; |
133 | u16 *data; | 147 | u16 *data; |
134 | int i; | 148 | int i; |
@@ -139,20 +153,17 @@ static irqreturn_t cc10001_adc_trigger_h(int irq, void *p) | |||
139 | 153 | ||
140 | mutex_lock(&adc_dev->lock); | 154 | mutex_lock(&adc_dev->lock); |
141 | 155 | ||
142 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_UP, | 156 | cc10001_adc_power_up(adc_dev); |
143 | CC10001_ADC_POWER_UP_SET); | ||
144 | |||
145 | /* Wait for 8 (6+2) clock cycles before activating START */ | ||
146 | ndelay(adc_dev->start_delay_ns); | ||
147 | 157 | ||
148 | /* Calculate delay step for eoc and sampled data */ | 158 | /* Calculate delay step for eoc and sampled data */ |
149 | delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT; | 159 | delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT; |
150 | 160 | ||
151 | i = 0; | 161 | i = 0; |
152 | sample_invalid = false; | 162 | sample_invalid = false; |
153 | for_each_set_bit(channel, indio_dev->active_scan_mask, | 163 | for_each_set_bit(scan_idx, indio_dev->active_scan_mask, |
154 | indio_dev->masklength) { | 164 | indio_dev->masklength) { |
155 | 165 | ||
166 | channel = indio_dev->channels[scan_idx].channel; | ||
156 | cc10001_adc_start(adc_dev, channel); | 167 | cc10001_adc_start(adc_dev, channel); |
157 | 168 | ||
158 | data[i] = cc10001_adc_poll_done(indio_dev, channel, delay_ns); | 169 | data[i] = cc10001_adc_poll_done(indio_dev, channel, delay_ns); |
@@ -166,7 +177,7 @@ static irqreturn_t cc10001_adc_trigger_h(int irq, void *p) | |||
166 | } | 177 | } |
167 | 178 | ||
168 | done: | 179 | done: |
169 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_UP, 0); | 180 | cc10001_adc_power_down(adc_dev); |
170 | 181 | ||
171 | mutex_unlock(&adc_dev->lock); | 182 | mutex_unlock(&adc_dev->lock); |
172 | 183 | ||
@@ -185,11 +196,7 @@ static u16 cc10001_adc_read_raw_voltage(struct iio_dev *indio_dev, | |||
185 | unsigned int delay_ns; | 196 | unsigned int delay_ns; |
186 | u16 val; | 197 | u16 val; |
187 | 198 | ||
188 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_UP, | 199 | cc10001_adc_power_up(adc_dev); |
189 | CC10001_ADC_POWER_UP_SET); | ||
190 | |||
191 | /* Wait for 8 (6+2) clock cycles before activating START */ | ||
192 | ndelay(adc_dev->start_delay_ns); | ||
193 | 200 | ||
194 | /* Calculate delay step for eoc and sampled data */ | 201 | /* Calculate delay step for eoc and sampled data */ |
195 | delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT; | 202 | delay_ns = adc_dev->eoc_delay_ns / CC10001_MAX_POLL_COUNT; |
@@ -198,7 +205,7 @@ static u16 cc10001_adc_read_raw_voltage(struct iio_dev *indio_dev, | |||
198 | 205 | ||
199 | val = cc10001_adc_poll_done(indio_dev, chan->channel, delay_ns); | 206 | val = cc10001_adc_poll_done(indio_dev, chan->channel, delay_ns); |
200 | 207 | ||
201 | cc10001_adc_write_reg(adc_dev, CC10001_ADC_POWER_UP, 0); | 208 | cc10001_adc_power_down(adc_dev); |
202 | 209 | ||
203 | return val; | 210 | return val; |
204 | } | 211 | } |
@@ -224,7 +231,7 @@ static int cc10001_adc_read_raw(struct iio_dev *indio_dev, | |||
224 | 231 | ||
225 | case IIO_CHAN_INFO_SCALE: | 232 | case IIO_CHAN_INFO_SCALE: |
226 | ret = regulator_get_voltage(adc_dev->reg); | 233 | ret = regulator_get_voltage(adc_dev->reg); |
227 | if (ret) | 234 | if (ret < 0) |
228 | return ret; | 235 | return ret; |
229 | 236 | ||
230 | *val = ret / 1000; | 237 | *val = ret / 1000; |
@@ -255,22 +262,22 @@ static const struct iio_info cc10001_adc_info = { | |||
255 | .update_scan_mode = &cc10001_update_scan_mode, | 262 | .update_scan_mode = &cc10001_update_scan_mode, |
256 | }; | 263 | }; |
257 | 264 | ||
258 | static int cc10001_adc_channel_init(struct iio_dev *indio_dev) | 265 | static int cc10001_adc_channel_init(struct iio_dev *indio_dev, |
266 | unsigned long channel_map) | ||
259 | { | 267 | { |
260 | struct cc10001_adc_device *adc_dev = iio_priv(indio_dev); | ||
261 | struct iio_chan_spec *chan_array, *timestamp; | 268 | struct iio_chan_spec *chan_array, *timestamp; |
262 | unsigned int bit, idx = 0; | 269 | unsigned int bit, idx = 0; |
263 | 270 | ||
264 | indio_dev->num_channels = bitmap_weight(&adc_dev->channel_map, | 271 | indio_dev->num_channels = bitmap_weight(&channel_map, |
265 | CC10001_ADC_NUM_CHANNELS); | 272 | CC10001_ADC_NUM_CHANNELS) + 1; |
266 | 273 | ||
267 | chan_array = devm_kcalloc(&indio_dev->dev, indio_dev->num_channels + 1, | 274 | chan_array = devm_kcalloc(&indio_dev->dev, indio_dev->num_channels, |
268 | sizeof(struct iio_chan_spec), | 275 | sizeof(struct iio_chan_spec), |
269 | GFP_KERNEL); | 276 | GFP_KERNEL); |
270 | if (!chan_array) | 277 | if (!chan_array) |
271 | return -ENOMEM; | 278 | return -ENOMEM; |
272 | 279 | ||
273 | for_each_set_bit(bit, &adc_dev->channel_map, CC10001_ADC_NUM_CHANNELS) { | 280 | for_each_set_bit(bit, &channel_map, CC10001_ADC_NUM_CHANNELS) { |
274 | struct iio_chan_spec *chan = &chan_array[idx]; | 281 | struct iio_chan_spec *chan = &chan_array[idx]; |
275 | 282 | ||
276 | chan->type = IIO_VOLTAGE; | 283 | chan->type = IIO_VOLTAGE; |
@@ -305,6 +312,7 @@ static int cc10001_adc_probe(struct platform_device *pdev) | |||
305 | unsigned long adc_clk_rate; | 312 | unsigned long adc_clk_rate; |
306 | struct resource *res; | 313 | struct resource *res; |
307 | struct iio_dev *indio_dev; | 314 | struct iio_dev *indio_dev; |
315 | unsigned long channel_map; | ||
308 | int ret; | 316 | int ret; |
309 | 317 | ||
310 | indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc_dev)); | 318 | indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc_dev)); |
@@ -313,9 +321,9 @@ static int cc10001_adc_probe(struct platform_device *pdev) | |||
313 | 321 | ||
314 | adc_dev = iio_priv(indio_dev); | 322 | adc_dev = iio_priv(indio_dev); |
315 | 323 | ||
316 | adc_dev->channel_map = GENMASK(CC10001_ADC_NUM_CHANNELS - 1, 0); | 324 | channel_map = GENMASK(CC10001_ADC_NUM_CHANNELS - 1, 0); |
317 | if (!of_property_read_u32(node, "adc-reserved-channels", &ret)) | 325 | if (!of_property_read_u32(node, "adc-reserved-channels", &ret)) |
318 | adc_dev->channel_map &= ~ret; | 326 | channel_map &= ~ret; |
319 | 327 | ||
320 | adc_dev->reg = devm_regulator_get(&pdev->dev, "vref"); | 328 | adc_dev->reg = devm_regulator_get(&pdev->dev, "vref"); |
321 | if (IS_ERR(adc_dev->reg)) | 329 | if (IS_ERR(adc_dev->reg)) |
@@ -361,7 +369,7 @@ static int cc10001_adc_probe(struct platform_device *pdev) | |||
361 | adc_dev->start_delay_ns = adc_dev->eoc_delay_ns * CC10001_WAIT_CYCLES; | 369 | adc_dev->start_delay_ns = adc_dev->eoc_delay_ns * CC10001_WAIT_CYCLES; |
362 | 370 | ||
363 | /* Setup the ADC channels available on the device */ | 371 | /* Setup the ADC channels available on the device */ |
364 | ret = cc10001_adc_channel_init(indio_dev); | 372 | ret = cc10001_adc_channel_init(indio_dev, channel_map); |
365 | if (ret < 0) | 373 | if (ret < 0) |
366 | goto err_disable_clk; | 374 | goto err_disable_clk; |
367 | 375 | ||
diff --git a/drivers/iio/adc/mcp320x.c b/drivers/iio/adc/mcp320x.c index efbfd12a4bfd..8d9c9b9215dd 100644 --- a/drivers/iio/adc/mcp320x.c +++ b/drivers/iio/adc/mcp320x.c | |||
@@ -60,12 +60,12 @@ struct mcp320x { | |||
60 | struct spi_message msg; | 60 | struct spi_message msg; |
61 | struct spi_transfer transfer[2]; | 61 | struct spi_transfer transfer[2]; |
62 | 62 | ||
63 | u8 tx_buf; | ||
64 | u8 rx_buf[2]; | ||
65 | |||
66 | struct regulator *reg; | 63 | struct regulator *reg; |
67 | struct mutex lock; | 64 | struct mutex lock; |
68 | const struct mcp320x_chip_info *chip_info; | 65 | const struct mcp320x_chip_info *chip_info; |
66 | |||
67 | u8 tx_buf ____cacheline_aligned; | ||
68 | u8 rx_buf[2]; | ||
69 | }; | 69 | }; |
70 | 70 | ||
71 | static int mcp320x_channel_to_tx_data(int device_index, | 71 | static int mcp320x_channel_to_tx_data(int device_index, |
diff --git a/drivers/iio/adc/qcom-spmi-vadc.c b/drivers/iio/adc/qcom-spmi-vadc.c index 3211729bcb0b..0c4618b4d515 100644 --- a/drivers/iio/adc/qcom-spmi-vadc.c +++ b/drivers/iio/adc/qcom-spmi-vadc.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/iio/iio.h> | 18 | #include <linux/iio/iio.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
21 | #include <linux/math64.h> | ||
21 | #include <linux/module.h> | 22 | #include <linux/module.h> |
22 | #include <linux/of.h> | 23 | #include <linux/of.h> |
23 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
@@ -471,11 +472,11 @@ static s32 vadc_calibrate(struct vadc_priv *vadc, | |||
471 | const struct vadc_channel_prop *prop, u16 adc_code) | 472 | const struct vadc_channel_prop *prop, u16 adc_code) |
472 | { | 473 | { |
473 | const struct vadc_prescale_ratio *prescale; | 474 | const struct vadc_prescale_ratio *prescale; |
474 | s32 voltage; | 475 | s64 voltage; |
475 | 476 | ||
476 | voltage = adc_code - vadc->graph[prop->calibration].gnd; | 477 | voltage = adc_code - vadc->graph[prop->calibration].gnd; |
477 | voltage *= vadc->graph[prop->calibration].dx; | 478 | voltage *= vadc->graph[prop->calibration].dx; |
478 | voltage = voltage / vadc->graph[prop->calibration].dy; | 479 | voltage = div64_s64(voltage, vadc->graph[prop->calibration].dy); |
479 | 480 | ||
480 | if (prop->calibration == VADC_CALIB_ABSOLUTE) | 481 | if (prop->calibration == VADC_CALIB_ABSOLUTE) |
481 | voltage += vadc->graph[prop->calibration].dx; | 482 | voltage += vadc->graph[prop->calibration].dx; |
@@ -487,7 +488,7 @@ static s32 vadc_calibrate(struct vadc_priv *vadc, | |||
487 | 488 | ||
488 | voltage = voltage * prescale->den; | 489 | voltage = voltage * prescale->den; |
489 | 490 | ||
490 | return voltage / prescale->num; | 491 | return div64_s64(voltage, prescale->num); |
491 | } | 492 | } |
492 | 493 | ||
493 | static int vadc_decimation_from_dt(u32 value) | 494 | static int vadc_decimation_from_dt(u32 value) |
diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c index a221f7329b79..ce93bd8e3f68 100644 --- a/drivers/iio/adc/xilinx-xadc-core.c +++ b/drivers/iio/adc/xilinx-xadc-core.c | |||
@@ -856,6 +856,7 @@ static int xadc_read_raw(struct iio_dev *indio_dev, | |||
856 | switch (chan->address) { | 856 | switch (chan->address) { |
857 | case XADC_REG_VCCINT: | 857 | case XADC_REG_VCCINT: |
858 | case XADC_REG_VCCAUX: | 858 | case XADC_REG_VCCAUX: |
859 | case XADC_REG_VREFP: | ||
859 | case XADC_REG_VCCBRAM: | 860 | case XADC_REG_VCCBRAM: |
860 | case XADC_REG_VCCPINT: | 861 | case XADC_REG_VCCPINT: |
861 | case XADC_REG_VCCPAUX: | 862 | case XADC_REG_VCCPAUX: |
@@ -996,7 +997,7 @@ static const struct iio_event_spec xadc_voltage_events[] = { | |||
996 | .num_event_specs = (_alarm) ? ARRAY_SIZE(xadc_voltage_events) : 0, \ | 997 | .num_event_specs = (_alarm) ? ARRAY_SIZE(xadc_voltage_events) : 0, \ |
997 | .scan_index = (_scan_index), \ | 998 | .scan_index = (_scan_index), \ |
998 | .scan_type = { \ | 999 | .scan_type = { \ |
999 | .sign = 'u', \ | 1000 | .sign = ((_addr) == XADC_REG_VREFN) ? 's' : 'u', \ |
1000 | .realbits = 12, \ | 1001 | .realbits = 12, \ |
1001 | .storagebits = 16, \ | 1002 | .storagebits = 16, \ |
1002 | .shift = 4, \ | 1003 | .shift = 4, \ |
@@ -1008,7 +1009,7 @@ static const struct iio_event_spec xadc_voltage_events[] = { | |||
1008 | static const struct iio_chan_spec xadc_channels[] = { | 1009 | static const struct iio_chan_spec xadc_channels[] = { |
1009 | XADC_CHAN_TEMP(0, 8, XADC_REG_TEMP), | 1010 | XADC_CHAN_TEMP(0, 8, XADC_REG_TEMP), |
1010 | XADC_CHAN_VOLTAGE(0, 9, XADC_REG_VCCINT, "vccint", true), | 1011 | XADC_CHAN_VOLTAGE(0, 9, XADC_REG_VCCINT, "vccint", true), |
1011 | XADC_CHAN_VOLTAGE(1, 10, XADC_REG_VCCINT, "vccaux", true), | 1012 | XADC_CHAN_VOLTAGE(1, 10, XADC_REG_VCCAUX, "vccaux", true), |
1012 | XADC_CHAN_VOLTAGE(2, 14, XADC_REG_VCCBRAM, "vccbram", true), | 1013 | XADC_CHAN_VOLTAGE(2, 14, XADC_REG_VCCBRAM, "vccbram", true), |
1013 | XADC_CHAN_VOLTAGE(3, 5, XADC_REG_VCCPINT, "vccpint", true), | 1014 | XADC_CHAN_VOLTAGE(3, 5, XADC_REG_VCCPINT, "vccpint", true), |
1014 | XADC_CHAN_VOLTAGE(4, 6, XADC_REG_VCCPAUX, "vccpaux", true), | 1015 | XADC_CHAN_VOLTAGE(4, 6, XADC_REG_VCCPAUX, "vccpaux", true), |
diff --git a/drivers/iio/adc/xilinx-xadc.h b/drivers/iio/adc/xilinx-xadc.h index c7487e8d7f80..54adc5087210 100644 --- a/drivers/iio/adc/xilinx-xadc.h +++ b/drivers/iio/adc/xilinx-xadc.h | |||
@@ -145,9 +145,9 @@ static inline int xadc_write_adc_reg(struct xadc *xadc, unsigned int reg, | |||
145 | #define XADC_REG_MAX_VCCPINT 0x28 | 145 | #define XADC_REG_MAX_VCCPINT 0x28 |
146 | #define XADC_REG_MAX_VCCPAUX 0x29 | 146 | #define XADC_REG_MAX_VCCPAUX 0x29 |
147 | #define XADC_REG_MAX_VCCO_DDR 0x2a | 147 | #define XADC_REG_MAX_VCCO_DDR 0x2a |
148 | #define XADC_REG_MIN_VCCPINT 0x2b | 148 | #define XADC_REG_MIN_VCCPINT 0x2c |
149 | #define XADC_REG_MIN_VCCPAUX 0x2c | 149 | #define XADC_REG_MIN_VCCPAUX 0x2d |
150 | #define XADC_REG_MIN_VCCO_DDR 0x2d | 150 | #define XADC_REG_MIN_VCCO_DDR 0x2e |
151 | 151 | ||
152 | #define XADC_REG_CONF0 0x40 | 152 | #define XADC_REG_CONF0 0x40 |
153 | #define XADC_REG_CONF1 0x41 | 153 | #define XADC_REG_CONF1 0x41 |
diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c index edd13d2b4121..8dd0477e201c 100644 --- a/drivers/iio/common/st_sensors/st_sensors_core.c +++ b/drivers/iio/common/st_sensors/st_sensors_core.c | |||
@@ -304,8 +304,6 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev, | |||
304 | struct st_sensors_platform_data *of_pdata; | 304 | struct st_sensors_platform_data *of_pdata; |
305 | int err = 0; | 305 | int err = 0; |
306 | 306 | ||
307 | mutex_init(&sdata->tb.buf_lock); | ||
308 | |||
309 | /* If OF/DT pdata exists, it will take precedence of anything else */ | 307 | /* If OF/DT pdata exists, it will take precedence of anything else */ |
310 | of_pdata = st_sensors_of_probe(indio_dev->dev.parent, pdata); | 308 | of_pdata = st_sensors_of_probe(indio_dev->dev.parent, pdata); |
311 | if (of_pdata) | 309 | if (of_pdata) |
diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c index 21395f26d227..ffe96642b6d0 100644 --- a/drivers/iio/gyro/st_gyro_core.c +++ b/drivers/iio/gyro/st_gyro_core.c | |||
@@ -400,6 +400,7 @@ int st_gyro_common_probe(struct iio_dev *indio_dev) | |||
400 | 400 | ||
401 | indio_dev->modes = INDIO_DIRECT_MODE; | 401 | indio_dev->modes = INDIO_DIRECT_MODE; |
402 | indio_dev->info = &gyro_info; | 402 | indio_dev->info = &gyro_info; |
403 | mutex_init(&gdata->tb.buf_lock); | ||
403 | 404 | ||
404 | st_sensors_power_enable(indio_dev); | 405 | st_sensors_power_enable(indio_dev); |
405 | 406 | ||
diff --git a/drivers/iio/kfifo_buf.c b/drivers/iio/kfifo_buf.c index 847ca561afe0..55c267bbfd2f 100644 --- a/drivers/iio/kfifo_buf.c +++ b/drivers/iio/kfifo_buf.c | |||
@@ -38,7 +38,8 @@ static int iio_request_update_kfifo(struct iio_buffer *r) | |||
38 | kfifo_free(&buf->kf); | 38 | kfifo_free(&buf->kf); |
39 | ret = __iio_allocate_kfifo(buf, buf->buffer.bytes_per_datum, | 39 | ret = __iio_allocate_kfifo(buf, buf->buffer.bytes_per_datum, |
40 | buf->buffer.length); | 40 | buf->buffer.length); |
41 | buf->update_needed = false; | 41 | if (ret >= 0) |
42 | buf->update_needed = false; | ||
42 | } else { | 43 | } else { |
43 | kfifo_reset_out(&buf->kf); | 44 | kfifo_reset_out(&buf->kf); |
44 | } | 45 | } |
diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c index 91ecc46ffeaa..ef60bae738e3 100644 --- a/drivers/iio/light/hid-sensor-prox.c +++ b/drivers/iio/light/hid-sensor-prox.c | |||
@@ -43,8 +43,6 @@ struct prox_state { | |||
43 | static const struct iio_chan_spec prox_channels[] = { | 43 | static const struct iio_chan_spec prox_channels[] = { |
44 | { | 44 | { |
45 | .type = IIO_PROXIMITY, | 45 | .type = IIO_PROXIMITY, |
46 | .modified = 1, | ||
47 | .channel2 = IIO_NO_MOD, | ||
48 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | 46 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), |
49 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | | 47 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | |
50 | BIT(IIO_CHAN_INFO_SCALE) | | 48 | BIT(IIO_CHAN_INFO_SCALE) | |
@@ -253,7 +251,6 @@ static int hid_prox_probe(struct platform_device *pdev) | |||
253 | struct iio_dev *indio_dev; | 251 | struct iio_dev *indio_dev; |
254 | struct prox_state *prox_state; | 252 | struct prox_state *prox_state; |
255 | struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; | 253 | struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; |
256 | struct iio_chan_spec *channels; | ||
257 | 254 | ||
258 | indio_dev = devm_iio_device_alloc(&pdev->dev, | 255 | indio_dev = devm_iio_device_alloc(&pdev->dev, |
259 | sizeof(struct prox_state)); | 256 | sizeof(struct prox_state)); |
@@ -272,20 +269,21 @@ static int hid_prox_probe(struct platform_device *pdev) | |||
272 | return ret; | 269 | return ret; |
273 | } | 270 | } |
274 | 271 | ||
275 | channels = kmemdup(prox_channels, sizeof(prox_channels), GFP_KERNEL); | 272 | indio_dev->channels = kmemdup(prox_channels, sizeof(prox_channels), |
276 | if (!channels) { | 273 | GFP_KERNEL); |
274 | if (!indio_dev->channels) { | ||
277 | dev_err(&pdev->dev, "failed to duplicate channels\n"); | 275 | dev_err(&pdev->dev, "failed to duplicate channels\n"); |
278 | return -ENOMEM; | 276 | return -ENOMEM; |
279 | } | 277 | } |
280 | 278 | ||
281 | ret = prox_parse_report(pdev, hsdev, channels, | 279 | ret = prox_parse_report(pdev, hsdev, |
280 | (struct iio_chan_spec *)indio_dev->channels, | ||
282 | HID_USAGE_SENSOR_PROX, prox_state); | 281 | HID_USAGE_SENSOR_PROX, prox_state); |
283 | if (ret) { | 282 | if (ret) { |
284 | dev_err(&pdev->dev, "failed to setup attributes\n"); | 283 | dev_err(&pdev->dev, "failed to setup attributes\n"); |
285 | goto error_free_dev_mem; | 284 | goto error_free_dev_mem; |
286 | } | 285 | } |
287 | 286 | ||
288 | indio_dev->channels = channels; | ||
289 | indio_dev->num_channels = | 287 | indio_dev->num_channels = |
290 | ARRAY_SIZE(prox_channels); | 288 | ARRAY_SIZE(prox_channels); |
291 | indio_dev->dev.parent = &pdev->dev; | 289 | indio_dev->dev.parent = &pdev->dev; |
diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c index 8ade473f99fe..2e56f812a644 100644 --- a/drivers/iio/magnetometer/st_magn_core.c +++ b/drivers/iio/magnetometer/st_magn_core.c | |||
@@ -369,6 +369,7 @@ int st_magn_common_probe(struct iio_dev *indio_dev) | |||
369 | 369 | ||
370 | indio_dev->modes = INDIO_DIRECT_MODE; | 370 | indio_dev->modes = INDIO_DIRECT_MODE; |
371 | indio_dev->info = &magn_info; | 371 | indio_dev->info = &magn_info; |
372 | mutex_init(&mdata->tb.buf_lock); | ||
372 | 373 | ||
373 | st_sensors_power_enable(indio_dev); | 374 | st_sensors_power_enable(indio_dev); |
374 | 375 | ||
diff --git a/drivers/iio/pressure/bmp280.c b/drivers/iio/pressure/bmp280.c index 7c623e2bd633..a2602d8dd6d5 100644 --- a/drivers/iio/pressure/bmp280.c +++ b/drivers/iio/pressure/bmp280.c | |||
@@ -172,6 +172,7 @@ static s32 bmp280_compensate_temp(struct bmp280_data *data, | |||
172 | var2 = (((((adc_temp >> 4) - ((s32)le16_to_cpu(buf[T1]))) * | 172 | var2 = (((((adc_temp >> 4) - ((s32)le16_to_cpu(buf[T1]))) * |
173 | ((adc_temp >> 4) - ((s32)le16_to_cpu(buf[T1])))) >> 12) * | 173 | ((adc_temp >> 4) - ((s32)le16_to_cpu(buf[T1])))) >> 12) * |
174 | ((s32)(s16)le16_to_cpu(buf[T3]))) >> 14; | 174 | ((s32)(s16)le16_to_cpu(buf[T3]))) >> 14; |
175 | data->t_fine = var1 + var2; | ||
175 | 176 | ||
176 | return (data->t_fine * 5 + 128) >> 8; | 177 | return (data->t_fine * 5 + 128) >> 8; |
177 | } | 178 | } |
diff --git a/drivers/iio/pressure/hid-sensor-press.c b/drivers/iio/pressure/hid-sensor-press.c index 7bb8d4c1f7df..3cf0bd67d24c 100644 --- a/drivers/iio/pressure/hid-sensor-press.c +++ b/drivers/iio/pressure/hid-sensor-press.c | |||
@@ -47,8 +47,6 @@ struct press_state { | |||
47 | static const struct iio_chan_spec press_channels[] = { | 47 | static const struct iio_chan_spec press_channels[] = { |
48 | { | 48 | { |
49 | .type = IIO_PRESSURE, | 49 | .type = IIO_PRESSURE, |
50 | .modified = 1, | ||
51 | .channel2 = IIO_NO_MOD, | ||
52 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), | 50 | .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), |
53 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | | 51 | .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | |
54 | BIT(IIO_CHAN_INFO_SCALE) | | 52 | BIT(IIO_CHAN_INFO_SCALE) | |
diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c index 97baf40d424b..e881fa6291e9 100644 --- a/drivers/iio/pressure/st_pressure_core.c +++ b/drivers/iio/pressure/st_pressure_core.c | |||
@@ -417,6 +417,7 @@ int st_press_common_probe(struct iio_dev *indio_dev) | |||
417 | 417 | ||
418 | indio_dev->modes = INDIO_DIRECT_MODE; | 418 | indio_dev->modes = INDIO_DIRECT_MODE; |
419 | indio_dev->info = &press_info; | 419 | indio_dev->info = &press_info; |
420 | mutex_init(&press_data->tb.buf_lock); | ||
420 | 421 | ||
421 | st_sensors_power_enable(indio_dev); | 422 | st_sensors_power_enable(indio_dev); |
422 | 423 | ||