On Thu, Apr 22, 2021 at 1:17 PM Nuno Sa <nuno.sa@xxxxxxxxxx> wrote: > > Typically, in burst mode, the device cannot operate at it's full spi > speed. Hence, the spi transfers for burst mode have to take this into > account. With this change we avoid a potential race with the spi core as > drivers were 'hacking' the device 'max_speed_hz' directly in the > trigger handler. > Reviewed-by: Alexandru Ardelean <ardeleanalex@xxxxxxxxx> > Signed-off-by: Nuno Sa <nuno.sa@xxxxxxxxxx> > --- > drivers/iio/imu/adis_buffer.c | 4 ++++ > include/linux/iio/imu/adis.h | 2 ++ > 2 files changed, 6 insertions(+) > > diff --git a/drivers/iio/imu/adis_buffer.c b/drivers/iio/imu/adis_buffer.c > index dda367071980..82239da2f441 100644 > --- a/drivers/iio/imu/adis_buffer.c > +++ b/drivers/iio/imu/adis_buffer.c > @@ -51,9 +51,13 @@ static int adis_update_scan_mode_burst(struct iio_dev *indio_dev, > adis->xfer[0].tx_buf = tx; > adis->xfer[0].bits_per_word = 8; > adis->xfer[0].len = 2; > + if (adis->data->burst_max_speed_hz) > + adis->xfer[0].speed_hz = adis->data->burst_max_speed_hz; > adis->xfer[1].rx_buf = adis->buffer; > adis->xfer[1].bits_per_word = 8; > adis->xfer[1].len = burst_length; > + if (adis->data->burst_max_speed_hz) > + adis->xfer[1].speed_hz = adis->data->burst_max_speed_hz; > > spi_message_init(&adis->msg); > spi_message_add_tail(&adis->xfer[0], &adis->msg); > diff --git a/include/linux/iio/imu/adis.h b/include/linux/iio/imu/adis.h > index f9b728d490b1..cf49997d5903 100644 > --- a/include/linux/iio/imu/adis.h > +++ b/include/linux/iio/imu/adis.h > @@ -55,6 +55,7 @@ struct adis_timeout { > * this should be the minimum size supported by the device. > * @burst_max_len: Holds the maximum burst size when the device supports > * more than one burst mode with different sizes > + * @burst_max_speed_hz: Maximum spi speed that can be used in burst mode > */ > struct adis_data { > unsigned int read_delay; > @@ -83,6 +84,7 @@ struct adis_data { > unsigned int burst_reg_cmd; > unsigned int burst_len; > unsigned int burst_max_len; > + unsigned int burst_max_speed_hz; > }; > > /** > -- > 2.31.1 >