spi: Don't call spi_get_gpio_descs() before device name is set
authorAndrey Smirnov <andrew.smirnov@gmail.com>
Wed, 3 Apr 2019 04:01:28 +0000 (21:01 -0700)
committerMark Brown <broonie@kernel.org>
Fri, 5 Apr 2019 03:23:28 +0000 (10:23 +0700)
Move code calling spi_get_gpio_descs() to happen after ctlr->dev's
name is set in order to have proper GPIO consumer names.

Before:

cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/40049000.gpio, vf610-gpio:
 gpio-6   (                    |regulator-usb0-vbus ) out lo

gpiochip1: GPIOs 32-63, parent: platform/4004a000.gpio, vf610-gpio:
 gpio-36  (                    |scl                 ) in  hi
 gpio-37  (                    |sda                 ) in  hi
 gpio-40  (                    |(null) CS1          ) out lo
 gpio-41  (                    |(null) CS0          ) out lo ACTIVE LOW
 gpio-42  (                    |miso                ) in  hi
 gpio-43  (                    |mosi                ) in  lo
 gpio-44  (                    |sck                 ) out lo

After:

cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/40049000.gpio, vf610-gpio:
 gpio-6   (                    |regulator-usb0-vbus ) out lo

gpiochip1: GPIOs 32-63, parent: platform/4004a000.gpio, vf610-gpio:
 gpio-36  (                    |scl                 ) in  hi
 gpio-37  (                    |sda                 ) in  hi
 gpio-40  (                    |spi0 CS1            ) out lo
 gpio-41  (                    |spi0 CS0            ) out lo ACTIVE LOW
 gpio-42  (                    |miso                ) in  hi
 gpio-43  (                    |mosi                ) in  lo
 gpio-44  (                    |sck                 ) out lo

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Chris Healy <cphealy@gmail.com>
Cc: linux-spi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi.c

index 2ad20c7..a83fcdd 100644 (file)
@@ -2281,24 +2281,6 @@ int spi_register_controller(struct spi_controller *ctlr)
        if (status)
                return status;
 
-       if (!spi_controller_is_slave(ctlr)) {
-               if (ctlr->use_gpio_descriptors) {
-                       status = spi_get_gpio_descs(ctlr);
-                       if (status)
-                               return status;
-                       /*
-                        * A controller using GPIO descriptors always
-                        * supports SPI_CS_HIGH if need be.
-                        */
-                       ctlr->mode_bits |= SPI_CS_HIGH;
-               } else {
-                       /* Legacy code path for GPIOs from DT */
-                       status = of_spi_register_master(ctlr);
-                       if (status)
-                               return status;
-               }
-       }
-
        /* even if it's just one always-selected device, there must
         * be at least one chipselect
         */
@@ -2355,6 +2337,25 @@ int spi_register_controller(struct spi_controller *ctlr)
         * registration fails if the bus ID is in use.
         */
        dev_set_name(&ctlr->dev, "spi%u", ctlr->bus_num);
+
+       if (!spi_controller_is_slave(ctlr)) {
+               if (ctlr->use_gpio_descriptors) {
+                       status = spi_get_gpio_descs(ctlr);
+                       if (status)
+                               return status;
+                       /*
+                        * A controller using GPIO descriptors always
+                        * supports SPI_CS_HIGH if need be.
+                        */
+                       ctlr->mode_bits |= SPI_CS_HIGH;
+               } else {
+                       /* Legacy code path for GPIOs from DT */
+                       status = of_spi_register_master(ctlr);
+                       if (status)
+                               return status;
+               }
+       }
+
        status = device_add(&ctlr->dev);
        if (status < 0) {
                /* free bus id */