mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
iio: adc: ti-ads7950: switch to using devm_regulator_get_enable_read_voltage()
The regulator is enabled for the entire time the driver is bound to the device, and we only need to access it to fetch voltage, which can be done at probe time. Switch to using devm_regulator_get_enable_read_voltage() which simplifies probing and unbinding code. Suggested-by: David Lechner <dlechner@baylibre.com> Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Tested-by: David Lechner <dlechner@baylibre.com> Reviewed-by: Linus Walleij <linusw@kernel.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
1c3b46b9de
commit
86f6d0949e
|
|
@ -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 @@ static int ti_ads7950_probe(struct spi_device *spi)
|
|||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user