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: magnetometer: si7210: simplify probe with devm_regulator_get_enable_read_voltage()

Simplify probe by using devm_regulator_get_enable_read_voltage() to
get, enable and read the regulator voltage in a single call, caching
the value at probe time.

This is a functional change as VDD voltage is now read once at probe
rather than dynamically on each temperature measurement. However, in
real deployments it is very rare for VDD to change after initial probe.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Antoniu Miclaus and committed by
Jonathan Cameron
93f60f67 0309e66a

+7 -14
+7 -14
drivers/iio/magnetometer/si7210.c
··· 128 128 struct si7210_data { 129 129 struct regmap *regmap; 130 130 struct i2c_client *client; 131 - struct regulator *vdd; 132 131 struct mutex fetch_lock; /* lock for a single measurement fetch */ 132 + unsigned int vdd_uV; 133 133 s8 temp_offset; 134 134 s8 temp_gain; 135 135 s8 scale_20_a[A_REGS_COUNT]; ··· 221 221 temp *= (1 + (data->temp_gain / 2048)); 222 222 temp += (int)(MICRO / 16) * data->temp_offset; 223 223 224 - ret = regulator_get_voltage(data->vdd); 225 - if (ret < 0) 226 - return ret; 227 - 228 224 /* temp -= 0.222 * VDD */ 229 - temp -= 222 * div_s64(ret, MILLI); 225 + temp -= 222 * (data->vdd_uV / MILLI); 230 226 231 227 *val = div_s64(temp, MILLI); 232 228 ··· 392 396 return dev_err_probe(&client->dev, PTR_ERR(data->regmap), 393 397 "failed to register regmap\n"); 394 398 395 - data->vdd = devm_regulator_get(&client->dev, "vdd"); 396 - if (IS_ERR(data->vdd)) 397 - return dev_err_probe(&client->dev, PTR_ERR(data->vdd), 398 - "failed to get VDD regulator\n"); 399 - 400 - ret = regulator_enable(data->vdd); 401 - if (ret) 402 - return ret; 399 + ret = devm_regulator_get_enable_read_voltage(&client->dev, "vdd"); 400 + if (ret < 0) 401 + return dev_err_probe(&client->dev, ret, 402 + "Failed to get vdd regulator\n"); 403 + data->vdd_uV = ret; 403 404 404 405 indio_dev->name = dev_name(&client->dev); 405 406 indio_dev->modes = INDIO_DIRECT_MODE;