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: ad7293: enable power before reset

Change the order of regulator enable and reset so that power supplies
are turned on before touching the reset line. Generally, chips should
have the VDRIVE supply enabled before applying voltage on any pins.

While we are at it, remove the voltage level checks. If the power
supplies are not supplying the correct voltage, this is a hardware
design problem, not a software problem.

Signed-off-by: David Lechner <dlechner@baylibre.com>
Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Link: https://patch.msgid.link/20241216-iio-regulator-cleanup-round-6-v2-1-9482164b68cb@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

David Lechner and committed by
Jonathan Cameron
84b6b555 6ade8294

+9 -59
+9 -59
drivers/iio/dac/ad7293.c
··· 141 141 /* Protect against concurrent accesses to the device, page selection and data content */ 142 142 struct mutex lock; 143 143 struct gpio_desc *gpio_reset; 144 - struct regulator *reg_avdd; 145 - struct regulator *reg_vdrive; 146 144 u8 page_select; 147 145 u8 data[3] __aligned(IIO_DMA_MINALIGN); 148 146 }; ··· 775 777 static int ad7293_properties_parse(struct ad7293_state *st) 776 778 { 777 779 struct spi_device *spi = st->spi; 780 + int ret; 781 + 782 + ret = devm_regulator_get_enable(&spi->dev, "avdd"); 783 + if (ret) 784 + return dev_err_probe(&spi->dev, ret, "failed to enable AVDD\n"); 785 + 786 + ret = devm_regulator_get_enable(&spi->dev, "vdrive"); 787 + if (ret) 788 + return dev_err_probe(&spi->dev, ret, "failed to enable VDRIVE\n"); 778 789 779 790 st->gpio_reset = devm_gpiod_get_optional(&st->spi->dev, "reset", 780 791 GPIOD_OUT_HIGH); ··· 791 784 return dev_err_probe(&spi->dev, PTR_ERR(st->gpio_reset), 792 785 "failed to get the reset GPIO\n"); 793 786 794 - st->reg_avdd = devm_regulator_get(&spi->dev, "avdd"); 795 - if (IS_ERR(st->reg_avdd)) 796 - return dev_err_probe(&spi->dev, PTR_ERR(st->reg_avdd), 797 - "failed to get the AVDD voltage\n"); 798 - 799 - st->reg_vdrive = devm_regulator_get(&spi->dev, "vdrive"); 800 - if (IS_ERR(st->reg_vdrive)) 801 - return dev_err_probe(&spi->dev, PTR_ERR(st->reg_vdrive), 802 - "failed to get the VDRIVE voltage\n"); 803 - 804 787 return 0; 805 - } 806 - 807 - static void ad7293_reg_disable(void *data) 808 - { 809 - regulator_disable(data); 810 788 } 811 789 812 790 static int ad7293_init(struct ad7293_state *st) ··· 807 815 ret = ad7293_reset(st); 808 816 if (ret) 809 817 return ret; 810 - 811 - ret = regulator_enable(st->reg_avdd); 812 - if (ret) { 813 - dev_err(&spi->dev, 814 - "Failed to enable specified AVDD Voltage!\n"); 815 - return ret; 816 - } 817 - 818 - ret = devm_add_action_or_reset(&spi->dev, ad7293_reg_disable, 819 - st->reg_avdd); 820 - if (ret) 821 - return ret; 822 - 823 - ret = regulator_enable(st->reg_vdrive); 824 - if (ret) { 825 - dev_err(&spi->dev, 826 - "Failed to enable specified VDRIVE Voltage!\n"); 827 - return ret; 828 - } 829 - 830 - ret = devm_add_action_or_reset(&spi->dev, ad7293_reg_disable, 831 - st->reg_vdrive); 832 - if (ret) 833 - return ret; 834 - 835 - ret = regulator_get_voltage(st->reg_avdd); 836 - if (ret < 0) { 837 - dev_err(&spi->dev, "Failed to read avdd regulator: %d\n", ret); 838 - return ret; 839 - } 840 - 841 - if (ret > 5500000 || ret < 4500000) 842 - return -EINVAL; 843 - 844 - ret = regulator_get_voltage(st->reg_vdrive); 845 - if (ret < 0) { 846 - dev_err(&spi->dev, 847 - "Failed to read vdrive regulator: %d\n", ret); 848 - return ret; 849 - } 850 - if (ret > 5500000 || ret < 1700000) 851 - return -EINVAL; 852 818 853 819 /* Check Chip ID */ 854 820 ret = __ad7293_spi_read(st, AD7293_REG_DEVICE_ID, &chip_id);