On Thu, Apr 08, 2021 at 06:33:47PM +0800, Clark Wang wrote: > When some drivers use spi to send data, spi_transfer->speed_hz is > not assigned. If spidev->max_speed_hz is not assigned as well, it > will cause an error in configuring the clock. > Add a check for these two values before configuring the clock. An > error will be returned when they are not assigned. For the case where the transfer speed is not set __spi_validate() will take the controller's maximum speed so the controller should just be able to unconditionally use the transfer's speed. Your issue is therefore that the controllers are sometimes not setting a maximum speed which this doesn't seem to fix AFAICT? I'd expect the driver to be able to work one out based on the input clock. > struct spi_imx_devtype_data { > void (*intctrl)(struct spi_imx_data *, int); > int (*prepare_message)(struct spi_imx_data *, struct spi_message *); > - int (*prepare_transfer)(struct spi_imx_data *, struct spi_device *, > - struct spi_transfer *); > + int (*prepare_transfer)(struct spi_imx_data *, struct spi_device *); > void (*trigger)(struct spi_imx_data *); > int (*rx_available)(struct spi_imx_data *); > void (*reset)(struct spi_imx_data *); This seems to be a fairly big and surprising refactoring for the described change. It's quite hard to tie the change to the changelog.