spi: move unused device CS initialization to __spi_add_device()
authorJonas Gorski <jonas.gorski@gmail.com>
Mon, 15 Sep 2025 18:37:21 +0000 (20:37 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 22 Sep 2025 08:29:42 +0000 (09:29 +0100)
Using spi_device::num_chipselect, initialize unused device CS as invalid
at registration time in __spi_add_device(), and drop it from the
different allocation paths.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Link: https://patch.msgid.link/20250915183725.219473-4-jonas.gorski@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi.c

index 6598fb8..ad965ea 100644 (file)
@@ -703,6 +703,10 @@ static int __spi_add_device(struct spi_device *spi)
                }
        }
 
+       /* Initialize unused logical CS as invalid */
+       for (idx = spi->num_chipselect; idx < SPI_CS_CNT_MAX; idx++)
+               spi_set_chipselect(spi, idx, SPI_INVALID_CS);
+
        /* Set the bus ID string */
        spi_dev_set_name(spi);
 
@@ -780,14 +784,6 @@ int spi_add_device(struct spi_device *spi)
 }
 EXPORT_SYMBOL_GPL(spi_add_device);
 
-static void spi_set_all_cs_unused(struct spi_device *spi)
-{
-       u8 idx;
-
-       for (idx = 0; idx < SPI_CS_CNT_MAX; idx++)
-               spi_set_chipselect(spi, idx, SPI_INVALID_CS);
-}
-
 /**
  * spi_new_device - instantiate one new SPI device
  * @ctlr: Controller to which device is connected
@@ -823,7 +819,6 @@ struct spi_device *spi_new_device(struct spi_controller *ctlr,
        WARN_ON(strlen(chip->modalias) >= sizeof(proxy->modalias));
 
        /* Use provided chip-select for proxy device */
-       spi_set_all_cs_unused(proxy);
        spi_set_chipselect(proxy, 0, chip->chip_select);
 
        proxy->max_speed_hz = chip->max_speed_hz;
@@ -2443,8 +2438,6 @@ static int of_spi_parse_dt(struct spi_controller *ctlr, struct spi_device *spi,
                return -EINVAL;
        }
 
-       spi_set_all_cs_unused(spi);
-
        /* Device address */
        rc = of_property_read_variable_u32_array(nc, "reg", &cs[0], 1,
                                                 SPI_CS_CNT_MAX);
@@ -2589,7 +2582,6 @@ struct spi_device *spi_new_ancillary_device(struct spi_device *spi,
        strscpy(ancillary->modalias, "dummy", sizeof(ancillary->modalias));
 
        /* Use provided chip-select for ancillary device */
-       spi_set_all_cs_unused(ancillary);
        spi_set_chipselect(ancillary, 0, chip_select);
 
        /* Take over SPI mode/speed from SPI main device */
@@ -2837,7 +2829,6 @@ struct spi_device *acpi_spi_device_alloc(struct spi_controller *ctlr,
                return ERR_PTR(-ENOMEM);
        }
 
-       spi_set_all_cs_unused(spi);
        spi_set_chipselect(spi, 0, lookup.chip_select);
 
        ACPI_COMPANION_SET(&spi->dev, adev);