spi: core: Only check bits_per_word validity when explicitly provided
authorPaul Kocialkowski <paul.kocialkowski@bootlin.com>
Tue, 12 Apr 2022 12:22:07 +0000 (14:22 +0200)
committerMark Brown <broonie@kernel.org>
Tue, 12 Apr 2022 16:17:21 +0000 (17:17 +0100)
On SPI device probe, the core will call spi_setup in spi_add_device
before the corresponding driver was probed. When this happens, the
bits_per_word member of the device is not yet set by the driver,
resulting in the default being set to 8 bits-per-word.

However some controllers do not support 8 bits-per-word at all, which
results in a failure when checking the bits-per-word validity.

In order to support these devices, skip the bits-per-word validity
check when it is not explicitly provided by drivers.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Link: https://lore.kernel.org/r/20220412122207.130181-1-paul.kocialkowski@bootlin.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi.c

index c4dd1200fe99166f81285cdd9a0d09bb4a211f01..3d4dddd1b456fc879ed620a32dc1818880ceca84 100644 (file)
@@ -3513,13 +3513,18 @@ int spi_setup(struct spi_device *spi)
                return -EINVAL;
        }
 
-       if (!spi->bits_per_word)
+       if (!spi->bits_per_word) {
                spi->bits_per_word = 8;
-
-       status = __spi_validate_bits_per_word(spi->controller,
-                                             spi->bits_per_word);
-       if (status)
-               return status;
+       } else {
+               /*
+                * Some controllers may not support the default 8 bits-per-word
+                * so only perform the check when this is explicitly provided.
+                */
+               status = __spi_validate_bits_per_word(spi->controller,
+                                                     spi->bits_per_word);
+               if (status)
+                       return status;
+       }
 
        if (spi->controller->max_speed_hz &&
            (!spi->max_speed_hz ||