iio: sx9310: Use regmap_read_poll_timeout() for compensation

Simplify compensation stage by using regmap_read_poll_timeout().

Signed-off-by: Daniel Campello <campello@chromium.org>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Daniel Campello 2020-08-03 17:58:08 -06:00 committed by Jonathan Cameron
parent 68aa360a77
commit dc46198f27

View File

@ -797,7 +797,7 @@ static const struct sx9310_reg_default sx9310_default_regs[] = {
static int sx9310_init_compensation(struct iio_dev *indio_dev)
{
struct sx9310_data *data = iio_priv(indio_dev);
int i, ret;
int ret;
unsigned int val;
unsigned int ctrl0;
@ -811,22 +811,17 @@ static int sx9310_init_compensation(struct iio_dev *indio_dev)
if (ret < 0)
return ret;
for (i = 100; i >= 0; i--) {
msleep(20);
ret = regmap_read(data->regmap, SX9310_REG_STAT1, &val);
if (ret < 0)
goto out;
if (!(val & SX9310_REG_STAT1_COMPSTAT_MASK))
break;
}
if (i < 0) {
ret = regmap_read_poll_timeout(data->regmap, SX9310_REG_STAT1, val,
!(val & SX9310_REG_STAT1_COMPSTAT_MASK),
20000, 2000000);
if (ret) {
if (ret == -ETIMEDOUT)
dev_err(&data->client->dev,
"initial compensation timed out: 0x%02x", val);
ret = -ETIMEDOUT;
"initial compensation timed out: 0x%02x\n",
val);
return ret;
}
out:
regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, ctrl0);
return ret;
}