diff options
author | David Wu <david.wu@rock-chips.com> | 2019-01-07 18:01:06 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2019-01-24 15:40:04 +0800 |
commit | b24c62307ba3b80c5cceee2a2a48cce18fffee31 (patch) | |
tree | 3d1fa2a00464943e8453d463891da28c77348c84 | |
parent | 5c9731114e17a61bb28eb6e1790daf69a905cca4 (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.c | 17 |
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"); |