diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-10-03 12:22:11 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-10-03 12:22:11 -0400 |
| commit | 08bbc4fcf7c4d6e879b10733a1f59ca3c2d22f4b (patch) | |
| tree | f1a42fe2e913d25efb4216e80a408e9f613de5af | |
| parent | c4142ed6029f06ab3a13bec1b07eaa01221772fc (diff) | |
| parent | b2e312061c5e9f533c44487862dc405094bf250a (diff) | |
Merge tag 'staging-4.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
Pull staging/IIO fixes from Greg KH:
"Here are some small staging/IIO driver fixes for 4.14-rc4
Most of these have been in my tree for a while due to travels, sorry
for the delay. They resolve a number of small issues reported by
people, mostly for the iio drivers. Nothing major in here, full
details are in the shortlog.
All have been linux-next for a few weeks with no reported issues"
* tag 'staging-4.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (23 commits)
staging: iio: ad7192: Fix - use the dedicated reset function avoiding dma from stack.
iio: core: Return error for failed read_reg
iio: ad7793: Fix the serial interface reset
iio: ad_sigma_delta: Implement a dedicated reset function
IIO: BME280: Updates to Humidity readings need ctrl_reg write!
iio: adc: mcp320x: Fix readout of negative voltages
iio: adc: mcp320x: Fix oops on module unload
iio: adc: stm32: fix bad error check on max_channels
iio: trigger: stm32-timer: fix a corner case to write preset
iio: trigger: stm32-timer: preset shouldn't be buffered
iio: adc: twl4030: Return an error if we can not enable the vusb3v1 regulator in 'twl4030_madc_probe()'
iio: adc: twl4030: Disable the vusb3v1 rugulator in the error handling path of 'twl4030_madc_probe()'
iio: adc: twl4030: Fix an error handling path in 'twl4030_madc_probe()'
staging: rtl8723bs: avoid null pointer dereference on pmlmepriv
staging: rtl8723bs: add missing range check on id
staging: vchiq_2835_arm: Fix NULL ptr dereference in free_pagelist
staging: speakup: fix speakup-r empty line lockup
staging: pi433: Move limit check to switch default to kill warning
staging: r8822be: fix null pointer dereferences with a null driver_adapter
staging: mt29f_spinand: Enable the read ECC before program the page
...
22 files changed, 126 insertions, 51 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/drivers/staging/mt29f_spinand/mt29f_spinand.c b/drivers/staging/mt29f_spinand/mt29f_spinand.c index 13eaf16ecd16..87595c594b12 100644 --- a/drivers/staging/mt29f_spinand/mt29f_spinand.c +++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c | |||
| @@ -496,8 +496,12 @@ static int spinand_program_page(struct spi_device *spi_nand, | |||
| 496 | if (!wbuf) | 496 | if (!wbuf) |
| 497 | return -ENOMEM; | 497 | return -ENOMEM; |
| 498 | 498 | ||
| 499 | enable_read_hw_ecc = 0; | 499 | enable_read_hw_ecc = 1; |
| 500 | spinand_read_page(spi_nand, page_id, 0, CACHE_BUF, wbuf); | 500 | retval = spinand_read_page(spi_nand, page_id, 0, CACHE_BUF, wbuf); |
| 501 | if (retval < 0) { | ||
| 502 | dev_err(&spi_nand->dev, "ecc error on read page!!!\n"); | ||
| 503 | return retval; | ||
| 504 | } | ||
| 501 | 505 | ||
| 502 | for (i = offset, j = 0; i < len; i++, j++) | 506 | for (i = offset, j = 0; i < len; i++, j++) |
| 503 | wbuf[i] &= buf[j]; | 507 | wbuf[i] &= buf[j]; |
diff --git a/drivers/staging/pi433/rf69.c b/drivers/staging/pi433/rf69.c index c4b1b218ea38..290b419aa9dd 100644 --- a/drivers/staging/pi433/rf69.c +++ b/drivers/staging/pi433/rf69.c | |||
| @@ -570,12 +570,6 @@ int rf69_set_dio_mapping(struct spi_device *spi, u8 DIONumber, u8 value) | |||
| 570 | dev_dbg(&spi->dev, "set: DIO mapping"); | 570 | dev_dbg(&spi->dev, "set: DIO mapping"); |
| 571 | #endif | 571 | #endif |
| 572 | 572 | ||
| 573 | // check DIO number | ||
| 574 | if (DIONumber > 5) { | ||
| 575 | dev_dbg(&spi->dev, "set: illegal input param"); | ||
| 576 | return -EINVAL; | ||
| 577 | } | ||
| 578 | |||
| 579 | switch (DIONumber) { | 573 | switch (DIONumber) { |
| 580 | case 0: mask=MASK_DIO0; shift=SHIFT_DIO0; regaddr=REG_DIOMAPPING1; break; | 574 | case 0: mask=MASK_DIO0; shift=SHIFT_DIO0; regaddr=REG_DIOMAPPING1; break; |
| 581 | case 1: mask=MASK_DIO1; shift=SHIFT_DIO1; regaddr=REG_DIOMAPPING1; break; | 575 | case 1: mask=MASK_DIO1; shift=SHIFT_DIO1; regaddr=REG_DIOMAPPING1; break; |
| @@ -583,6 +577,9 @@ int rf69_set_dio_mapping(struct spi_device *spi, u8 DIONumber, u8 value) | |||
| 583 | case 3: mask=MASK_DIO3; shift=SHIFT_DIO3; regaddr=REG_DIOMAPPING1; break; | 577 | case 3: mask=MASK_DIO3; shift=SHIFT_DIO3; regaddr=REG_DIOMAPPING1; break; |
| 584 | case 4: mask=MASK_DIO4; shift=SHIFT_DIO4; regaddr=REG_DIOMAPPING2; break; | 578 | case 4: mask=MASK_DIO4; shift=SHIFT_DIO4; regaddr=REG_DIOMAPPING2; break; |
| 585 | case 5: mask=MASK_DIO5; shift=SHIFT_DIO5; regaddr=REG_DIOMAPPING2; break; | 579 | case 5: mask=MASK_DIO5; shift=SHIFT_DIO5; regaddr=REG_DIOMAPPING2; break; |
| 580 | default: | ||
| 581 | dev_dbg(&spi->dev, "set: illegal input param"); | ||
| 582 | return -EINVAL; | ||
| 586 | } | 583 | } |
| 587 | 584 | ||
| 588 | // read reg | 585 | // read reg |
diff --git a/drivers/staging/rtl8723bs/core/rtw_mlme.c b/drivers/staging/rtl8723bs/core/rtw_mlme.c index 6b778206a1a3..cb8a95aabd6c 100644 --- a/drivers/staging/rtl8723bs/core/rtw_mlme.c +++ b/drivers/staging/rtl8723bs/core/rtw_mlme.c | |||
| @@ -119,9 +119,8 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv) | |||
| 119 | 119 | ||
| 120 | void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv) | 120 | void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv) |
| 121 | { | 121 | { |
| 122 | rtw_free_mlme_priv_ie_data(pmlmepriv); | ||
| 123 | |||
| 124 | if (pmlmepriv) { | 122 | if (pmlmepriv) { |
| 123 | rtw_free_mlme_priv_ie_data(pmlmepriv); | ||
| 125 | if (pmlmepriv->free_bss_buf) { | 124 | if (pmlmepriv->free_bss_buf) { |
| 126 | vfree(pmlmepriv->free_bss_buf); | 125 | vfree(pmlmepriv->free_bss_buf); |
| 127 | } | 126 | } |
diff --git a/drivers/staging/rtl8723bs/os_dep/rtw_proc.c b/drivers/staging/rtl8723bs/os_dep/rtw_proc.c index 92277457aba4..ce1dd6f9036f 100644 --- a/drivers/staging/rtl8723bs/os_dep/rtw_proc.c +++ b/drivers/staging/rtl8723bs/os_dep/rtw_proc.c | |||
| @@ -311,6 +311,8 @@ static ssize_t proc_set_cam(struct file *file, const char __user *buffer, size_t | |||
| 311 | 311 | ||
| 312 | if (num < 2) | 312 | if (num < 2) |
| 313 | return count; | 313 | return count; |
| 314 | if (id >= TOTAL_CAM_ENTRY) | ||
| 315 | return -EINVAL; | ||
| 314 | 316 | ||
| 315 | if (strcmp("c", cmd) == 0) { | 317 | if (strcmp("c", cmd) == 0) { |
| 316 | _clear_cam_entry(adapter, id); | 318 | _clear_cam_entry(adapter, id); |
diff --git a/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c b/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c index 5f84526cb5b5..edbf6af1c8b7 100644 --- a/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c +++ b/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_api_88xx.c | |||
| @@ -2901,11 +2901,11 @@ halmac_update_datapack_88xx(struct halmac_adapter *halmac_adapter, | |||
| 2901 | if (halmac_adapter->fw_version.h2c_version < 4) | 2901 | if (halmac_adapter->fw_version.h2c_version < 4) |
| 2902 | return HALMAC_RET_FW_NO_SUPPORT; | 2902 | return HALMAC_RET_FW_NO_SUPPORT; |
| 2903 | 2903 | ||
| 2904 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 2905 | |||
| 2904 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 2906 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
| 2905 | "[TRACE]%s ==========>\n", __func__); | 2907 | "[TRACE]%s ==========>\n", __func__); |
| 2906 | 2908 | ||
| 2907 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 2908 | |||
| 2909 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 2909 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
| 2910 | "[TRACE]%s <==========\n", __func__); | 2910 | "[TRACE]%s <==========\n", __func__); |
| 2911 | 2911 | ||
diff --git a/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c b/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c index f33024e4d853..544f638ed3ef 100644 --- a/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c +++ b/drivers/staging/rtlwifi/halmac/halmac_88xx/halmac_func_88xx.c | |||
| @@ -1618,10 +1618,11 @@ halmac_send_h2c_set_pwr_mode_88xx(struct halmac_adapter *halmac_adapter, | |||
| 1618 | void *driver_adapter = NULL; | 1618 | void *driver_adapter = NULL; |
| 1619 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; | 1619 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; |
| 1620 | 1620 | ||
| 1621 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 1622 | |||
| 1621 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 1623 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
| 1622 | "%s!!\n", __func__); | 1624 | "%s!!\n", __func__); |
| 1623 | 1625 | ||
| 1624 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 1625 | h2c_header = h2c_buff; | 1626 | h2c_header = h2c_buff; |
| 1626 | h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; | 1627 | h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; |
| 1627 | 1628 | ||
| @@ -1713,10 +1714,11 @@ halmac_media_status_rpt_88xx(struct halmac_adapter *halmac_adapter, u8 op_mode, | |||
| 1713 | void *driver_adapter = NULL; | 1714 | void *driver_adapter = NULL; |
| 1714 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; | 1715 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; |
| 1715 | 1716 | ||
| 1717 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 1718 | |||
| 1716 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 1719 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
| 1717 | "halmac_send_h2c_set_pwr_mode_88xx!!\n"); | 1720 | "halmac_send_h2c_set_pwr_mode_88xx!!\n"); |
| 1718 | 1721 | ||
| 1719 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 1720 | h2c_header = H2c_buff; | 1722 | h2c_header = H2c_buff; |
| 1721 | h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; | 1723 | h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; |
| 1722 | 1724 | ||
| @@ -2143,10 +2145,11 @@ halmac_func_ctrl_ch_switch_88xx(struct halmac_adapter *halmac_adapter, | |||
| 2143 | enum halmac_cmd_process_status *process_status = | 2145 | enum halmac_cmd_process_status *process_status = |
| 2144 | &halmac_adapter->halmac_state.scan_state_set.process_status; | 2146 | &halmac_adapter->halmac_state.scan_state_set.process_status; |
| 2145 | 2147 | ||
| 2148 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 2149 | |||
| 2146 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 2150 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
| 2147 | "halmac_ctrl_ch_switch!!\n"); | 2151 | "halmac_ctrl_ch_switch!!\n"); |
| 2148 | 2152 | ||
| 2149 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 2150 | halmac_api = (struct halmac_api *)halmac_adapter->halmac_api; | 2153 | halmac_api = (struct halmac_api *)halmac_adapter->halmac_api; |
| 2151 | 2154 | ||
| 2152 | if (halmac_transition_scan_state_88xx( | 2155 | if (halmac_transition_scan_state_88xx( |
| @@ -2276,15 +2279,13 @@ enum halmac_ret_status halmac_send_h2c_update_bcn_parse_info_88xx( | |||
| 2276 | { | 2279 | { |
| 2277 | u8 h2c_buff[HALMAC_H2C_CMD_SIZE_88XX] = {0}; | 2280 | u8 h2c_buff[HALMAC_H2C_CMD_SIZE_88XX] = {0}; |
| 2278 | u16 h2c_seq_mum = 0; | 2281 | u16 h2c_seq_mum = 0; |
| 2279 | void *driver_adapter = NULL; | 2282 | void *driver_adapter = halmac_adapter->driver_adapter; |
| 2280 | struct halmac_h2c_header_info h2c_header_info; | 2283 | struct halmac_h2c_header_info h2c_header_info; |
| 2281 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; | 2284 | enum halmac_ret_status status = HALMAC_RET_SUCCESS; |
| 2282 | 2285 | ||
| 2283 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, | 2286 | HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, |
| 2284 | "%s!!\n", __func__); | 2287 | "%s!!\n", __func__); |
| 2285 | 2288 | ||
| 2286 | driver_adapter = halmac_adapter->driver_adapter; | ||
| 2287 | |||
| 2288 | UPDATE_BEACON_PARSING_INFO_SET_FUNC_EN(h2c_buff, bcn_ie_info->func_en); | 2289 | UPDATE_BEACON_PARSING_INFO_SET_FUNC_EN(h2c_buff, bcn_ie_info->func_en); |
| 2289 | UPDATE_BEACON_PARSING_INFO_SET_SIZE_TH(h2c_buff, bcn_ie_info->size_th); | 2290 | UPDATE_BEACON_PARSING_INFO_SET_SIZE_TH(h2c_buff, bcn_ie_info->size_th); |
| 2290 | UPDATE_BEACON_PARSING_INFO_SET_TIMEOUT(h2c_buff, bcn_ie_info->timeout); | 2291 | UPDATE_BEACON_PARSING_INFO_SET_TIMEOUT(h2c_buff, bcn_ie_info->timeout); |
diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c index 67956e24779c..56f7be6af1f6 100644 --- a/drivers/staging/speakup/main.c +++ b/drivers/staging/speakup/main.c | |||
| @@ -1376,6 +1376,8 @@ static void reset_highlight_buffers(struct vc_data *); | |||
| 1376 | 1376 | ||
| 1377 | static int read_all_key; | 1377 | static int read_all_key; |
| 1378 | 1378 | ||
| 1379 | static int in_keyboard_notifier; | ||
| 1380 | |||
| 1379 | static void start_read_all_timer(struct vc_data *vc, int command); | 1381 | static void start_read_all_timer(struct vc_data *vc, int command); |
| 1380 | 1382 | ||
| 1381 | enum { | 1383 | enum { |
| @@ -1408,7 +1410,10 @@ static void read_all_doc(struct vc_data *vc) | |||
| 1408 | cursor_track = read_all_mode; | 1410 | cursor_track = read_all_mode; |
| 1409 | spk_reset_index_count(0); | 1411 | spk_reset_index_count(0); |
| 1410 | if (get_sentence_buf(vc, 0) == -1) { | 1412 | if (get_sentence_buf(vc, 0) == -1) { |
| 1411 | kbd_fakekey2(vc, RA_DOWN_ARROW); | 1413 | del_timer(&cursor_timer); |
| 1414 | if (!in_keyboard_notifier) | ||
| 1415 | speakup_fake_down_arrow(); | ||
| 1416 | start_read_all_timer(vc, RA_DOWN_ARROW); | ||
| 1412 | } else { | 1417 | } else { |
| 1413 | say_sentence_num(0, 0); | 1418 | say_sentence_num(0, 0); |
| 1414 | synth_insert_next_index(0); | 1419 | synth_insert_next_index(0); |
| @@ -2212,8 +2217,10 @@ static int keyboard_notifier_call(struct notifier_block *nb, | |||
| 2212 | int ret = NOTIFY_OK; | 2217 | int ret = NOTIFY_OK; |
| 2213 | static int keycode; /* to hold the current keycode */ | 2218 | static int keycode; /* to hold the current keycode */ |
| 2214 | 2219 | ||
| 2220 | in_keyboard_notifier = 1; | ||
| 2221 | |||
| 2215 | if (vc->vc_mode == KD_GRAPHICS) | 2222 | if (vc->vc_mode == KD_GRAPHICS) |
| 2216 | return ret; | 2223 | goto out; |
| 2217 | 2224 | ||
| 2218 | /* | 2225 | /* |
| 2219 | * First, determine whether we are handling a fake keypress on | 2226 | * First, determine whether we are handling a fake keypress on |
| @@ -2225,7 +2232,7 @@ static int keyboard_notifier_call(struct notifier_block *nb, | |||
| 2225 | */ | 2232 | */ |
| 2226 | 2233 | ||
| 2227 | if (speakup_fake_key_pressed()) | 2234 | if (speakup_fake_key_pressed()) |
| 2228 | return ret; | 2235 | goto out; |
| 2229 | 2236 | ||
| 2230 | switch (code) { | 2237 | switch (code) { |
| 2231 | case KBD_KEYCODE: | 2238 | case KBD_KEYCODE: |
| @@ -2266,6 +2273,8 @@ static int keyboard_notifier_call(struct notifier_block *nb, | |||
| 2266 | break; | 2273 | break; |
| 2267 | } | 2274 | } |
| 2268 | } | 2275 | } |
| 2276 | out: | ||
| 2277 | in_keyboard_notifier = 0; | ||
| 2269 | return ret; | 2278 | return ret; |
| 2270 | } | 2279 | } |
| 2271 | 2280 | ||
diff --git a/drivers/staging/unisys/visorbus/visorchipset.c b/drivers/staging/unisys/visorbus/visorchipset.c index 74cce4f1a7bd..27ecf6fb49fd 100644 --- a/drivers/staging/unisys/visorbus/visorchipset.c +++ b/drivers/staging/unisys/visorbus/visorchipset.c | |||
| @@ -1826,7 +1826,7 @@ static __init int visorutil_spar_detect(void) | |||
| 1826 | return 0; | 1826 | return 0; |
| 1827 | } | 1827 | } |
| 1828 | 1828 | ||
| 1829 | static int init_unisys(void) | 1829 | static int __init init_unisys(void) |
| 1830 | { | 1830 | { |
| 1831 | int result; | 1831 | int result; |
| 1832 | 1832 | ||
| @@ -1841,7 +1841,7 @@ static int init_unisys(void) | |||
| 1841 | return 0; | 1841 | return 0; |
| 1842 | }; | 1842 | }; |
| 1843 | 1843 | ||
| 1844 | static void exit_unisys(void) | 1844 | static void __exit exit_unisys(void) |
| 1845 | { | 1845 | { |
| 1846 | acpi_bus_unregister_driver(&unisys_acpi_driver); | 1846 | acpi_bus_unregister_driver(&unisys_acpi_driver); |
| 1847 | } | 1847 | } |
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c index 0159ca4407d8..be08849175ea 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c | |||
| @@ -612,18 +612,20 @@ free_pagelist(struct vchiq_pagelist_info *pagelistinfo, | |||
| 612 | if (head_bytes > actual) | 612 | if (head_bytes > actual) |
| 613 | head_bytes = actual; | 613 | head_bytes = actual; |
| 614 | 614 | ||
| 615 | memcpy((char *)page_address(pages[0]) + | 615 | memcpy((char *)kmap(pages[0]) + |
| 616 | pagelist->offset, | 616 | pagelist->offset, |
| 617 | fragments, | 617 | fragments, |
| 618 | head_bytes); | 618 | head_bytes); |
| 619 | kunmap(pages[0]); | ||
| 619 | } | 620 | } |
| 620 | if ((actual >= 0) && (head_bytes < actual) && | 621 | if ((actual >= 0) && (head_bytes < actual) && |
| 621 | (tail_bytes != 0)) { | 622 | (tail_bytes != 0)) { |
| 622 | memcpy((char *)page_address(pages[num_pages - 1]) + | 623 | memcpy((char *)kmap(pages[num_pages - 1]) + |
| 623 | ((pagelist->offset + actual) & | 624 | ((pagelist->offset + actual) & |
| 624 | (PAGE_SIZE - 1) & ~(g_cache_line_size - 1)), | 625 | (PAGE_SIZE - 1) & ~(g_cache_line_size - 1)), |
| 625 | fragments + g_cache_line_size, | 626 | fragments + g_cache_line_size, |
| 626 | tail_bytes); | 627 | tail_bytes); |
| 628 | kunmap(pages[num_pages - 1]); | ||
| 627 | } | 629 | } |
| 628 | 630 | ||
| 629 | down(&g_free_fragments_mutex); | 631 | down(&g_free_fragments_mutex); |
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, |
