brcm63xx: fix platform gpio lookups for gpios < 32
authorJonas Gorski <jogo@openwrt.org>
Mon, 18 Jan 2016 10:46:50 +0000 (10:46 +0000)
committerJonas Gorski <jogo@openwrt.org>
Mon, 18 Jan 2016 10:46:50 +0000 (10:46 +0000)
Overwriting static strings is never a good idea, especially expecting
identical strings to be stored in different memory locations.

This caused the lookups to always return the second chip's name. Fix
this by just initializing the lookup with the right values, so we
don't need to modify the strings at all.

Signed-off-by: Jonas Gorski <jogo@openwrt.org>
SVN-Revision: 48303

target/linux/brcm63xx/patches-4.1/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch
target/linux/brcm63xx/patches-4.1/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch
target/linux/brcm63xx/patches-4.4/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch
target/linux/brcm63xx/patches-4.4/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch

index 0cbb4f52abdae7d30c50ac8c2b3db416d0c6fcff..15a714bfd577a4cc460eff63788e0fb44b48f196 100644 (file)
@@ -42,7 +42,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  }
 --- a/arch/mips/bcm63xx/gpio.c
 +++ b/arch/mips/bcm63xx/gpio.c
-@@ -8,15 +8,24 @@
+@@ -8,15 +8,23 @@
   * Copyright (C) Jonas Gorski <jogo@openwrt.org>
   */
  
@@ -58,24 +58,15 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  #include <bcm63xx_gpio.h>
  #include <bcm63xx_regs.h>
  
-+/* for registering lookups; make them large enough to hold OF names */
-+static char *gpio_chip_labels[] = {
-+      "xxxxxxxx.gpio-controller",
-+      "xxxxxxxx.gpio-controller",
++static const char * const gpio_chip_labels[] = {
++      "bcm63xx-gpio.0",
++      "bcm63xx-gpio.1",
 +};
 +
  static void __init bcm63xx_gpio_init_one(int id, int dir, int data, int ngpio)
  {
        struct resource res[2];
-@@ -40,6 +49,7 @@ static void __init bcm63xx_gpio_init_one
-       pdata.base = id * 32;
-       pdata.ngpio = ngpio;
-+      sprintf(gpio_chip_labels[id], "bcm63xx-gpio.%d", id);
-       platform_device_register_resndata(NULL, "bcm63xx-gpio", id, res, 2,
-                                         &pdata, sizeof(pdata));
- }
-@@ -64,3 +74,25 @@ int __init bcm63xx_gpio_init(void)
+@@ -64,3 +72,25 @@ int __init bcm63xx_gpio_init(void)
        return 0;
  
  }
index 2faf0dea29d7e32d4f42486e50ad2cb586adac17..af6eaff075a254c4f4c5387351bfff88aa0c88d7 100644 (file)
@@ -17,13 +17,13 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  
 +#include "boards/board_common.h"
 +
- /* for registering lookups; make them large enough to hold OF names */
- static char *gpio_chip_labels[] = {
-       "xxxxxxxx.gpio-controller",
-@@ -50,8 +52,9 @@ static void __init bcm63xx_gpio_init_one
+ static const char * const gpio_chip_labels[] = {
+       "bcm63xx-gpio.0",
+       "bcm63xx-gpio.1",
+@@ -48,8 +50,9 @@ static void __init bcm63xx_gpio_init_one
+       pdata.base = id * 32;
        pdata.ngpio = ngpio;
  
-       sprintf(gpio_chip_labels[id], "bcm63xx-gpio.%d", id);
 -      platform_device_register_resndata(NULL, "bcm63xx-gpio", id, res, 2,
 -                                        &pdata, sizeof(pdata));
 +      if (!board_of_device_present("gpio0"))
index bd5f5e8f475891cbd32c5df3e6a9a9b85b027fad..61a6056ed28b1cb277b689b4d9435ebfcec5f477 100644 (file)
@@ -42,7 +42,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  }
 --- a/arch/mips/bcm63xx/gpio.c
 +++ b/arch/mips/bcm63xx/gpio.c
-@@ -8,15 +8,24 @@
+@@ -8,15 +8,23 @@
   * Copyright (C) Jonas Gorski <jogo@openwrt.org>
   */
  
@@ -58,24 +58,15 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  #include <bcm63xx_gpio.h>
  #include <bcm63xx_regs.h>
  
-+/* for registering lookups; make them large enough to hold OF names */
-+static char *gpio_chip_labels[] = {
-+      "xxxxxxxx.gpio-controller",
-+      "xxxxxxxx.gpio-controller",
++static const char * const gpio_chip_labels[] = {
++      "bcm63xx-gpio.0",
++      "bcm63xx-gpio.1",
 +};
 +
  static void __init bcm63xx_gpio_init_one(int id, int dir, int data, int ngpio)
  {
        struct resource res[2];
-@@ -40,6 +49,7 @@ static void __init bcm63xx_gpio_init_one
-       pdata.base = id * 32;
-       pdata.ngpio = ngpio;
-+      sprintf(gpio_chip_labels[id], "bcm63xx-gpio.%d", id);
-       platform_device_register_resndata(NULL, "bcm63xx-gpio", id, res, 2,
-                                         &pdata, sizeof(pdata));
- }
-@@ -64,3 +74,25 @@ int __init bcm63xx_gpio_init(void)
+@@ -64,3 +72,25 @@ int __init bcm63xx_gpio_init(void)
        return 0;
  
  }
index 2faf0dea29d7e32d4f42486e50ad2cb586adac17..af6eaff075a254c4f4c5387351bfff88aa0c88d7 100644 (file)
@@ -17,13 +17,13 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
  
 +#include "boards/board_common.h"
 +
- /* for registering lookups; make them large enough to hold OF names */
- static char *gpio_chip_labels[] = {
-       "xxxxxxxx.gpio-controller",
-@@ -50,8 +52,9 @@ static void __init bcm63xx_gpio_init_one
+ static const char * const gpio_chip_labels[] = {
+       "bcm63xx-gpio.0",
+       "bcm63xx-gpio.1",
+@@ -48,8 +50,9 @@ static void __init bcm63xx_gpio_init_one
+       pdata.base = id * 32;
        pdata.ngpio = ngpio;
  
-       sprintf(gpio_chip_labels[id], "bcm63xx-gpio.%d", id);
 -      platform_device_register_resndata(NULL, "bcm63xx-gpio", id, res, 2,
 -                                        &pdata, sizeof(pdata));
 +      if (!board_of_device_present("gpio0"))