diff options
| -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, |
