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: ltc2309: use devm_regulator_get_enable_read_voltage()

Use devm_regulator_get_enable_read_voltage() to simplify the code.
Error message is changed since there is only one error return now.
LTC2309_INTERNAL_REF_MV macro is added to make the internal reference
voltage value self-documenting.

Signed-off-by: David Lechner <dlechner@baylibre.com>
Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Link: https://patch.msgid.link/20240621-iio-regulator-refactor-round-2-v1-5-49e50cd0b99a@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

David Lechner and committed by
Jonathan Cameron
890582c2 95e17a54

+6 -37
+6 -37
drivers/iio/adc/ltc2309.c
··· 16 16 #include <linux/regulator/consumer.h> 17 17 18 18 #define LTC2309_ADC_RESOLUTION 12 19 + #define LTC2309_INTERNAL_REF_MV 4096 19 20 20 21 #define LTC2309_DIN_CH_MASK GENMASK(7, 4) 21 22 #define LTC2309_DIN_SDN BIT(7) ··· 30 29 * struct ltc2309 - internal device data structure 31 30 * @dev: Device reference 32 31 * @client: I2C reference 33 - * @vref: External reference source 34 32 * @lock: Lock to serialize data access 35 33 * @vref_mv: Internal voltage reference 36 34 */ 37 35 struct ltc2309 { 38 36 struct device *dev; 39 37 struct i2c_client *client; 40 - struct regulator *vref; 41 38 struct mutex lock; /* serialize data access */ 42 39 int vref_mv; 43 40 }; ··· 156 157 .read_raw = ltc2309_read_raw, 157 158 }; 158 159 159 - static void ltc2309_regulator_disable(void *regulator) 160 - { 161 - regulator_disable(regulator); 162 - } 163 - 164 160 static int ltc2309_probe(struct i2c_client *client) 165 161 { 166 162 struct iio_dev *indio_dev; ··· 169 175 ltc2309 = iio_priv(indio_dev); 170 176 ltc2309->dev = &indio_dev->dev; 171 177 ltc2309->client = client; 172 - ltc2309->vref_mv = 4096; /* Default to the internal ref */ 173 178 174 179 indio_dev->name = "ltc2309"; 175 180 indio_dev->modes = INDIO_DIRECT_MODE; ··· 176 183 indio_dev->num_channels = ARRAY_SIZE(ltc2309_channels); 177 184 indio_dev->info = &ltc2309_info; 178 185 179 - ltc2309->vref = devm_regulator_get_optional(&client->dev, "vref"); 180 - if (IS_ERR(ltc2309->vref)) { 181 - ret = PTR_ERR(ltc2309->vref); 182 - if (ret == -ENODEV) 183 - ltc2309->vref = NULL; 184 - else 185 - return ret; 186 - } 186 + ret = devm_regulator_get_enable_read_voltage(&client->dev, "vref"); 187 + if (ret < 0 && ret != -ENODEV) 188 + return dev_err_probe(ltc2309->dev, ret, 189 + "failed to get vref voltage\n"); 187 190 188 - if (ltc2309->vref) { 189 - ret = regulator_enable(ltc2309->vref); 190 - if (ret) 191 - return dev_err_probe(ltc2309->dev, ret, 192 - "failed to enable vref\n"); 193 - 194 - ret = devm_add_action_or_reset(ltc2309->dev, 195 - ltc2309_regulator_disable, 196 - ltc2309->vref); 197 - if (ret) { 198 - return dev_err_probe(ltc2309->dev, ret, 199 - "failed to add regulator_disable action: %d\n", 200 - ret); 201 - } 202 - 203 - ret = regulator_get_voltage(ltc2309->vref); 204 - if (ret < 0) 205 - return ret; 206 - 207 - ltc2309->vref_mv = ret / 1000; 208 - } 191 + ltc2309->vref_mv = ret == -ENODEV ? LTC2309_INTERNAL_REF_MV : ret / 1000; 209 192 210 193 mutex_init(&ltc2309->lock); 211 194