]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
spi: Fix SPI slave probe failure
authorAmit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
Mon, 17 Jun 2024 15:30:52 +0000 (21:00 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jun 2024 11:52:25 +0000 (13:52 +0200)
[ Upstream commit 2c1b7bbe253986619fa5623a13055316e730e746 ]

While adding a SPI device, the SPI core ensures that multiple logical CS
doesn't map to the same physical CS. For example, spi->chip_select[0] !=
spi->chip_select[1] and so forth. However, unlike the SPI master, the SPI
slave doesn't have the list of chip selects, this leads to probe failure
when the SPI controller is configured as slave. Update the
__spi_add_device() function to perform this check only if the SPI
controller is configured as master.

Fixes: 4d8ff6b0991d ("spi: Add multi-cs memories support in SPI core")
Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
Link: https://msgid.link/r/20240617153052.26636-1-amit.kumar-mahapatra@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/spi/spi.c

index 2cea7aeb10f95b9a4f339cf3e396c640d7aeddb8..c349d6012625a20d99b61802c2885e7f4e6c96ea 100644 (file)
@@ -685,10 +685,12 @@ static int __spi_add_device(struct spi_device *spi)
         * Make sure that multiple logical CS doesn't map to the same physical CS.
         * For example, spi->chip_select[0] != spi->chip_select[1] and so on.
         */
-       for (idx = 0; idx < SPI_CS_CNT_MAX; idx++) {
-               status = spi_dev_check_cs(dev, spi, idx, spi, idx + 1);
-               if (status)
-                       return status;
+       if (!spi_controller_is_target(ctlr)) {
+               for (idx = 0; idx < SPI_CS_CNT_MAX; idx++) {
+                       status = spi_dev_check_cs(dev, spi, idx, spi, idx + 1);
+                       if (status)
+                               return status;
+               }
        }
 
        /* Set the bus ID string */