]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ARM: omap2: Rewrite WLAN quirk to use GPIO descriptors
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 1 May 2023 09:05:23 +0000 (11:05 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 24 May 2023 13:01:58 +0000 (15:01 +0200)
The OMAP2 platform data quirk is using the global GPIO numberspace
to obtain two WLAN GPIOs to drive power and xcvr reset GPIO
lines during start-up.

Rewrite the quirk to use a GPIO descriptor table so we avoid using
global GPIO numbers.

This gets rid of the final dependency on the legacy <linux/gpio.h>
header from the OMAP2/3 platforms.

Fixes: 92bf78b33b0b ("gpio: omap: use dynamic allocation of base")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/mach-omap2/pdata-quirks.c

index 3264c4e77a8aa82c5c9190a225f2ce18b8808210..c1c0121f478d66b43d262217f573e490891230d5 100644 (file)
@@ -8,7 +8,6 @@
 #include <linux/davinci_emac.h>
 #include <linux/gpio/machine.h>
 #include <linux/gpio/consumer.h>
-#include <linux/gpio.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/of_platform.h>
@@ -178,25 +177,41 @@ static void __init am35xx_emac_reset(void)
        omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); /* OCP barrier */
 }
 
-static struct gpio cm_t3517_wlan_gpios[] __initdata = {
-       { 56,   GPIOF_OUT_INIT_HIGH,    "wlan pwr" },
-       { 4,    GPIOF_OUT_INIT_HIGH,    "xcvr noe" },
+static struct gpiod_lookup_table cm_t3517_wlan_gpio_table = {
+       .dev_id = NULL,
+       .table = {
+               GPIO_LOOKUP("gpio-48-53", 8, "power",
+                           GPIO_ACTIVE_HIGH),
+               GPIO_LOOKUP("gpio-0-15", 4, "noe",
+                           GPIO_ACTIVE_HIGH),
+               { }
+       },
 };
 
 static void __init omap3_sbc_t3517_wifi_init(void)
 {
-       int err = gpio_request_array(cm_t3517_wlan_gpios,
-                               ARRAY_SIZE(cm_t3517_wlan_gpios));
-       if (err) {
-               pr_err("SBC-T3517: wl12xx gpios request failed: %d\n", err);
-               return;
-       }
+       struct gpio_desc *d;
 
-       gpiod_export(gpio_to_desc(cm_t3517_wlan_gpios[0].gpio), 0);
-       gpiod_export(gpio_to_desc(cm_t3517_wlan_gpios[1].gpio), 0);
+       gpiod_add_lookup_table(&cm_t3517_wlan_gpio_table);
 
+       /* This asserts the RESET line (reverse polarity) */
+       d = gpiod_get(NULL, "power", GPIOD_OUT_HIGH);
+       if (IS_ERR(d)) {
+               pr_err("Unable to get CM T3517 WLAN power GPIO descriptor\n");
+       } else {
+               gpiod_set_consumer_name(d, "wlan pwr");
+               gpiod_export(d, 0);
+       }
+
+       d = gpiod_get(NULL, "noe", GPIOD_OUT_HIGH);
+       if (IS_ERR(d)) {
+               pr_err("Unable to get CM T3517 WLAN XCVR NOE GPIO descriptor\n");
+       } else {
+               gpiod_set_consumer_name(d, "xcvr noe");
+               gpiod_export(d, 0);
+       }
        msleep(100);
-       gpio_set_value(cm_t3517_wlan_gpios[1].gpio, 0);
+       gpiod_set_value(d, 0);
 }
 
 static struct gpiod_lookup_table omap3_sbc_t3517_usb_gpio_table = {