Merge remote-tracking branch 'spi/for-5.12' into spi-linus
[sfrench/cifs-2.6.git] / drivers / spi / spi.c
index e353b7a9e54ebad4f5aa3d3262f474c289e3dc57..56c173869d9754ea13d8cf621306e364ea9d9d79 100644 (file)
@@ -2057,6 +2057,7 @@ of_register_spi_device(struct spi_controller *ctlr, struct device_node *nc)
        /* Store a pointer to the node in the device structure */
        of_node_get(nc);
        spi->dev.of_node = nc;
+       spi->dev.fwnode = of_fwnode_handle(nc);
 
        /* Register the new device */
        rc = spi_add_device(spi);
@@ -2621,9 +2622,10 @@ static int spi_get_gpio_descs(struct spi_controller *ctlr)
                native_cs_mask |= BIT(i);
        }
 
-       ctlr->unused_native_cs = ffz(native_cs_mask);
-       if (num_cs_gpios && ctlr->max_native_cs &&
-           ctlr->unused_native_cs >= ctlr->max_native_cs) {
+       ctlr->unused_native_cs = ffs(~native_cs_mask) - 1;
+
+       if ((ctlr->flags & SPI_MASTER_GPIO_SS) && num_cs_gpios &&
+           ctlr->max_native_cs && ctlr->unused_native_cs >= ctlr->max_native_cs) {
                dev_err(dev, "No unused native chip select available\n");
                return -EINVAL;
        }