Patch "spi: Fix SPI slave probe failure" has been added to the 6.9-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    spi: Fix SPI slave probe failure

to the 6.9-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     spi-fix-spi-slave-probe-failure.patch
and it can be found in the queue-6.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 3828fc6031ecf6a48b1ae02372b5092eb58bf922
Author: Amit Kumar Mahapatra <amit.kumar-mahapatra@xxxxxxx>
Date:   Mon Jun 17 21:00:52 2024 +0530

    spi: Fix SPI slave probe failure
    
    [ 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@xxxxxxx>
    Link: https://msgid.link/r/20240617153052.26636-1-amit.kumar-mahapatra@xxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 2cea7aeb10f95..c349d6012625a 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -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 */




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux