]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ARM: spitz: Use software nodes to describe audio GPIOs
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 28 Jun 2024 18:08:46 +0000 (11:08 -0700)
committerArnd Bergmann <arnd@arndb.de>
Tue, 9 Jul 2024 13:21:15 +0000 (15:21 +0200)
Convert Spitz to use software nodes for specifying GPIOs for the audio
chip.

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-7-dmitry.torokhov@gmail.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
arch/arm/mach-pxa/spitz.c

index 504d04bb2df7337e391b85e242367c69e6745b96..278d49ed7a9c74b0b8650fe2d29ba5566415c1f1 100644 (file)
@@ -130,6 +130,20 @@ static unsigned long spitz_pin_config[] __initdata = {
        GPIO1_GPIO | WAKEUP_ON_EDGE_FALL,       /* SPITZ_GPIO_RESET */
 };
 
+static const struct software_node spitz_scoop_1_gpiochip_node = {
+       .name = "sharp-scoop.0",
+};
+
+/* Only on Spitz */
+static const struct software_node spitz_scoop_2_gpiochip_node = {
+       .name = "sharp-scoop.1",
+};
+
+/* Only on Akita */
+static const struct software_node akita_max7310_gpiochip_node = {
+       .name = "i2c-max7310",
+};
+
 /******************************************************************************
  * Scoop GPIO expander
  ******************************************************************************/
@@ -950,24 +964,24 @@ static void __init spitz_i2c_init(void)
 static inline void spitz_i2c_init(void) {}
 #endif
 
-static struct gpiod_lookup_table spitz_audio_gpio_table = {
-       .dev_id = "spitz-audio",
-       .table = {
-               GPIO_LOOKUP("sharp-scoop.0", 3, "mute-l", GPIO_ACTIVE_HIGH),
-               GPIO_LOOKUP("sharp-scoop.0", 4, "mute-r", GPIO_ACTIVE_HIGH),
-               GPIO_LOOKUP("sharp-scoop.1", 8, "mic", GPIO_ACTIVE_HIGH),
-               { },
-       },
+static const struct property_entry spitz_audio_props[] = {
+       PROPERTY_ENTRY_GPIO("mute-l-gpios", &spitz_scoop_1_gpiochip_node, 3,
+                           GPIO_ACTIVE_HIGH),
+       PROPERTY_ENTRY_GPIO("mute-r-gpios", &spitz_scoop_1_gpiochip_node, 4,
+                           GPIO_ACTIVE_HIGH),
+       PROPERTY_ENTRY_GPIO("mic-gpios", &spitz_scoop_2_gpiochip_node, 8,
+                           GPIO_ACTIVE_HIGH),
+       { }
 };
 
-static struct gpiod_lookup_table akita_audio_gpio_table = {
-       .dev_id = "spitz-audio",
-       .table = {
-               GPIO_LOOKUP("sharp-scoop.0", 3, "mute-l", GPIO_ACTIVE_HIGH),
-               GPIO_LOOKUP("sharp-scoop.0", 4, "mute-r", GPIO_ACTIVE_HIGH),
-               GPIO_LOOKUP("i2c-max7310", 2, "mic", GPIO_ACTIVE_HIGH),
-               { },
-       },
+static const struct property_entry akita_audio_props[] = {
+       PROPERTY_ENTRY_GPIO("mute-l-gpios", &spitz_scoop_1_gpiochip_node, 3,
+                           GPIO_ACTIVE_HIGH),
+       PROPERTY_ENTRY_GPIO("mute-r-gpios", &spitz_scoop_1_gpiochip_node, 4,
+                           GPIO_ACTIVE_HIGH),
+       PROPERTY_ENTRY_GPIO("mic-gpios", &akita_max7310_gpiochip_node, 2,
+                           GPIO_ACTIVE_HIGH),
+       { }
 };
 
 /******************************************************************************
@@ -975,12 +989,14 @@ static struct gpiod_lookup_table akita_audio_gpio_table = {
  ******************************************************************************/
 static inline void spitz_audio_init(void)
 {
-       if (machine_is_akita())
-               gpiod_add_lookup_table(&akita_audio_gpio_table);
-       else
-               gpiod_add_lookup_table(&spitz_audio_gpio_table);
-
-       platform_device_register_simple("spitz-audio", -1, NULL, 0);
+       struct platform_device_info audio_info = {
+               .name = "spitz-audio",
+               .id = PLATFORM_DEVID_NONE,
+               .properties = machine_is_akita() ?
+                               akita_audio_props : spitz_audio_props,
+       };
+
+       platform_device_register_full(&audio_info);
 }
 
 /******************************************************************************
@@ -1003,6 +1019,12 @@ static void spitz_restart(enum reboot_mode mode, const char *cmd)
 
 static void __init spitz_init(void)
 {
+       software_node_register(&spitz_scoop_1_gpiochip_node);
+       if (machine_is_akita())
+               software_node_register(&akita_max7310_gpiochip_node);
+       else
+               software_node_register(&spitz_scoop_2_gpiochip_node);
+
        init_gpio_reset(SPITZ_GPIO_ON_RESET, 1, 0);
        pm_power_off = spitz_poweroff;