ARM: spitz: Use software nodes to describe SPI CS lines
authorLinus Walleij <linus.walleij@linaro.org>
Fri, 28 Jun 2024 18:08:45 +0000 (11:08 -0700)
committerArnd Bergmann <arnd@arndb.de>
Tue, 9 Jul 2024 13:21:15 +0000 (15:21 +0200)
Convert the Spitz to use software nodes for specifying SPI CS. Because
the SPI core can figure out the number of chipselects from the number
of GPIO handles specified in properties, setting "num-cs" property is
no longer needed.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20240628180852.1738922-6-dmitry.torokhov@gmail.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
arch/arm/mach-pxa/pxa27x.c
arch/arm/mach-pxa/spitz.c

index b135b9ef665c0ba0c383cf7e1a22b5e97572539f..f8382477d629eadb7e5ac366ff5b5c6923c22609 100644 (file)
@@ -341,6 +341,7 @@ static int __init pxa27x_init(void)
                register_syscore_ops(&pxa2xx_mfp_syscore_ops);
 
                if (!of_have_populated_dt()) {
+                       software_node_register(&pxa2xx_gpiochip_node);
                        pxa2xx_set_dmac_info(&pxa27x_dma_pdata);
                        ret = platform_add_devices(devices,
                                                   ARRAY_SIZE(devices));
index b14eb2a54f80d3129a13b0b6a9fa2429f081c4f0..504d04bb2df7337e391b85e242367c69e6745b96 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/gpio_keys.h>
 #include <linux/gpio.h>
 #include <linux/gpio/machine.h>
+#include <linux/gpio/property.h>
 #include <linux/leds.h>
 #include <linux/i2c.h>
 #include <linux/platform_data/i2c-pxa.h>
@@ -28,6 +29,7 @@
 #include <linux/input/matrix_keypad.h>
 #include <linux/regulator/machine.h>
 #include <linux/io.h>
+#include <linux/property.h>
 #include <linux/reboot.h>
 #include <linux/memblock.h>
 
@@ -128,7 +130,6 @@ static unsigned long spitz_pin_config[] __initdata = {
        GPIO1_GPIO | WAKEUP_ON_EDGE_FALL,       /* SPITZ_GPIO_RESET */
 };
 
-
 /******************************************************************************
  * Scoop GPIO expander
  ******************************************************************************/
@@ -565,18 +566,17 @@ static struct spi_board_info spitz_spi_devices[] = {
        },
 };
 
-static struct gpiod_lookup_table spitz_spi_gpio_table = {
-       .dev_id = "spi2",
-       .table = {
-               GPIO_LOOKUP_IDX("gpio-pxa", SPITZ_GPIO_ADS7846_CS, "cs", 0, GPIO_ACTIVE_LOW),
-               GPIO_LOOKUP_IDX("gpio-pxa", SPITZ_GPIO_LCDCON_CS, "cs", 1, GPIO_ACTIVE_LOW),
-               GPIO_LOOKUP_IDX("gpio-pxa", SPITZ_GPIO_MAX1111_CS, "cs", 2, GPIO_ACTIVE_LOW),
-               { },
-       },
+static const struct software_node_ref_args spitz_spi_gpio_refs[] = {
+       SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, SPITZ_GPIO_ADS7846_CS,
+                               GPIO_ACTIVE_LOW),
+       SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, SPITZ_GPIO_LCDCON_CS,
+                               GPIO_ACTIVE_LOW),
+       SOFTWARE_NODE_REFERENCE(&pxa2xx_gpiochip_node, SPITZ_GPIO_MAX1111_CS,
+                               GPIO_ACTIVE_LOW),
 };
 
 static const struct property_entry spitz_spi_properties[] = {
-       PROPERTY_ENTRY_U32("num-cs", 3),
+       PROPERTY_ENTRY_REF_ARRAY("gpios", spitz_spi_gpio_refs),
        { }
 };
 
@@ -598,7 +598,6 @@ static void __init spitz_spi_init(void)
                gpiod_add_lookup_table(&spitz_lcdcon_gpio_table);
 
        gpiod_add_lookup_table(&spitz_ads7846_gpio_table);
-       gpiod_add_lookup_table(&spitz_spi_gpio_table);
 
        pd = platform_device_register_full(&spitz_spi_device_info);
        err = PTR_ERR_OR_ZERO(pd);