Commit dc46198f authored by Daniel Campello's avatar Daniel Campello Committed by Jonathan Cameron
Browse files

iio: sx9310: Use regmap_read_poll_timeout() for compensation



Simplify compensation stage by using regmap_read_poll_timeout().

Signed-off-by: default avatarDaniel Campello <campello@chromium.org>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 68aa360a
Loading
Loading
Loading
Loading
+10 −15
Original line number Diff line number Diff line
@@ -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;
}