bcma: use absolute base for SoC GPIO pins
authorFelix Fietkau <nbd@openwrt.org>
Wed, 15 Apr 2015 13:07:52 +0000 (15:07 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Sat, 9 May 2015 13:28:06 +0000 (16:28 +0300)
On some BCM5301x ARM devices, user space still needs to control some
system GPIO pins for which no driver exists. This is a lot easier to do
with a predictable GPIO base.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/bcma/driver_gpio.c

index 74ccb02e0f10c8c52a1db7ab3948f5d697b3cddc..9b8d9bfd036fd4f0dfec7788628b1afa508caba8 100644 (file)
@@ -235,16 +235,17 @@ int bcma_gpio_init(struct bcma_drv_cc *cc)
        }
 
        /*
-        * On MIPS we register GPIO devices (LEDs, buttons) using absolute GPIO
-        * pin numbers. We don't have Device Tree there and we can't really use
-        * relative (per chip) numbers.
-        * So let's use predictable base for BCM47XX and "random" for all other.
+        * Register SoC GPIO devices with absolute GPIO pin base.
+        * On MIPS, we don't have Device Tree and we can't use relative (per chip)
+        * GPIO numbers.
+        * On some ARM devices, user space may want to access some system GPIO
+        * pins directly, which is easier to do with a predictable GPIO base.
         */
-#if IS_BUILTIN(CONFIG_BCM47XX)
-       chip->base              = bus->num * BCMA_GPIO_MAX_PINS;
-#else
-       chip->base              = -1;
-#endif
+       if (IS_BUILTIN(CONFIG_BCM47XX) ||
+           cc->core->bus->hosttype == BCMA_HOSTTYPE_SOC)
+               chip->base              = bus->num * BCMA_GPIO_MAX_PINS;
+       else
+               chip->base              = -1;
 
        err = bcma_gpio_irq_domain_init(cc);
        if (err)