diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-06-29 16:53:31 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-06-29 16:53:31 -0400 |
commit | d839722131307eff1f3fe1636a5af839c90fbf96 (patch) | |
tree | 1bec9b42e23c05d84c83fbd4481c19f080f6e158 | |
parent | df013212a1b6557f071609983cab0612f71fd99b (diff) | |
parent | 68b356eb3d9f5e38910fb62e22a78e2a18d544ae (diff) |
Merge tag 'iio-fixes-for-4.7c' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-linus
Jonathan writes:
Third set of fixes for IIO in the 4.7 cycle.
A couple of really old bugs and the results of Mark taking a close look at
some nasty regulator handling.
* ad7266
- Fix broken regulator handling that won't play well with dummy regulators.
- Correctly handle and optional regulator.
- Fix probe deferral for the vref regulator.
* kxsd9
- Fix a wrong error check that leads to an inability to write or read
the scale.
* sca3000
- Fix a wrong error check that leads to an inability to read back the
sampling frequency.
-rw-r--r-- | drivers/iio/accel/kxsd9.c | 4 | ||||
-rw-r--r-- | drivers/iio/adc/ad7266.c | 7 | ||||
-rw-r--r-- | drivers/staging/iio/accel/sca3000_core.c | 2 |
3 files changed, 8 insertions, 5 deletions
diff --git a/drivers/iio/accel/kxsd9.c b/drivers/iio/accel/kxsd9.c index 923f56598d4b..3a9f106787d2 100644 --- a/drivers/iio/accel/kxsd9.c +++ b/drivers/iio/accel/kxsd9.c | |||
@@ -81,7 +81,7 @@ static int kxsd9_write_scale(struct iio_dev *indio_dev, int micro) | |||
81 | 81 | ||
82 | mutex_lock(&st->buf_lock); | 82 | mutex_lock(&st->buf_lock); |
83 | ret = spi_w8r8(st->us, KXSD9_READ(KXSD9_REG_CTRL_C)); | 83 | ret = spi_w8r8(st->us, KXSD9_READ(KXSD9_REG_CTRL_C)); |
84 | if (ret) | 84 | if (ret < 0) |
85 | goto error_ret; | 85 | goto error_ret; |
86 | st->tx[0] = KXSD9_WRITE(KXSD9_REG_CTRL_C); | 86 | st->tx[0] = KXSD9_WRITE(KXSD9_REG_CTRL_C); |
87 | st->tx[1] = (ret & ~KXSD9_FS_MASK) | i; | 87 | st->tx[1] = (ret & ~KXSD9_FS_MASK) | i; |
@@ -163,7 +163,7 @@ static int kxsd9_read_raw(struct iio_dev *indio_dev, | |||
163 | break; | 163 | break; |
164 | case IIO_CHAN_INFO_SCALE: | 164 | case IIO_CHAN_INFO_SCALE: |
165 | ret = spi_w8r8(st->us, KXSD9_READ(KXSD9_REG_CTRL_C)); | 165 | ret = spi_w8r8(st->us, KXSD9_READ(KXSD9_REG_CTRL_C)); |
166 | if (ret) | 166 | if (ret < 0) |
167 | goto error_ret; | 167 | goto error_ret; |
168 | *val2 = kxsd9_micro_scales[ret & KXSD9_FS_MASK]; | 168 | *val2 = kxsd9_micro_scales[ret & KXSD9_FS_MASK]; |
169 | ret = IIO_VAL_INT_PLUS_MICRO; | 169 | ret = IIO_VAL_INT_PLUS_MICRO; |
diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c index 21e19b60e2b9..2123f0ac2e2a 100644 --- a/drivers/iio/adc/ad7266.c +++ b/drivers/iio/adc/ad7266.c | |||
@@ -396,8 +396,8 @@ static int ad7266_probe(struct spi_device *spi) | |||
396 | 396 | ||
397 | st = iio_priv(indio_dev); | 397 | st = iio_priv(indio_dev); |
398 | 398 | ||
399 | st->reg = devm_regulator_get(&spi->dev, "vref"); | 399 | st->reg = devm_regulator_get_optional(&spi->dev, "vref"); |
400 | if (!IS_ERR_OR_NULL(st->reg)) { | 400 | if (!IS_ERR(st->reg)) { |
401 | ret = regulator_enable(st->reg); | 401 | ret = regulator_enable(st->reg); |
402 | if (ret) | 402 | if (ret) |
403 | return ret; | 403 | return ret; |
@@ -408,6 +408,9 @@ static int ad7266_probe(struct spi_device *spi) | |||
408 | 408 | ||
409 | st->vref_mv = ret / 1000; | 409 | st->vref_mv = ret / 1000; |
410 | } else { | 410 | } else { |
411 | /* Any other error indicates that the regulator does exist */ | ||
412 | if (PTR_ERR(st->reg) != -ENODEV) | ||
413 | return PTR_ERR(st->reg); | ||
411 | /* Use internal reference */ | 414 | /* Use internal reference */ |
412 | st->vref_mv = 2500; | 415 | st->vref_mv = 2500; |
413 | } | 416 | } |
diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c index a8f533af9eca..ec12181822e6 100644 --- a/drivers/staging/iio/accel/sca3000_core.c +++ b/drivers/staging/iio/accel/sca3000_core.c | |||
@@ -594,7 +594,7 @@ static ssize_t sca3000_read_frequency(struct device *dev, | |||
594 | goto error_ret_mut; | 594 | goto error_ret_mut; |
595 | ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); | 595 | ret = sca3000_read_ctrl_reg(st, SCA3000_REG_CTRL_SEL_OUT_CTRL); |
596 | mutex_unlock(&st->lock); | 596 | mutex_unlock(&st->lock); |
597 | if (ret) | 597 | if (ret < 0) |
598 | goto error_ret; | 598 | goto error_ret; |
599 | val = ret; | 599 | val = ret; |
600 | if (base_freq > 0) | 600 | if (base_freq > 0) |