brcm63xx: Add DT support for HG553
[openwrt/svn-archive/archive.git] / target / linux / brcm63xx / patches-3.14 / 501-board-NB4.patch
index 3a7fee1e81b60f968e83daadf1f03d370b0168d7..a33237850745123ef68a616ce0c6e3c15aad9027 100644 (file)
@@ -1,9 +1,11 @@
 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -15,6 +15,10 @@
+@@ -12,6 +12,12 @@
+ #include <linux/string.h>
  #include <linux/gpio_keys.h>
  #include <linux/input.h>
- #include <linux/spi/spi.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
 +#include <linux/spi/spi_gpio.h>
 +#if 0 /* FIXME: 3.14 removed non-DT support */
 +#include <linux/spi/74x164.h>
@@ -11,9 +13,9 @@
  #include <asm/addrspace.h>
  #include <bcm63xx_board.h>
  #include <bcm63xx_cpu.h>
-@@ -49,6 +53,12 @@
- #define CFE_OFFSET_64K                        0x10000
- #define CFE_OFFSET_128K                       0x20000
+@@ -31,6 +37,12 @@
+ #define BCM963XX_KEYS_POLL_INTERVAL   20
+ #define BCM963XX_KEYS_DEBOUNCE_INTERVAL       (BCM963XX_KEYS_POLL_INTERVAL * 3)
  
 +#define NB4_PID_OFFSET                0xff80
 +#define NB4_74X164_GPIO_BASE  64
 +#define NB4_SPI_GPIO_CLK      6
 +#define NB4_74HC64_GPIO(X)    (NB4_74X164_GPIO_BASE + (X))
 +
- static struct board_info board;
  /*
-@@ -755,6 +765,605 @@ static struct board_info __initdata boar
+  * known 3368 boards
+  */
+@@ -764,6 +776,270 @@ static struct board_info __initdata boar
  
        .has_ohci0                      = 1,
  };
@@ -70,6 +72,7 @@
 +
 +static struct board_info __initdata board_nb4_ser_r0 = {
 +      .name                           = "NB4-SER-r0",
++      .of_board_id                    = "sfr,nb4-ser-r0",
 +      .expected_cpu_id                = 0x6358,
 +
 +      .has_uart0                      = 1,
 +      .num_spis = ARRAY_SIZE(nb4_spi_devices),
 +};
 +
-+static struct board_info __initdata board_nb4_ser_r1 = {
-+      .name                           = "NB4-SER-r1",
-+      .expected_cpu_id                = 0x6358,
-+
-+      .has_uart0                      = 1,
-+      .has_enet0                      = 1,
-+      .has_enet1                      = 1,
-+      .has_pci                        = 1,
-+
-+      .enet0 = {
-+              .has_phy                = 1,
-+              .use_internal_phy       = 1,
-+      },
-+
-+      .enet1 = {
-+              .has_phy                = 1,
-+              .phy_id                 = 0,
-+              .force_speed_100        = 1,
-+              .force_duplex_full      = 1,
-+      },
-+
-+
-+      .has_ohci0 = 1,
-+      .has_pccard = 1,
-+      .has_ehci0 = 1,
-+      .num_usbh_ports                 = 2,
-+
-+      .leds = {
-+              {
-+                      .name           = "NB4-SER-r1:white:adsl",
-+                      .gpio           = NB4_74HC64_GPIO(4),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r1:white:traffic",
-+                      .gpio           = 2,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r1:white:tel",
-+                      .gpio           = NB4_74HC64_GPIO(3),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r1:white:tv",
-+                      .gpio           = NB4_74HC64_GPIO(2),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r1:white:wifi",
-+                      .gpio           = 15,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r1:white:alarm",
-+                      .gpio           = NB4_74HC64_GPIO(0),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r1:red:service",
-+                      .gpio           = 29,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r1:green:service",
-+                      .gpio           = 30,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r1:blue:service",
-+                      .gpio           = 4,
-+                      .active_low     = 1,
-+              },
-+      },
-+      .buttons = {
-+              {
-+                      .desc           = "reset",
-+                      .gpio           = 34,
-+                      .type           = EV_KEY,
-+                      .code           = KEY_RESTART,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "wps",
-+                      .gpio           = 37,
-+                      .type           = EV_KEY,
-+                      .code           = KEY_WPS_BUTTON,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "service",
-+                      .gpio           = 27,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_0,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "clip",
-+                      .gpio           = 31,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_1,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+      },
-+      .devs = nb4_devices,
-+      .num_devs = ARRAY_SIZE(nb4_devices),
-+      .spis = nb4_spi_devices,
-+      .num_spis = ARRAY_SIZE(nb4_spi_devices),
-+};
-+
-+static struct board_info __initdata board_nb4_ser_r2 = {
-+      .name                           = "NB4-SER-r2",
-+      .expected_cpu_id                = 0x6358,
-+
-+      .has_uart0                      = 1,
-+      .has_enet0                      = 1,
-+      .has_enet1                      = 1,
-+      .has_pci                        = 1,
-+
-+      .enet0 = {
-+              .has_phy                = 1,
-+              .use_internal_phy       = 1,
-+      },
-+
-+      .enet1 = {
-+              .has_phy                = 1,
-+              .phy_id                 = 0,
-+              .force_speed_100        = 1,
-+              .force_duplex_full      = 1,
-+      },
-+
-+
-+      .has_ohci0 = 1,
-+      .has_pccard = 1,
-+      .has_ehci0 = 1,
-+      .num_usbh_ports                 = 2,
-+
-+      .leds = {
-+              {
-+                      .name           = "NB4-SER-r2:white:adsl",
-+                      .gpio           = NB4_74HC64_GPIO(4),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r2:white:traffic",
-+                      .gpio           = 2,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r2:white:tel",
-+                      .gpio           = NB4_74HC64_GPIO(3),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r2:white:tv",
-+                      .gpio           = NB4_74HC64_GPIO(2),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r2:white:wifi",
-+                      .gpio           = 15,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r2:white:alarm",
-+                      .gpio           = NB4_74HC64_GPIO(0),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r2:red:service",
-+                      .gpio           = 29,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r2:green:service",
-+                      .gpio           = 30,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-SER-r2:blue:service",
-+                      .gpio           = 4,
-+                      .active_low     = 1,
-+              },
-+      },
-+      .buttons = {
-+              {
-+                      .desc           = "reset",
-+                      .gpio           = 34,
-+                      .type           = EV_KEY,
-+                      .code           = KEY_RESTART,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "wps",
-+                      .gpio           = 37,
-+                      .type           = EV_KEY,
-+                      .code           = KEY_WPS_BUTTON,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "service",
-+                      .gpio           = 27,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_0,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "clip",
-+                      .gpio           = 31,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_1,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+      },
-+      .devs = nb4_devices,
-+      .num_devs = ARRAY_SIZE(nb4_devices),
-+      .spis = nb4_spi_devices,
-+      .num_spis = ARRAY_SIZE(nb4_spi_devices),
-+};
-+
 +static struct board_info __initdata board_nb4_fxc_r1 = {
 +      .name                           = "NB4-FXC-r1",
++      .of_board_id                    = "sfr,nb4-fxc-r1",
 +      .expected_cpu_id                = 0x6358,
 +
 +      .has_uart0                      = 1,
 +      .spis = nb4_spi_devices,
 +      .num_spis = ARRAY_SIZE(nb4_spi_devices),
 +};
-+
-+static struct board_info __initdata board_nb4_fxc_r2 = {
-+      .name                           = "NB4-FXC-r2",
-+      .expected_cpu_id                = 0x6358,
-+
-+      .has_uart0                      = 1,
-+      .has_enet0                      = 1,
-+      .has_enet1                      = 1,
-+      .has_pci                        = 1,
-+
-+      .enet0 = {
-+              .has_phy                = 1,
-+              .use_internal_phy       = 1,
-+      },
-+
-+      .enet1 = {
-+              .has_phy                = 1,
-+              .phy_id                 = 0,
-+              .force_speed_100        = 1,
-+              .force_duplex_full      = 1,
-+      },
-+
-+
-+      .has_ohci0 = 1,
-+      .has_pccard = 1,
-+      .has_ehci0 = 1,
-+      .num_usbh_ports                 = 2,
-+
-+      .leds = {
-+              {
-+                      .name           = "NB4-FXC-r2:white:adsl",
-+                      .gpio           = NB4_74HC64_GPIO(4),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-FXC-r2:white:traffic",
-+                      .gpio           = 2,
-+              },
-+              {
-+                      .name           = "NB4-FXC-r2:white:tel",
-+                      .gpio           = NB4_74HC64_GPIO(3),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-FXC-r2:white:tv",
-+                      .gpio           = NB4_74HC64_GPIO(2),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-FXC-r2:white:wifi",
-+                      .gpio           = 15,
-+              },
-+              {
-+                      .name           = "NB4-FXC-r2:white:alarm",
-+                      .gpio           = NB4_74HC64_GPIO(0),
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "NB4-FXC-r2:red:service",
-+                      .gpio           = 29,
-+              },
-+              {
-+                      .name           = "NB4-FXC-r2:green:service",
-+                      .gpio           = 30,
-+              },
-+              {
-+                      .name           = "NB4-FXC-r2:blue:service",
-+                      .gpio           = 4,
-+              },
-+      },
-+      .buttons = {
-+              {
-+                      .desc           = "reset",
-+                      .gpio           = 34,
-+                      .type           = EV_KEY,
-+                      .code           = KEY_RESTART,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "wps",
-+                      .gpio           = 37,
-+                      .type           = EV_KEY,
-+                      .code           = KEY_WPS_BUTTON,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "service",
-+                      .gpio           = 27,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_0,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+              {
-+                      .desc           = "clip",
-+                      .gpio           = 31,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_1,
-+                      .active_low     = 1,
-+                      .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
-+              },
-+      },
-+      .devs = nb4_devices,
-+      .num_devs = ARRAY_SIZE(nb4_devices),
-+      .spis = nb4_spi_devices,
-+      .num_spis = ARRAY_SIZE(nb4_spi_devices),
-+};
- #endif
+ #endif /* CONFIG_BCM63XX_CPU_6358 */
  
  /*
-@@ -791,6 +1400,11 @@ static const struct board_info __initcon
+@@ -800,6 +1076,8 @@ static const struct board_info __initcon
        &board_96358vw2,
        &board_AGPFS0,
        &board_DWVS0,
 +      &board_nb4_ser_r0,
-+      &board_nb4_ser_r1,
-+      &board_nb4_ser_r2,
 +      &board_nb4_fxc_r1,
-+      &board_nb4_fxc_r2,
  #endif
  };
  
-@@ -845,6 +1459,16 @@ static void __init boardid_fixup(u8 *boo
-       struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
-       char *board_name = (char *)bcm63xx_nvram_get_name();
-+      if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
-+              u8 *p = boot_addr + NB4_PID_OFFSET;
-+
-+              /* Extract nb4 PID */
-+              if (!memcmp(p, "NB4-", 4)) {
-+                      memcpy(board_name, p, sizeof("NB4-XXX-rX"));
-+                      return;
-+              }
-+      }
-+
-       /* check if bcm_tag is at 64k offset */
-       if (strncmp(board_name, tag->board_id, BOARDID_LEN) != 0) {
-               /* else try 128k */