]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
spi: spi-fsl-lpspi: Clamp too high speed_hz
authorStefan Wahren <wahrenst@gmx.net>
Thu, 7 Aug 2025 10:07:42 +0000 (12:07 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 7 Aug 2025 13:46:32 +0000 (14:46 +0100)
Currently the driver is not able to handle the case that a SPI device
specifies a higher spi-max-frequency than half of per-clk:

    per-clk should be at least two times of transfer speed

Fix this by clamping to the max possible value and use the minimum SCK
period of 2 cycles.

Fixes: 77736a98b859 ("spi: lpspi: add the error info of transfer speed setting")
Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Link: https://patch.msgid.link/20250807100742.9917-1-wahrenst@gmx.net
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-fsl-lpspi.c

index 67d4000c3cef5b6da519355797c06d7323fedaea..313e444a34f3e849b3df31eb045e4edd5b219af6 100644 (file)
@@ -330,13 +330,11 @@ static int fsl_lpspi_set_bitrate(struct fsl_lpspi_data *fsl_lpspi)
        }
 
        if (config.speed_hz > perclk_rate / 2) {
-               dev_err(fsl_lpspi->dev,
-                     "per-clk should be at least two times of transfer speed");
-               return -EINVAL;
+               div = 2;
+       } else {
+               div = DIV_ROUND_UP(perclk_rate, config.speed_hz);
        }
 
-       div = DIV_ROUND_UP(perclk_rate, config.speed_hz);
-
        for (prescale = 0; prescale <= prescale_max; prescale++) {
                scldiv = div / (1 << prescale) - 2;
                if (scldiv >= 0 && scldiv < 256) {