iio: adc: ti-ads1015: write config register only on change
There is no point writing ADS1015_CFG_REG when configuration didn't change. Avoid that. Cc: Daniel Baluta <daniel.baluta@gmail.com> Cc: Jonathan Cameron <jic23@kernel.org> Signed-off-by: Ladislav Michl <ladis@linux-mips.org> Reviewed-by: Akinobu Mita <akinobu.mita@gmail.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:

committed by
Jonathan Cameron

parent
4e57562b48
commit
d1c11dc27e
@@ -332,7 +332,7 @@ static int ads1015_set_power_state(struct ads1015_data *data, bool on)
|
|||||||
static
|
static
|
||||||
int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
|
int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
|
||||||
{
|
{
|
||||||
int ret, pga, dr, conv_time;
|
int ret, pga, dr, dr_old, conv_time;
|
||||||
unsigned int old, mask, cfg;
|
unsigned int old, mask, cfg;
|
||||||
|
|
||||||
if (chan < 0 || chan >= ADS1015_CHANNELS)
|
if (chan < 0 || chan >= ADS1015_CHANNELS)
|
||||||
@@ -358,15 +358,14 @@ int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cfg = (old & ~mask) | (cfg & mask);
|
cfg = (old & ~mask) | (cfg & mask);
|
||||||
|
if (old != cfg) {
|
||||||
ret = regmap_write(data->regmap, ADS1015_CFG_REG, cfg);
|
ret = regmap_write(data->regmap, ADS1015_CFG_REG, cfg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
data->conv_invalid = true;
|
||||||
if (old != cfg || data->conv_invalid) {
|
}
|
||||||
int dr_old = (old & ADS1015_CFG_DR_MASK) >>
|
if (data->conv_invalid) {
|
||||||
ADS1015_CFG_DR_SHIFT;
|
dr_old = (old & ADS1015_CFG_DR_MASK) >> ADS1015_CFG_DR_SHIFT;
|
||||||
|
|
||||||
conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr_old]);
|
conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr_old]);
|
||||||
conv_time += DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
|
conv_time += DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
|
||||||
usleep_range(conv_time, conv_time + 1);
|
usleep_range(conv_time, conv_time + 1);
|
||||||
|
Reference in New Issue
Block a user