summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Wu <david.wu@rock-chips.com>2019-01-07 18:01:06 +0800
committerTao Huang <huangtao@rock-chips.com>2019-01-24 15:40:04 +0800
commitb24c62307ba3b80c5cceee2a2a48cce18fffee31 (patch)
tree3d1fa2a00464943e8453d463891da28c77348c84
parent5c9731114e17a61bb28eb6e1790daf69a905cca4 (diff)
iio: adc: rockchip_saradc: Just get referenced voltage once at probe
The referenced voltage is not changed after initiation, so just only get referenced voltage once. Change-Id: I1eeab03f68855fafe010db328ec7bbcfa7d52310 Signed-off-by: David Wu <david.wu@rock-chips.com>
-rw-r--r--drivers/iio/adc/rockchip_saradc.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/iio/adc/rockchip_saradc.c b/drivers/iio/adc/rockchip_saradc.c
index 85d701291654..2d6389b5b430 100644
--- a/drivers/iio/adc/rockchip_saradc.c
+++ b/drivers/iio/adc/rockchip_saradc.c
@@ -55,6 +55,7 @@ struct rockchip_saradc {
struct clk *clk;
struct completion completion;
struct regulator *vref;
+ int uv_vref;
struct reset_control *reset;
const struct rockchip_saradc_data *data;
u16 last_val;
@@ -65,7 +66,6 @@ static int rockchip_saradc_read_raw(struct iio_dev *indio_dev,
int *val, int *val2, long mask)
{
struct rockchip_saradc *info = iio_priv(indio_dev);
- int ret;
switch (mask) {
case IIO_CHAN_INFO_RAW:
@@ -93,13 +93,7 @@ static int rockchip_saradc_read_raw(struct iio_dev *indio_dev,
mutex_unlock(&indio_dev->mlock);
return IIO_VAL_INT;
case IIO_CHAN_INFO_SCALE:
- ret = regulator_get_voltage(info->vref);
- if (ret < 0) {
- dev_err(&indio_dev->dev, "failed to get voltage\n");
- return ret;
- }
-
- *val = ret / 1000;
+ *val = info->uv_vref / 1000;
*val2 = info->data->num_bits;
return IIO_VAL_FRACTIONAL_LOG2;
default:
@@ -298,6 +292,13 @@ static int rockchip_saradc_probe(struct platform_device *pdev)
return ret;
}
+ info->uv_vref = regulator_get_voltage(info->vref);
+ if (info->uv_vref < 0) {
+ dev_err(&pdev->dev, "failed to get voltage\n");
+ ret = info->uv_vref;
+ goto err_reg_voltage;
+ }
+
ret = clk_prepare_enable(info->pclk);
if (ret < 0) {
dev_err(&pdev->dev, "failed to enable pclk\n");