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: adc: ti-tsc2046: use devm_regulator_get_enable_read_voltage()

Use devm_regulator_get_enable_read_voltage() to replace
tsc2046_adc_configure_regulator() which does the same thing.

Signed-off-by: David Lechner <dlechner@baylibre.com>
Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Link: https://patch.msgid.link/20240725-iio-regulator-refactor-round-4-v1-1-55e9dc1de325@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

David Lechner and committed by
Jonathan Cameron
02e0a02c f7578fd4

+7 -47
+7 -47
drivers/iio/adc/ti-tsc2046.c
··· 142 142 struct tsc2046_adc_priv { 143 143 struct spi_device *spi; 144 144 const struct tsc2046_adc_dcfg *dcfg; 145 - struct regulator *vref_reg; 145 + bool internal_vref; 146 146 147 147 struct iio_trigger *trig; 148 148 struct hrtimer trig_timer; ··· 258 258 case TI_TSC2046_ADDR_VBAT: 259 259 case TI_TSC2046_ADDR_TEMP0: 260 260 pd |= TI_TSC2046_SER; 261 - if (!priv->vref_reg) 261 + if (priv->internal_vref) 262 262 pd |= TI_TSC2046_PD1_VREF_ON; 263 263 } 264 264 ··· 741 741 } 742 742 } 743 743 744 - static void tsc2046_adc_regulator_disable(void *data) 745 - { 746 - struct tsc2046_adc_priv *priv = data; 747 - 748 - regulator_disable(priv->vref_reg); 749 - } 750 - 751 - static int tsc2046_adc_configure_regulator(struct tsc2046_adc_priv *priv) 752 - { 753 - struct device *dev = &priv->spi->dev; 754 - int ret; 755 - 756 - priv->vref_reg = devm_regulator_get_optional(dev, "vref"); 757 - if (IS_ERR(priv->vref_reg)) { 758 - /* If regulator exists but can't be get, return an error */ 759 - if (PTR_ERR(priv->vref_reg) != -ENODEV) 760 - return PTR_ERR(priv->vref_reg); 761 - priv->vref_reg = NULL; 762 - } 763 - if (!priv->vref_reg) { 764 - /* Use internal reference */ 765 - priv->vref_mv = TI_TSC2046_INT_VREF; 766 - return 0; 767 - } 768 - 769 - ret = regulator_enable(priv->vref_reg); 770 - if (ret) 771 - return ret; 772 - 773 - ret = devm_add_action_or_reset(dev, tsc2046_adc_regulator_disable, 774 - priv); 775 - if (ret) 776 - return ret; 777 - 778 - ret = regulator_get_voltage(priv->vref_reg); 779 - if (ret < 0) 780 - return ret; 781 - 782 - priv->vref_mv = ret / MILLI; 783 - 784 - return 0; 785 - } 786 - 787 744 static int tsc2046_adc_probe(struct spi_device *spi) 788 745 { 789 746 const struct tsc2046_adc_dcfg *dcfg; ··· 782 825 indio_dev->num_channels = dcfg->num_channels; 783 826 indio_dev->info = &tsc2046_adc_info; 784 827 785 - ret = tsc2046_adc_configure_regulator(priv); 786 - if (ret) 828 + ret = devm_regulator_get_enable_read_voltage(dev, "vref"); 829 + if (ret < 0 && ret != -ENODEV) 787 830 return ret; 831 + 832 + priv->internal_vref = ret == -ENODEV; 833 + priv->vref_mv = priv->internal_vref ? TI_TSC2046_INT_VREF : ret / MILLI; 788 834 789 835 tsc2046_adc_parse_fwnode(priv); 790 836