Commit 921fece3 authored by Angelo Dureghello's avatar Angelo Dureghello Committed by Jonathan Cameron
Browse files

iio: dac: adi-axi-dac: fix bus read



Fix bus read function.

Testing the driver, on a random basis, wrong reads was detected, mainly
by a wrong DAC chip ID read at first boot.
Before reading the expected value from the AXI regmap, need always to
wait for busy flag to be cleared.

Fixes: e61d7178 ("iio: dac: adi-axi-dac: extend features")
Signed-off-by: default avatarAngelo Dureghello <adureghello@baylibre.com>
Reviewed-by: default avatarNuno Sá <nuno.sa@analog.com>
Link: https://patch.msgid.link/20250409-ad3552r-fix-bus-read-v2-1-34d3b21e8ca0@baylibre.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 89944d88
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -707,6 +707,7 @@ static int axi_dac_bus_reg_read(struct iio_backend *back, u32 reg, u32 *val,
{
	struct axi_dac_state *st = iio_backend_get_priv(back);
	int ret;
	u32 ival;

	guard(mutex)(&st->lock);

@@ -719,6 +720,13 @@ static int axi_dac_bus_reg_read(struct iio_backend *back, u32 reg, u32 *val,
	if (ret)
		return ret;

	ret = regmap_read_poll_timeout(st->regmap,
				AXI_DAC_UI_STATUS_REG, ival,
				FIELD_GET(AXI_DAC_UI_STATUS_IF_BUSY, ival) == 0,
				10, 100 * KILO);
	if (ret)
		return ret;

	return regmap_read(st->regmap, AXI_DAC_CUSTOM_RD_REG, val);
}