On Tue, Jul 28, 2020 at 6:15 PM Daniel Campello <campello@xxxxxxxxxxxx> wrote: > > Simplify compensation stage by using regmap_read_poll_timeout(). Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Signed-off-by: Daniel Campello <campello@xxxxxxxxxxxx> > --- > > drivers/iio/proximity/sx9310.c | 25 ++++++++++--------------- > 1 file changed, 10 insertions(+), 15 deletions(-) > > diff --git a/drivers/iio/proximity/sx9310.c b/drivers/iio/proximity/sx9310.c > index 2465064971d0a7..3956fd679c6db9 100644 > --- a/drivers/iio/proximity/sx9310.c > +++ b/drivers/iio/proximity/sx9310.c > @@ -796,7 +796,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; > > @@ -810,22 +810,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_COMPSTAT_MASK)) > - break; > - } > - > - if (i < 0) { > - dev_err(&data->client->dev, > - "initial compensation timed out: 0x%02x", val); > - ret = -ETIMEDOUT; > + 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, > + "0x02 << 3l compensation timed out: 0x%02x", > + val); > + return ret; > } > > -out: > regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, ctrl0); > return ret; > } > -- > 2.28.0.rc0.142.g3c755180ce-goog > -- With Best Regards, Andy Shevchenko