From 74aca7d913f48d65b1c46f4772328a8459d52b44 Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Mon, 18 Jan 2016 10:46:50 +0000 Subject: [PATCH] brcm63xx: fix platform gpio lookups for gpios < 32 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 SVN-Revision: 48303 --- ...-register-lookup-for-ephy-reset-gpio.patch | 19 +++++-------------- ...not-register-gpio-controller-if-pres.patch | 10 +++++----- ...-register-lookup-for-ephy-reset-gpio.patch | 19 +++++-------------- ...not-register-gpio-controller-if-pres.patch | 10 +++++----- 4 files changed, 20 insertions(+), 38 deletions(-) diff --git a/target/linux/brcm63xx/patches-4.1/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch b/target/linux/brcm63xx/patches-4.1/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch index 0cbb4f52abd..15a714bfd57 100644 --- a/target/linux/brcm63xx/patches-4.1/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch +++ b/target/linux/brcm63xx/patches-4.1/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch @@ -42,7 +42,7 @@ Signed-off-by: Jonas Gorski } --- a/arch/mips/bcm63xx/gpio.c +++ b/arch/mips/bcm63xx/gpio.c -@@ -8,15 +8,24 @@ +@@ -8,15 +8,23 @@ * Copyright (C) Jonas Gorski */ @@ -58,24 +58,15 @@ Signed-off-by: Jonas Gorski #include #include -+/* 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; } diff --git a/target/linux/brcm63xx/patches-4.1/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch b/target/linux/brcm63xx/patches-4.1/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch index 2faf0dea29d..af6eaff075a 100644 --- a/target/linux/brcm63xx/patches-4.1/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch +++ b/target/linux/brcm63xx/patches-4.1/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch @@ -17,13 +17,13 @@ Signed-off-by: Jonas Gorski +#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")) diff --git a/target/linux/brcm63xx/patches-4.4/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch b/target/linux/brcm63xx/patches-4.4/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch index bd5f5e8f475..61a6056ed28 100644 --- a/target/linux/brcm63xx/patches-4.4/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch +++ b/target/linux/brcm63xx/patches-4.4/377-MIPS-BCM63XX-register-lookup-for-ephy-reset-gpio.patch @@ -42,7 +42,7 @@ Signed-off-by: Jonas Gorski } --- a/arch/mips/bcm63xx/gpio.c +++ b/arch/mips/bcm63xx/gpio.c -@@ -8,15 +8,24 @@ +@@ -8,15 +8,23 @@ * Copyright (C) Jonas Gorski */ @@ -58,24 +58,15 @@ Signed-off-by: Jonas Gorski #include #include -+/* 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; } diff --git a/target/linux/brcm63xx/patches-4.4/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch b/target/linux/brcm63xx/patches-4.4/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch index 2faf0dea29d..af6eaff075a 100644 --- a/target/linux/brcm63xx/patches-4.4/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch +++ b/target/linux/brcm63xx/patches-4.4/378-MIPS-BCM63XX-do-not-register-gpio-controller-if-pres.patch @@ -17,13 +17,13 @@ Signed-off-by: Jonas Gorski +#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")) -- 2.30.2