Hello, On Mon, Jul 26, 2021 at 12:01:02PM +0200, Marek Vasut wrote: > drivers/spi/spi-imx.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c > index 593b63be73de8..cb9f7261c4385 100644 > --- a/drivers/spi/spi-imx.c > +++ b/drivers/spi/spi-imx.c > @@ -505,7 +505,9 @@ static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx, > struct spi_message *msg) > { > struct spi_device *spi = msg->spi; > + struct spi_transfer *xfer; > u32 ctrl = MX51_ECSPI_CTRL_ENABLE; > + u32 min_speed_hz = ~0U; > u32 testreg, delay; > u32 cfg = readl(spi_imx->base + MX51_ECSPI_CONFIG); > > @@ -577,8 +579,20 @@ static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx, > * be asserted before the SCLK polarity changes, which would disrupt > * the SPI communication as the device on the other end would consider > * the change of SCLK polarity as a clock tick already. > + * > + * Because spi_imx->spi_bus_clk is only set in bitbang prepare_message > + * callback, iterate over all the transfers in spi_message, find the > + * one with lowest bus frequency, and use that bus frequency for the > + * delay calculation. In case all transfers have speed_hz == 0, then > + * min_speed_hz is ~0 and the resulting delay is zero. > */ > - delay = (2 * 1000000) / spi_imx->spi_bus_clk; > + list_for_each_entry(xfer, &msg->transfers, transfer_list) { > + if (!xfer->speed_hz) > + continue; > + min_speed_hz = min(xfer->speed_hz, min_speed_hz); > + } > + > + delay = (2 * 1000000) / min_speed_hz; It might already be too late as Mark already send out his applied mail, but still: Acked-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |
Attachment:
signature.asc
Description: PGP signature