Message ID | 20220114132608.241-1-nuno.sa@analog.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | iio: adis16480: fix buffering for devices with no burst mode | expand |
On Fri, 14 Jan 2022 14:26:08 +0100 Nuno Sá <nuno.sa@analog.com> wrote: > The trigger handler defined in the driver assumes that burst mode is > being used. Hence, for devices that do not support it, we have to use > the adis library default trigger implementation. > > Tested-by: Julia Pineda <julia.pineda@analog.com> > Fixes: 941f130881fa9 ("iio: adis16480: support burst read function") > Signed-off-by: Nuno Sá <nuno.sa@analog.com> Applied to the fixes-togreg branch of iio.git and marked for stable. Note I'll probably rebase that branch after rc1 before sending a pull request. Thanks, Jonathan > --- > drivers/iio/imu/adis16480.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c > index ed129321a14d..f9b4540db1f4 100644 > --- a/drivers/iio/imu/adis16480.c > +++ b/drivers/iio/imu/adis16480.c > @@ -1403,6 +1403,7 @@ static int adis16480_probe(struct spi_device *spi) > { > const struct spi_device_id *id = spi_get_device_id(spi); > const struct adis_data *adis16480_data; > + irq_handler_t trigger_handler = NULL; > struct iio_dev *indio_dev; > struct adis16480 *st; > int ret; > @@ -1474,8 +1475,12 @@ static int adis16480_probe(struct spi_device *spi) > st->clk_freq = st->chip_info->int_clk; > } > > + /* Only use our trigger handler if burst mode is supported */ > + if (adis16480_data->burst_len) > + trigger_handler = adis16480_trigger_handler; > + > ret = devm_adis_setup_buffer_and_trigger(&st->adis, indio_dev, > - adis16480_trigger_handler); > + trigger_handler); > if (ret) > return ret; >
diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c index ed129321a14d..f9b4540db1f4 100644 --- a/drivers/iio/imu/adis16480.c +++ b/drivers/iio/imu/adis16480.c @@ -1403,6 +1403,7 @@ static int adis16480_probe(struct spi_device *spi) { const struct spi_device_id *id = spi_get_device_id(spi); const struct adis_data *adis16480_data; + irq_handler_t trigger_handler = NULL; struct iio_dev *indio_dev; struct adis16480 *st; int ret; @@ -1474,8 +1475,12 @@ static int adis16480_probe(struct spi_device *spi) st->clk_freq = st->chip_info->int_clk; } + /* Only use our trigger handler if burst mode is supported */ + if (adis16480_data->burst_len) + trigger_handler = adis16480_trigger_handler; + ret = devm_adis_setup_buffer_and_trigger(&st->adis, indio_dev, - adis16480_trigger_handler); + trigger_handler); if (ret) return ret;