Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

iio: dac: ad5770r: use devm_regulator_get_enable_read_voltage()

Simplify the code by using devm_regulator_get_enable_read_voltage().

Signed-off-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20241023-iio-regulator-refactor-round-5-v1-11-d0bd396b3f50@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

David Lechner and committed by
Jonathan Cameron
a3920a23 7af0ad4d

+5 -36
+5 -36
drivers/iio/dac/ad5770r.c
··· 122 122 * struct ad5770r_state - driver instance specific data 123 123 * @spi: spi_device 124 124 * @regmap: regmap 125 - * @vref_reg: fixed regulator for reference configuration 126 125 * @gpio_reset: gpio descriptor 127 126 * @output_mode: array contains channels output ranges 128 127 * @vref: reference value ··· 133 134 struct ad5770r_state { 134 135 struct spi_device *spi; 135 136 struct regmap *regmap; 136 - struct regulator *vref_reg; 137 137 struct gpio_desc *gpio_reset; 138 138 struct ad5770r_out_range output_mode[AD5770R_MAX_CHANNELS]; 139 139 int vref; ··· 589 591 return ret; 590 592 } 591 593 592 - static void ad5770r_disable_regulator(void *data) 593 - { 594 - struct ad5770r_state *st = data; 595 - 596 - regulator_disable(st->vref_reg); 597 - } 598 - 599 594 static int ad5770r_probe(struct spi_device *spi) 600 595 { 601 596 struct ad5770r_state *st; ··· 613 622 } 614 623 st->regmap = regmap; 615 624 616 - st->vref_reg = devm_regulator_get_optional(&spi->dev, "vref"); 617 - if (!IS_ERR(st->vref_reg)) { 618 - ret = regulator_enable(st->vref_reg); 619 - if (ret) { 620 - dev_err(&spi->dev, 621 - "Failed to enable vref regulators: %d\n", ret); 622 - return ret; 623 - } 625 + ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vref"); 626 + if (ret < 0 && ret != -ENODEV) 627 + return dev_err_probe(&spi->dev, ret, "Failed to get vref voltage\n"); 624 628 625 - ret = devm_add_action_or_reset(&spi->dev, 626 - ad5770r_disable_regulator, 627 - st); 628 - if (ret < 0) 629 - return ret; 630 - 631 - ret = regulator_get_voltage(st->vref_reg); 632 - if (ret < 0) 633 - return ret; 634 - 635 - st->vref = ret / 1000; 636 - } else { 637 - if (PTR_ERR(st->vref_reg) == -ENODEV) { 638 - st->vref = AD5770R_LOW_VREF_mV; 639 - st->internal_ref = true; 640 - } else { 641 - return PTR_ERR(st->vref_reg); 642 - } 643 - } 629 + st->internal_ref = ret == -ENODEV; 630 + st->vref = st->internal_ref ? AD5770R_LOW_VREF_mV : ret / 1000; 644 631 645 632 indio_dev->name = spi_get_device_id(spi)->name; 646 633 indio_dev->info = &ad5770r_info;