diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-09-25 04:58:22 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-09-25 04:58:22 -0400 |
commit | b2e312061c5e9f533c44487862dc405094bf250a (patch) | |
tree | 6e6d1fdfd04a926118a98bd0e366d54b2a2b5a28 | |
parent | ec14121931a24f8d3678b8a9c408adee3b21d465 (diff) | |
parent | f790923f146140a261ad211e5baf75d169f16fb2 (diff) |
Merge tag 'iio-fixes-for-4.14a' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-linus
Jonathan writes:
First round of IIO fixes for the 4.14 cycle
Note this includes fixes from recent merge window. As such the tree
is based on top of a prior staging/staging-next tree.
* iio core
- return and error for a failed read_reg debugfs call rather than
eating the error.
* ad7192
- Use the dedicated reset function in the ad_sigma_delta library
instead of an spi transfer with the data on the stack which
could cause problems with DMA.
* ad7793
- Implement a dedicate reset function in the ad_sigma_delta library
and use it to correctly reset this part.
* bme280
- ctrl_reg write must occur after any register writes
for updates to take effect.
* mcp320x
- negative voltage readout was broken.
- Fix an oops on module unload due to spi_set_drvdata not being called
in probe.
* st_magn
- Fix the data ready line configuration for the lis3mdl. It is not
configurable so the st_magn core was assuming it didn't exist
and so wasn't consuming interrupts resulting in an unhandled
interrupt.
* stm32-adc
- off by one error on max channels checking.
* stm32-timer
- preset should not be buffered - reorganising register writes avoids
this.
- fix a corner case in which write preset goes wrong when a timer is
used first as a trigger then as a counter with preset. Odd case but
you never know.
* ti-ads1015
- Fix setting of comparator polarity by fixing bitfield definition.
* twl4030
- Error path handling fix to cleanup in event of regulator
registration failure.
- Disable the vusb3v1 regulator correctly in error handling
- Don't paper over a regulator enable failure.
-rw-r--r-- | drivers/iio/adc/ad7793.c | 4 | ||||
-rw-r--r-- | drivers/iio/adc/ad_sigma_delta.c | 28 | ||||
-rw-r--r-- | drivers/iio/adc/mcp320x.c | 25 | ||||
-rw-r--r-- | drivers/iio/adc/stm32-adc.c | 2 | ||||
-rw-r--r-- | drivers/iio/adc/ti-ads1015.c | 8 | ||||
-rw-r--r-- | drivers/iio/adc/twl4030-madc.c | 14 | ||||
-rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_core.c | 11 | ||||
-rw-r--r-- | drivers/iio/industrialio-core.c | 4 | ||||
-rw-r--r-- | drivers/iio/magnetometer/st_magn_core.c | 4 | ||||
-rw-r--r-- | drivers/iio/pressure/bmp280-core.c | 2 | ||||
-rw-r--r-- | drivers/iio/trigger/stm32-timer-trigger.c | 4 | ||||
-rw-r--r-- | drivers/staging/iio/adc/ad7192.c | 4 | ||||
-rw-r--r-- | include/linux/iio/adc/ad_sigma_delta.h | 3 |
13 files changed, 87 insertions, 26 deletions
diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c index e6706a09e100..47c3d7f32900 100644 --- a/drivers/iio/adc/ad7793.c +++ b/drivers/iio/adc/ad7793.c | |||
@@ -257,7 +257,7 @@ static int ad7793_setup(struct iio_dev *indio_dev, | |||
257 | unsigned int vref_mv) | 257 | unsigned int vref_mv) |
258 | { | 258 | { |
259 | struct ad7793_state *st = iio_priv(indio_dev); | 259 | struct ad7793_state *st = iio_priv(indio_dev); |
260 | int i, ret = -1; | 260 | int i, ret; |
261 | unsigned long long scale_uv; | 261 | unsigned long long scale_uv; |
262 | u32 id; | 262 | u32 id; |
263 | 263 | ||
@@ -266,7 +266,7 @@ static int ad7793_setup(struct iio_dev *indio_dev, | |||
266 | return ret; | 266 | return ret; |
267 | 267 | ||
268 | /* reset the serial interface */ | 268 | /* reset the serial interface */ |
269 | ret = spi_write(st->sd.spi, (u8 *)&ret, sizeof(ret)); | 269 | ret = ad_sd_reset(&st->sd, 32); |
270 | if (ret < 0) | 270 | if (ret < 0) |
271 | goto out; | 271 | goto out; |
272 | usleep_range(500, 2000); /* Wait for at least 500us */ | 272 | usleep_range(500, 2000); /* Wait for at least 500us */ |
diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c index d10bd0c97233..22c4c17cd996 100644 --- a/drivers/iio/adc/ad_sigma_delta.c +++ b/drivers/iio/adc/ad_sigma_delta.c | |||
@@ -177,6 +177,34 @@ out: | |||
177 | } | 177 | } |
178 | EXPORT_SYMBOL_GPL(ad_sd_read_reg); | 178 | EXPORT_SYMBOL_GPL(ad_sd_read_reg); |
179 | 179 | ||
180 | /** | ||
181 | * ad_sd_reset() - Reset the serial interface | ||
182 | * | ||
183 | * @sigma_delta: The sigma delta device | ||
184 | * @reset_length: Number of SCLKs with DIN = 1 | ||
185 | * | ||
186 | * Returns 0 on success, an error code otherwise. | ||
187 | **/ | ||
188 | int ad_sd_reset(struct ad_sigma_delta *sigma_delta, | ||
189 | unsigned int reset_length) | ||
190 | { | ||
191 | uint8_t *buf; | ||
192 | unsigned int size; | ||
193 | int ret; | ||
194 | |||
195 | size = DIV_ROUND_UP(reset_length, 8); | ||
196 | buf = kcalloc(size, sizeof(*buf), GFP_KERNEL); | ||
197 | if (!buf) | ||
198 | return -ENOMEM; | ||
199 | |||
200 | memset(buf, 0xff, size); | ||
201 | ret = spi_write(sigma_delta->spi, buf, size); | ||
202 | kfree(buf); | ||
203 | |||
204 | return ret; | ||
205 | } | ||
206 | EXPORT_SYMBOL_GPL(ad_sd_reset); | ||
207 | |||
180 | static int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta, | 208 | static int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta, |
181 | unsigned int mode, unsigned int channel) | 209 | unsigned int mode, unsigned int channel) |
182 | { | 210 | { |
diff --git a/drivers/iio/adc/mcp320x.c b/drivers/iio/adc/mcp320x.c index 634717ae12f3..071dd23a33d9 100644 --- a/drivers/iio/adc/mcp320x.c +++ b/drivers/iio/adc/mcp320x.c | |||
@@ -17,6 +17,8 @@ | |||
17 | * MCP3204 | 17 | * MCP3204 |
18 | * MCP3208 | 18 | * MCP3208 |
19 | * ------------ | 19 | * ------------ |
20 | * 13 bit converter | ||
21 | * MCP3301 | ||
20 | * | 22 | * |
21 | * Datasheet can be found here: | 23 | * Datasheet can be found here: |
22 | * http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf mcp3001 | 24 | * http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf mcp3001 |
@@ -96,7 +98,7 @@ static int mcp320x_channel_to_tx_data(int device_index, | |||
96 | } | 98 | } |
97 | 99 | ||
98 | static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel, | 100 | static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel, |
99 | bool differential, int device_index) | 101 | bool differential, int device_index, int *val) |
100 | { | 102 | { |
101 | int ret; | 103 | int ret; |
102 | 104 | ||
@@ -117,19 +119,25 @@ static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel, | |||
117 | 119 | ||
118 | switch (device_index) { | 120 | switch (device_index) { |
119 | case mcp3001: | 121 | case mcp3001: |
120 | return (adc->rx_buf[0] << 5 | adc->rx_buf[1] >> 3); | 122 | *val = (adc->rx_buf[0] << 5 | adc->rx_buf[1] >> 3); |
123 | return 0; | ||
121 | case mcp3002: | 124 | case mcp3002: |
122 | case mcp3004: | 125 | case mcp3004: |
123 | case mcp3008: | 126 | case mcp3008: |
124 | return (adc->rx_buf[0] << 2 | adc->rx_buf[1] >> 6); | 127 | *val = (adc->rx_buf[0] << 2 | adc->rx_buf[1] >> 6); |
128 | return 0; | ||
125 | case mcp3201: | 129 | case mcp3201: |
126 | return (adc->rx_buf[0] << 7 | adc->rx_buf[1] >> 1); | 130 | *val = (adc->rx_buf[0] << 7 | adc->rx_buf[1] >> 1); |
131 | return 0; | ||
127 | case mcp3202: | 132 | case mcp3202: |
128 | case mcp3204: | 133 | case mcp3204: |
129 | case mcp3208: | 134 | case mcp3208: |
130 | return (adc->rx_buf[0] << 4 | adc->rx_buf[1] >> 4); | 135 | *val = (adc->rx_buf[0] << 4 | adc->rx_buf[1] >> 4); |
136 | return 0; | ||
131 | case mcp3301: | 137 | case mcp3301: |
132 | return sign_extend32((adc->rx_buf[0] & 0x1f) << 8 | adc->rx_buf[1], 12); | 138 | *val = sign_extend32((adc->rx_buf[0] & 0x1f) << 8 |
139 | | adc->rx_buf[1], 12); | ||
140 | return 0; | ||
133 | default: | 141 | default: |
134 | return -EINVAL; | 142 | return -EINVAL; |
135 | } | 143 | } |
@@ -150,12 +158,10 @@ static int mcp320x_read_raw(struct iio_dev *indio_dev, | |||
150 | switch (mask) { | 158 | switch (mask) { |
151 | case IIO_CHAN_INFO_RAW: | 159 | case IIO_CHAN_INFO_RAW: |
152 | ret = mcp320x_adc_conversion(adc, channel->address, | 160 | ret = mcp320x_adc_conversion(adc, channel->address, |
153 | channel->differential, device_index); | 161 | channel->differential, device_index, val); |
154 | |||
155 | if (ret < 0) | 162 | if (ret < 0) |
156 | goto out; | 163 | goto out; |
157 | 164 | ||
158 | *val = ret; | ||
159 | ret = IIO_VAL_INT; | 165 | ret = IIO_VAL_INT; |
160 | break; | 166 | break; |
161 | 167 | ||
@@ -312,6 +318,7 @@ static int mcp320x_probe(struct spi_device *spi) | |||
312 | indio_dev->name = spi_get_device_id(spi)->name; | 318 | indio_dev->name = spi_get_device_id(spi)->name; |
313 | indio_dev->modes = INDIO_DIRECT_MODE; | 319 | indio_dev->modes = INDIO_DIRECT_MODE; |
314 | indio_dev->info = &mcp320x_info; | 320 | indio_dev->info = &mcp320x_info; |
321 | spi_set_drvdata(spi, indio_dev); | ||
315 | 322 | ||
316 | chip_info = &mcp320x_chip_infos[spi_get_device_id(spi)->driver_data]; | 323 | chip_info = &mcp320x_chip_infos[spi_get_device_id(spi)->driver_data]; |
317 | indio_dev->channels = chip_info->channels; | 324 | indio_dev->channels = chip_info->channels; |
diff --git a/drivers/iio/adc/stm32-adc.c b/drivers/iio/adc/stm32-adc.c index e3c15f88075f..4df32cf1650e 100644 --- a/drivers/iio/adc/stm32-adc.c +++ b/drivers/iio/adc/stm32-adc.c | |||
@@ -1666,7 +1666,7 @@ static int stm32_adc_chan_of_init(struct iio_dev *indio_dev) | |||
1666 | 1666 | ||
1667 | num_channels = of_property_count_u32_elems(node, "st,adc-channels"); | 1667 | num_channels = of_property_count_u32_elems(node, "st,adc-channels"); |
1668 | if (num_channels < 0 || | 1668 | if (num_channels < 0 || |
1669 | num_channels >= adc_info->max_channels) { | 1669 | num_channels > adc_info->max_channels) { |
1670 | dev_err(&indio_dev->dev, "Bad st,adc-channels?\n"); | 1670 | dev_err(&indio_dev->dev, "Bad st,adc-channels?\n"); |
1671 | return num_channels < 0 ? num_channels : -EINVAL; | 1671 | return num_channels < 0 ? num_channels : -EINVAL; |
1672 | } | 1672 | } |
diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c index d1210024f6bc..e0dc20488335 100644 --- a/drivers/iio/adc/ti-ads1015.c +++ b/drivers/iio/adc/ti-ads1015.c | |||
@@ -52,7 +52,7 @@ | |||
52 | 52 | ||
53 | #define ADS1015_CFG_COMP_QUE_MASK GENMASK(1, 0) | 53 | #define ADS1015_CFG_COMP_QUE_MASK GENMASK(1, 0) |
54 | #define ADS1015_CFG_COMP_LAT_MASK BIT(2) | 54 | #define ADS1015_CFG_COMP_LAT_MASK BIT(2) |
55 | #define ADS1015_CFG_COMP_POL_MASK BIT(2) | 55 | #define ADS1015_CFG_COMP_POL_MASK BIT(3) |
56 | #define ADS1015_CFG_COMP_MODE_MASK BIT(4) | 56 | #define ADS1015_CFG_COMP_MODE_MASK BIT(4) |
57 | #define ADS1015_CFG_DR_MASK GENMASK(7, 5) | 57 | #define ADS1015_CFG_DR_MASK GENMASK(7, 5) |
58 | #define ADS1015_CFG_MOD_MASK BIT(8) | 58 | #define ADS1015_CFG_MOD_MASK BIT(8) |
@@ -1017,10 +1017,12 @@ static int ads1015_probe(struct i2c_client *client, | |||
1017 | 1017 | ||
1018 | switch (irq_trig) { | 1018 | switch (irq_trig) { |
1019 | case IRQF_TRIGGER_LOW: | 1019 | case IRQF_TRIGGER_LOW: |
1020 | cfg_comp |= ADS1015_CFG_COMP_POL_LOW; | 1020 | cfg_comp |= ADS1015_CFG_COMP_POL_LOW << |
1021 | ADS1015_CFG_COMP_POL_SHIFT; | ||
1021 | break; | 1022 | break; |
1022 | case IRQF_TRIGGER_HIGH: | 1023 | case IRQF_TRIGGER_HIGH: |
1023 | cfg_comp |= ADS1015_CFG_COMP_POL_HIGH; | 1024 | cfg_comp |= ADS1015_CFG_COMP_POL_HIGH << |
1025 | ADS1015_CFG_COMP_POL_SHIFT; | ||
1024 | break; | 1026 | break; |
1025 | default: | 1027 | default: |
1026 | return -EINVAL; | 1028 | return -EINVAL; |
diff --git a/drivers/iio/adc/twl4030-madc.c b/drivers/iio/adc/twl4030-madc.c index 1edd99f0c5e5..e3cfb91bffc6 100644 --- a/drivers/iio/adc/twl4030-madc.c +++ b/drivers/iio/adc/twl4030-madc.c | |||
@@ -887,21 +887,27 @@ static int twl4030_madc_probe(struct platform_device *pdev) | |||
887 | 887 | ||
888 | /* Enable 3v1 bias regulator for MADC[3:6] */ | 888 | /* Enable 3v1 bias regulator for MADC[3:6] */ |
889 | madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1"); | 889 | madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1"); |
890 | if (IS_ERR(madc->usb3v1)) | 890 | if (IS_ERR(madc->usb3v1)) { |
891 | return -ENODEV; | 891 | ret = -ENODEV; |
892 | goto err_i2c; | ||
893 | } | ||
892 | 894 | ||
893 | ret = regulator_enable(madc->usb3v1); | 895 | ret = regulator_enable(madc->usb3v1); |
894 | if (ret) | 896 | if (ret) { |
895 | dev_err(madc->dev, "could not enable 3v1 bias regulator\n"); | 897 | dev_err(madc->dev, "could not enable 3v1 bias regulator\n"); |
898 | goto err_i2c; | ||
899 | } | ||
896 | 900 | ||
897 | ret = iio_device_register(iio_dev); | 901 | ret = iio_device_register(iio_dev); |
898 | if (ret) { | 902 | if (ret) { |
899 | dev_err(&pdev->dev, "could not register iio device\n"); | 903 | dev_err(&pdev->dev, "could not register iio device\n"); |
900 | goto err_i2c; | 904 | goto err_usb3v1; |
901 | } | 905 | } |
902 | 906 | ||
903 | return 0; | 907 | return 0; |
904 | 908 | ||
909 | err_usb3v1: | ||
910 | regulator_disable(madc->usb3v1); | ||
905 | err_i2c: | 911 | err_i2c: |
906 | twl4030_madc_set_current_generator(madc, 0, 0); | 912 | twl4030_madc_set_current_generator(madc, 0, 0); |
907 | err_current_generator: | 913 | err_current_generator: |
diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c index d99bb1460fe2..02e833b14db0 100644 --- a/drivers/iio/common/st_sensors/st_sensors_core.c +++ b/drivers/iio/common/st_sensors/st_sensors_core.c | |||
@@ -463,8 +463,17 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable) | |||
463 | u8 drdy_mask; | 463 | u8 drdy_mask; |
464 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 464 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
465 | 465 | ||
466 | if (!sdata->sensor_settings->drdy_irq.addr) | 466 | if (!sdata->sensor_settings->drdy_irq.addr) { |
467 | /* | ||
468 | * there are some devices (e.g. LIS3MDL) where drdy line is | ||
469 | * routed to a given pin and it is not possible to select a | ||
470 | * different one. Take into account irq status register | ||
471 | * to understand if irq trigger can be properly supported | ||
472 | */ | ||
473 | if (sdata->sensor_settings->drdy_irq.addr_stat_drdy) | ||
474 | sdata->hw_irq_trigger = enable; | ||
467 | return 0; | 475 | return 0; |
476 | } | ||
468 | 477 | ||
469 | /* Enable/Disable the interrupt generator 1. */ | 478 | /* Enable/Disable the interrupt generator 1. */ |
470 | if (sdata->sensor_settings->drdy_irq.ig1.en_addr > 0) { | 479 | if (sdata->sensor_settings->drdy_irq.ig1.en_addr > 0) { |
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c index 17ec4cee51dc..a47428b4d31b 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c | |||
@@ -310,8 +310,10 @@ static ssize_t iio_debugfs_read_reg(struct file *file, char __user *userbuf, | |||
310 | ret = indio_dev->info->debugfs_reg_access(indio_dev, | 310 | ret = indio_dev->info->debugfs_reg_access(indio_dev, |
311 | indio_dev->cached_reg_addr, | 311 | indio_dev->cached_reg_addr, |
312 | 0, &val); | 312 | 0, &val); |
313 | if (ret) | 313 | if (ret) { |
314 | dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__); | 314 | dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__); |
315 | return ret; | ||
316 | } | ||
315 | 317 | ||
316 | len = snprintf(buf, sizeof(buf), "0x%X\n", val); | 318 | len = snprintf(buf, sizeof(buf), "0x%X\n", val); |
317 | 319 | ||
diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c index e68368b5b2a3..08aafba4481c 100644 --- a/drivers/iio/magnetometer/st_magn_core.c +++ b/drivers/iio/magnetometer/st_magn_core.c | |||
@@ -315,6 +315,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = { | |||
315 | }, | 315 | }, |
316 | }, | 316 | }, |
317 | }, | 317 | }, |
318 | .drdy_irq = { | ||
319 | /* drdy line is routed drdy pin */ | ||
320 | .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR, | ||
321 | }, | ||
318 | .multi_read_bit = true, | 322 | .multi_read_bit = true, |
319 | .bootime = 2, | 323 | .bootime = 2, |
320 | }, | 324 | }, |
diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c index 0d2ea3ee371b..8f26428804a2 100644 --- a/drivers/iio/pressure/bmp280-core.c +++ b/drivers/iio/pressure/bmp280-core.c | |||
@@ -573,7 +573,7 @@ static int bmp280_chip_config(struct bmp280_data *data) | |||
573 | u8 osrs = BMP280_OSRS_TEMP_X(data->oversampling_temp + 1) | | 573 | u8 osrs = BMP280_OSRS_TEMP_X(data->oversampling_temp + 1) | |
574 | BMP280_OSRS_PRESS_X(data->oversampling_press + 1); | 574 | BMP280_OSRS_PRESS_X(data->oversampling_press + 1); |
575 | 575 | ||
576 | ret = regmap_update_bits(data->regmap, BMP280_REG_CTRL_MEAS, | 576 | ret = regmap_write_bits(data->regmap, BMP280_REG_CTRL_MEAS, |
577 | BMP280_OSRS_TEMP_MASK | | 577 | BMP280_OSRS_TEMP_MASK | |
578 | BMP280_OSRS_PRESS_MASK | | 578 | BMP280_OSRS_PRESS_MASK | |
579 | BMP280_MODE_MASK, | 579 | BMP280_MODE_MASK, |
diff --git a/drivers/iio/trigger/stm32-timer-trigger.c b/drivers/iio/trigger/stm32-timer-trigger.c index 9b9053494daf..eb212f8c8879 100644 --- a/drivers/iio/trigger/stm32-timer-trigger.c +++ b/drivers/iio/trigger/stm32-timer-trigger.c | |||
@@ -174,6 +174,7 @@ static void stm32_timer_stop(struct stm32_timer_trigger *priv) | |||
174 | clk_disable(priv->clk); | 174 | clk_disable(priv->clk); |
175 | 175 | ||
176 | /* Stop timer */ | 176 | /* Stop timer */ |
177 | regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0); | ||
177 | regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0); | 178 | regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0); |
178 | regmap_write(priv->regmap, TIM_PSC, 0); | 179 | regmap_write(priv->regmap, TIM_PSC, 0); |
179 | regmap_write(priv->regmap, TIM_ARR, 0); | 180 | regmap_write(priv->regmap, TIM_ARR, 0); |
@@ -715,8 +716,9 @@ static ssize_t stm32_count_set_preset(struct iio_dev *indio_dev, | |||
715 | if (ret) | 716 | if (ret) |
716 | return ret; | 717 | return ret; |
717 | 718 | ||
719 | /* TIMx_ARR register shouldn't be buffered (ARPE=0) */ | ||
720 | regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0); | ||
718 | regmap_write(priv->regmap, TIM_ARR, preset); | 721 | regmap_write(priv->regmap, TIM_ARR, preset); |
719 | regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, TIM_CR1_ARPE); | ||
720 | 722 | ||
721 | return len; | 723 | return len; |
722 | } | 724 | } |
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c index d11c6de9c777..6150d2780e22 100644 --- a/drivers/staging/iio/adc/ad7192.c +++ b/drivers/staging/iio/adc/ad7192.c | |||
@@ -223,11 +223,9 @@ static int ad7192_setup(struct ad7192_state *st, | |||
223 | struct iio_dev *indio_dev = spi_get_drvdata(st->sd.spi); | 223 | struct iio_dev *indio_dev = spi_get_drvdata(st->sd.spi); |
224 | unsigned long long scale_uv; | 224 | unsigned long long scale_uv; |
225 | int i, ret, id; | 225 | int i, ret, id; |
226 | u8 ones[6]; | ||
227 | 226 | ||
228 | /* reset the serial interface */ | 227 | /* reset the serial interface */ |
229 | memset(&ones, 0xFF, 6); | 228 | ret = ad_sd_reset(&st->sd, 48); |
230 | ret = spi_write(st->sd.spi, &ones, 6); | ||
231 | if (ret < 0) | 229 | if (ret < 0) |
232 | goto out; | 230 | goto out; |
233 | usleep_range(500, 1000); /* Wait for at least 500us */ | 231 | usleep_range(500, 1000); /* Wait for at least 500us */ |
diff --git a/include/linux/iio/adc/ad_sigma_delta.h b/include/linux/iio/adc/ad_sigma_delta.h index 5ba430cc9a87..1fc7abd28b0b 100644 --- a/include/linux/iio/adc/ad_sigma_delta.h +++ b/include/linux/iio/adc/ad_sigma_delta.h | |||
@@ -111,6 +111,9 @@ int ad_sd_write_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg, | |||
111 | int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg, | 111 | int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg, |
112 | unsigned int size, unsigned int *val); | 112 | unsigned int size, unsigned int *val); |
113 | 113 | ||
114 | int ad_sd_reset(struct ad_sigma_delta *sigma_delta, | ||
115 | unsigned int reset_length); | ||
116 | |||
114 | int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev, | 117 | int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev, |
115 | const struct iio_chan_spec *chan, int *val); | 118 | const struct iio_chan_spec *chan, int *val); |
116 | int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta, | 119 | int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta, |