}
 
        dev_set_name(&spi->dev, "%s.%u", dev_name(&spi->controller->dev),
-                    spi->chip_select);
+                    spi_get_chipselect(spi, 0));
 }
 
 static int spi_dev_check(struct device *dev, void *data)
        struct spi_device *new_spi = data;
 
        if (spi->controller == new_spi->controller &&
-           spi->chip_select == new_spi->chip_select)
+           spi_get_chipselect(spi, 0) == spi_get_chipselect(new_spi, 0))
                return -EBUSY;
        return 0;
 }
        status = bus_for_each_dev(&spi_bus_type, NULL, spi, spi_dev_check);
        if (status) {
                dev_err(dev, "chipselect %d already in use\n",
-                               spi->chip_select);
+                               spi_get_chipselect(spi, 0));
                return status;
        }
 
        }
 
        if (ctlr->cs_gpiods)
-               spi->cs_gpiod = ctlr->cs_gpiods[spi->chip_select];
+               spi_set_csgpiod(spi, 0, ctlr->cs_gpiods[spi_get_chipselect(spi, 0)]);
 
        /*
         * Drivers may modify this initial i/o setup, but will
        int status;
 
        /* Chipselects are numbered 0..max; validate. */
-       if (spi->chip_select >= ctlr->num_chipselect) {
-               dev_err(dev, "cs%d >= max %d\n", spi->chip_select,
+       if (spi_get_chipselect(spi, 0) >= ctlr->num_chipselect) {
+               dev_err(dev, "cs%d >= max %d\n", spi_get_chipselect(spi, 0),
                        ctlr->num_chipselect);
                return -EINVAL;
        }
        struct device *dev = ctlr->dev.parent;
 
        /* Chipselects are numbered 0..max; validate. */
-       if (spi->chip_select >= ctlr->num_chipselect) {
-               dev_err(dev, "cs%d >= max %d\n", spi->chip_select,
+       if (spi_get_chipselect(spi, 0) >= ctlr->num_chipselect) {
+               dev_err(dev, "cs%d >= max %d\n", spi_get_chipselect(spi, 0),
                        ctlr->num_chipselect);
                return -EINVAL;
        }
 
        WARN_ON(strlen(chip->modalias) >= sizeof(proxy->modalias));
 
-       proxy->chip_select = chip->chip_select;
+       spi_set_chipselect(proxy, 0, chip->chip_select);
        proxy->max_speed_hz = chip->max_speed_hz;
        proxy->mode = chip->mode;
        proxy->irq = chip->irq;
         * Avoid calling into the driver (or doing delays) if the chip select
         * isn't actually changing from the last time this was called.
         */
-       if (!force && ((enable && spi->controller->last_cs == spi->chip_select) ||
-                               (!enable && spi->controller->last_cs != spi->chip_select)) &&
+       if (!force && ((enable && spi->controller->last_cs == spi_get_chipselect(spi, 0)) ||
+                      (!enable && spi->controller->last_cs != spi_get_chipselect(spi, 0))) &&
            (spi->controller->last_cs_mode_high == (spi->mode & SPI_CS_HIGH)))
                return;
 
        trace_spi_set_cs(spi, activate);
 
-       spi->controller->last_cs = enable ? spi->chip_select : -1;
+       spi->controller->last_cs = enable ? spi_get_chipselect(spi, 0) : -1;
        spi->controller->last_cs_mode_high = spi->mode & SPI_CS_HIGH;
 
-       if ((spi->cs_gpiod || !spi->controller->set_cs_timing) && !activate) {
+       if ((spi_get_csgpiod(spi, 0) || !spi->controller->set_cs_timing) && !activate)
                spi_delay_exec(&spi->cs_hold, NULL);
-       }
 
        if (spi->mode & SPI_CS_HIGH)
                enable = !enable;
 
-       if (spi->cs_gpiod) {
+       if (spi_get_csgpiod(spi, 0)) {
                if (!(spi->mode & SPI_NO_CS)) {
                        /*
                         * Historically ACPI has no means of the GPIO polarity and
                         * into account.
                         */
                        if (has_acpi_companion(&spi->dev))
-                               gpiod_set_value_cansleep(spi->cs_gpiod, !enable);
+                               gpiod_set_value_cansleep(spi_get_csgpiod(spi, 0), !enable);
                        else
                                /* Polarity handled by GPIO library */
-                               gpiod_set_value_cansleep(spi->cs_gpiod, activate);
+                               gpiod_set_value_cansleep(spi_get_csgpiod(spi, 0), activate);
                }
                /* Some SPI masters need both GPIO CS & slave_select */
                if ((spi->controller->flags & SPI_MASTER_GPIO_SS) &&
                spi->controller->set_cs(spi, !enable);
        }
 
-       if (spi->cs_gpiod || !spi->controller->set_cs_timing) {
+       if (spi_get_csgpiod(spi, 0) || !spi->controller->set_cs_timing) {
                if (activate)
                        spi_delay_exec(&spi->cs_setup, NULL);
                else
                        nc, rc);
                return rc;
        }
-       spi->chip_select = value;
+       spi_set_chipselect(spi, 0, value);
 
        /* Device speed */
        if (!of_property_read_u32(nc, "spi-max-frequency", &value))
        strscpy(ancillary->modalias, "dummy", sizeof(ancillary->modalias));
 
        /* Use provided chip-select for ancillary device */
-       ancillary->chip_select = chip_select;
+       spi_set_chipselect(ancillary, 0, chip_select);
 
        /* Take over SPI mode/speed from SPI main device */
        ancillary->max_speed_hz = spi->max_speed_hz;
        spi->mode               |= lookup.mode;
        spi->irq                = lookup.irq;
        spi->bits_per_word      = lookup.bits_per_word;
-       spi->chip_select        = lookup.chip_select;
+       spi_set_chipselect(spi, 0, lookup.chip_select);
 
        return spi;
 }
        struct device *parent = spi->controller->dev.parent;
        int status = 0;
 
-       if (spi->controller->set_cs_timing && !spi->cs_gpiod) {
+       if (spi->controller->set_cs_timing && !spi_get_csgpiod(spi, 0)) {
                if (spi->controller->auto_runtime_pm) {
                        status = pm_runtime_get_sync(parent);
                        if (status < 0) {
         * cs_change is set for each transfer.
         */
        if ((spi->mode & SPI_CS_WORD) && (!(ctlr->mode_bits & SPI_CS_WORD) ||
-                                         spi->cs_gpiod)) {
+                                         spi_get_csgpiod(spi, 0))) {
                size_t maxsize;
                int ret;