summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/iio/adc/ti-ads7950.c48
1 files changed, 13 insertions, 35 deletions
diff --git a/drivers/iio/adc/ti-ads7950.c b/drivers/iio/adc/ti-ads7950.c
index c31c706c92a9..0b98c8e7385d 100644
--- a/drivers/iio/adc/ti-ads7950.c
+++ b/drivers/iio/adc/ti-ads7950.c
@@ -334,19 +334,9 @@ static int ti_ads7950_scan_direct(struct iio_dev *indio_dev, unsigned int ch)
return st->single_rx;
}
-static int ti_ads7950_get_range(struct ti_ads7950_state *st)
+static unsigned int ti_ads7950_get_range(struct ti_ads7950_state *st)
{
- int vref;
-
- if (st->vref_mv) {
- vref = st->vref_mv;
- } else {
- vref = regulator_get_voltage(st->reg);
- if (vref < 0)
- return vref;
-
- vref /= 1000;
- }
+ unsigned int vref = st->vref_mv;
if (st->cmd_settings_bitmask & TI_ADS7950_CR_RANGE_5V)
vref *= 2;
@@ -375,11 +365,7 @@ static int ti_ads7950_read_raw(struct iio_dev *indio_dev,
return IIO_VAL_INT;
case IIO_CHAN_INFO_SCALE:
- ret = ti_ads7950_get_range(st);
- if (ret < 0)
- return ret;
-
- *val = ret;
+ *val = ti_ads7950_get_range(st);
*val2 = (1 << chan->scan_type.realbits) - 1;
return IIO_VAL_FRACTIONAL;
@@ -573,30 +559,25 @@ static int ti_ads7950_probe(struct spi_device *spi)
spi_message_init_with_transfers(&st->scan_single_msg,
st->scan_single_xfer, 3);
- /* Use hard coded value for reference voltage in ACPI case */
- if (ACPI_COMPANION(&spi->dev))
- st->vref_mv = TI_ADS7950_VA_MV_ACPI_DEFAULT;
-
mutex_init(&st->slock);
- st->reg = devm_regulator_get(&spi->dev, "vref");
- if (IS_ERR(st->reg)) {
- ret = dev_err_probe(&spi->dev, PTR_ERR(st->reg),
- "Failed to get regulator \"vref\"\n");
- goto error_destroy_mutex;
- }
+ /* Use hard coded value for reference voltage in ACPI case */
+ if (ACPI_COMPANION(&spi->dev)) {
+ st->vref_mv = TI_ADS7950_VA_MV_ACPI_DEFAULT;
+ } else {
+ ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vref");
+ if (ret < 0)
+ return dev_err_probe(&spi->dev, ret,
+ "Failed to get regulator \"vref\"\n");
- ret = regulator_enable(st->reg);
- if (ret) {
- dev_err(&spi->dev, "Failed to enable regulator \"vref\"\n");
- goto error_destroy_mutex;
+ st->vref_mv = ret / 1000;
}
ret = iio_triggered_buffer_setup(indio_dev, NULL,
&ti_ads7950_trigger_handler, NULL);
if (ret) {
dev_err(&spi->dev, "Failed to setup triggered buffer\n");
- goto error_disable_reg;
+ goto error_destroy_mutex;
}
ret = ti_ads7950_init_hw(st);
@@ -636,8 +617,6 @@ error_iio_device:
iio_device_unregister(indio_dev);
error_cleanup_ring:
iio_triggered_buffer_cleanup(indio_dev);
-error_disable_reg:
- regulator_disable(st->reg);
error_destroy_mutex:
mutex_destroy(&st->slock);
@@ -652,7 +631,6 @@ static void ti_ads7950_remove(struct spi_device *spi)
gpiochip_remove(&st->chip);
iio_device_unregister(indio_dev);
iio_triggered_buffer_cleanup(indio_dev);
- regulator_disable(st->reg);
mutex_destroy(&st->slock);
}