diff options
author | Hartmut Knaack <knaack.h@gmx.de> | 2015-08-28 23:59:58 +0200 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2015-10-11 15:45:17 +0100 |
commit | 399910534cca5f00d22438e80ecc7ccc7f4b8a14 (patch) | |
tree | e673942ffffdb8d8bf137b301855a6d7c3114840 | |
parent | acf2f67d055c656938a3980a0745ed62fb7985c9 (diff) |
iio:dac:m62332: use dynamic scale
Some regulators can supply multiple voltages. To take changing voltages
into account, the scale needs to be calculated on every read access.
Signed-off-by: Hartmut Knaack <knaack.h@gmx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | drivers/iio/dac/m62332.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/iio/dac/m62332.c b/drivers/iio/dac/m62332.c index fdb3e042c14d..76e8b044b979 100644 --- a/drivers/iio/dac/m62332.c +++ b/drivers/iio/dac/m62332.c @@ -31,7 +31,6 @@ struct m62332_data { struct i2c_client *client; - u16 vref_mv; struct regulator *vcc; struct mutex mutex; u8 raw[M62332_CHANNELS]; @@ -89,11 +88,16 @@ static int m62332_read_raw(struct iio_dev *indio_dev, long mask) { struct m62332_data *data = iio_priv(indio_dev); + int ret; switch (mask) { case IIO_CHAN_INFO_SCALE: /* Corresponds to Vref / 2^(bits) */ - *val = data->vref_mv; + ret = regulator_get_voltage(data->vcc); + if (ret < 0) + return ret; + + *val = ret / 1000; /* mV */ *val2 = 8; return IIO_VAL_FRACTIONAL_LOG2; @@ -218,11 +222,6 @@ static int m62332_probe(struct i2c_client *client, indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->info = &m62332_info; - ret = regulator_get_voltage(data->vcc); - if (ret < 0) - return ret; - data->vref_mv = ret / 1000; /* mV */ - ret = iio_map_array_register(indio_dev, client->dev.platform_data); if (ret < 0) return ret; |