Message ID | 20250110-wip-bl-ad3552r-axi-v0-iio-testing-carlos-v3-3-ab42aef0d840@baylibre.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | iio: ad3552r-hs: add support for ad3541/42r Angelo Dureghello | expand |
On Fri, 2025-01-10 at 11:24 +0100, Angelo Dureghello wrote: > From: Angelo Dureghello <adureghello@baylibre.com> > > Change suggested from the AXI HDL team, modify the function > axi_dac_data_stream_enable() to check for interface busy, to avoid > possible issues when starting the stream. > > Fixes: e61d7178429a ("iio: dac: adi-axi-dac: extend features") > Signed-off-by: Angelo Dureghello <adureghello@baylibre.com> > --- LGTM... One minor thing that come to mind is that if it wouldn't be more intuitive to return -EBUSY in case of a timeout? Anyways: Reviewed-by: Nuno Sa <nuno.sa@analog.com> > drivers/iio/dac/adi-axi-dac.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/iio/dac/adi-axi-dac.c b/drivers/iio/dac/adi-axi-dac.c > index b143f7ed6847..ac871deb8063 100644 > --- a/drivers/iio/dac/adi-axi-dac.c > +++ b/drivers/iio/dac/adi-axi-dac.c > @@ -585,6 +585,14 @@ static int axi_dac_ddr_disable(struct iio_backend *back) > static int axi_dac_data_stream_enable(struct iio_backend *back) > { > struct axi_dac_state *st = iio_backend_get_priv(back); > + int ret, val; > + > + ret = regmap_read_poll_timeout(st->regmap, > + AXI_DAC_UI_STATUS_REG, val, > + FIELD_GET(AXI_DAC_UI_STATUS_IF_BUSY, val) == > 0, > + 10, 100 * KILO); > + if (ret) > + return ret; > > return regmap_set_bits(st->regmap, AXI_DAC_CUSTOM_CTRL_REG, > AXI_DAC_CUSTOM_CTRL_STREAM_ENABLE); >
diff --git a/drivers/iio/dac/adi-axi-dac.c b/drivers/iio/dac/adi-axi-dac.c index b143f7ed6847..ac871deb8063 100644 --- a/drivers/iio/dac/adi-axi-dac.c +++ b/drivers/iio/dac/adi-axi-dac.c @@ -585,6 +585,14 @@ static int axi_dac_ddr_disable(struct iio_backend *back) static int axi_dac_data_stream_enable(struct iio_backend *back) { struct axi_dac_state *st = iio_backend_get_priv(back); + int ret, val; + + ret = regmap_read_poll_timeout(st->regmap, + AXI_DAC_UI_STATUS_REG, val, + FIELD_GET(AXI_DAC_UI_STATUS_IF_BUSY, val) == 0, + 10, 100 * KILO); + if (ret) + return ret; return regmap_set_bits(st->regmap, AXI_DAC_CUSTOM_CTRL_REG, AXI_DAC_CUSTOM_CTRL_STREAM_ENABLE);