diff options
Diffstat (limited to 'drivers/iio/addac/ad74413r.c')
-rw-r--r-- | drivers/iio/addac/ad74413r.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/drivers/iio/addac/ad74413r.c b/drivers/iio/addac/ad74413r.c index 6b0e8218f1..7af3e4b8fe 100644 --- a/drivers/iio/addac/ad74413r.c +++ b/drivers/iio/addac/ad74413r.c @@ -442,11 +442,29 @@ static int ad74413r_set_channel_function(struct ad74413r_state *st, int ret; ret = regmap_update_bits(st->regmap, + AD74413R_REG_CH_FUNC_SETUP_X(channel), + AD74413R_CH_FUNC_SETUP_MASK, + CH_FUNC_HIGH_IMPEDANCE); + if (ret) + return ret; + + /* Set DAC code to 0 prior to changing channel function */ + ret = ad74413r_set_channel_dac_code(st, channel, 0); + if (ret) + return ret; + + /* Delay required before transition to new desired mode */ + usleep_range(130, 150); + + ret = regmap_update_bits(st->regmap, AD74413R_REG_CH_FUNC_SETUP_X(channel), AD74413R_CH_FUNC_SETUP_MASK, func); if (ret) return ret; + /* Delay required before updating the new DAC code */ + usleep_range(150, 170); + if (func == CH_FUNC_CURRENT_INPUT_LOOP_POWER) ret = regmap_set_bits(st->regmap, AD74413R_REG_ADC_CONFIG_X(channel), @@ -705,8 +723,8 @@ static int ad74413r_get_input_current_scale(struct ad74413r_state *st, return IIO_VAL_FRACTIONAL; } -static int ad74413_get_input_current_offset(struct ad74413r_state *st, - unsigned int channel, int *val) +static int ad74413r_get_input_current_offset(struct ad74413r_state *st, + unsigned int channel, int *val) { unsigned int range; int voltage_range; @@ -991,7 +1009,7 @@ static int ad74413r_read_raw(struct iio_dev *indio_dev, return ad74413r_get_input_voltage_offset(st, chan->channel, val); case IIO_CURRENT: - return ad74413_get_input_current_offset(st, + return ad74413r_get_input_current_offset(st, chan->channel, val); default: return -EINVAL; |