ar71xx: mach-ubnt-xm.c convert patches to mach file
authorArne Zachlod <arne@nerdkeller.org>
Sun, 12 Jun 2016 16:17:28 +0000 (18:17 +0200)
committerJohn Crispin <john@phrozen.org>
Mon, 13 Jun 2016 20:51:43 +0000 (22:51 +0200)
Signed-off-by: Arne Zachlod <arne@nerdkeller.org>
target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-xm.c [new file with mode: 0644]
target/linux/ar71xx/patches-4.4/607-MIPS-ath79-ubnt-xm-fixes.patch
target/linux/ar71xx/patches-4.4/608-MIPS-ath79-ubnt-xm-add-more-boards.patch
target/linux/ar71xx/patches-4.4/610-MIPS-ath79-UBNT-add-airGateway-pro-support.patch [deleted file]

diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-xm.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-xm.c
new file mode 100644 (file)
index 0000000..bb5b28f
--- /dev/null
@@ -0,0 +1,700 @@
+/*
+ *  Ubiquiti Networks XM (rev 1.0) board support
+ *
+ *  Copyright (C) 2011 RenĂ© Bolldorf <xsecute@googlemail.com>
+ *
+ *  Derived from: mach-pb44.c
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <linux/platform_device.h>
+#include <linux/ath9k_platform.h>
+#include <linux/etherdevice.h>
+#include <linux/ar8216_platform.h>
+
+#include <asm/mach-ath79/ath79.h>
+#include <asm/mach-ath79/irq.h>
+#include <asm/mach-ath79/ar71xx_regs.h>
+
+#include <linux/platform_data/phy-at803x.h>
+
+#include "common.h"
+#include "dev-ap9x-pci.h"
+#include "dev-eth.h"
+#include "dev-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-m25p80.h"
+#include "dev-usb.h"
+#include "dev-wmac.h"
+#include "machtypes.h"
+
+#define UBNT_XM_GPIO_LED_L1            0
+#define UBNT_XM_GPIO_LED_L2            1
+#define UBNT_XM_GPIO_LED_L3            11
+#define UBNT_XM_GPIO_LED_L4            7
+
+#define UBNT_XM_GPIO_BTN_RESET         12
+
+#define UBNT_XM_KEYS_POLL_INTERVAL     20
+#define UBNT_XM_KEYS_DEBOUNCE_INTERVAL (3 * UBNT_XM_KEYS_POLL_INTERVAL)
+
+#define UBNT_XM_EEPROM_ADDR            0x1fff1000
+
+static struct gpio_led ubnt_xm_leds_gpio[] __initdata = {
+       {
+               .name           = "ubnt:red:link1",
+               .gpio           = UBNT_XM_GPIO_LED_L1,
+               .active_low     = 0,
+       }, {
+               .name           = "ubnt:orange:link2",
+               .gpio           = UBNT_XM_GPIO_LED_L2,
+               .active_low     = 0,
+       }, {
+               .name           = "ubnt:green:link3",
+               .gpio           = UBNT_XM_GPIO_LED_L3,
+               .active_low     = 0,
+       }, {
+               .name           = "ubnt:green:link4",
+               .gpio           = UBNT_XM_GPIO_LED_L4,
+               .active_low     = 0,
+       },
+};
+
+static struct gpio_keys_button ubnt_xm_gpio_keys[] __initdata = {
+       {
+               .desc                   = "reset",
+               .type                   = EV_KEY,
+               .code                   = KEY_RESTART,
+               .debounce_interval      = UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
+               .gpio                   = UBNT_XM_GPIO_BTN_RESET,
+               .active_low             = 1,
+       }
+};
+
+#define UBNT_M_WAN_PHYMASK     BIT(4)
+
+static void __init ubnt_xm_init(void)
+{
+       u8 *eeprom = (u8 *) KSEG1ADDR(UBNT_XM_EEPROM_ADDR);
+       u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000);
+       u8 *mac2 = (u8 *) KSEG1ADDR(0x1fff0000 + ETH_ALEN);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xm_leds_gpio),
+                                ubnt_xm_leds_gpio);
+
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                       ARRAY_SIZE(ubnt_xm_gpio_keys),
+                                       ubnt_xm_gpio_keys);
+
+       ath79_register_m25p80(NULL);
+       ap91_pci_init(eeprom, NULL);
+
+       ath79_register_mdio(0, ~UBNT_M_WAN_PHYMASK);
+       ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
+       ath79_init_mac(ath79_eth1_data.mac_addr, mac2, 0);
+       ath79_register_eth(0);
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_XM,
+            "UBNT-XM",
+            "Ubiquiti Networks XM (rev 1.0) board",
+            ubnt_xm_init);
+
+MIPS_MACHINE(ATH79_MACH_UBNT_BULLET_M, "UBNT-BM", "Ubiquiti Bullet M",
+            ubnt_xm_init);
+
+static void __init ubnt_rocket_m_setup(void)
+{
+       ubnt_xm_init();
+       ath79_register_usb();
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_ROCKET_M, "UBNT-RM", "Ubiquiti Rocket M",
+            ubnt_rocket_m_setup);
+
+static void __init ubnt_nano_m_setup(void)
+{
+       ubnt_xm_init();
+       ath79_register_eth(1);
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_NANO_M, "UBNT-NM", "Ubiquiti Nanostation M",
+            ubnt_nano_m_setup);
+
+static struct gpio_led ubnt_airrouter_leds_gpio[] __initdata = {
+       {
+               .name           = "ubnt:green:globe",
+               .gpio           = 0,
+               .active_low     = 1,
+       }, {
+               .name           = "ubnt:green:power",
+               .gpio           = 11,
+               .active_low     = 1,
+               .default_state  = LEDS_GPIO_DEFSTATE_ON,
+       }
+};
+
+static void __init ubnt_airrouter_setup(void)
+{
+       u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000);
+       u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+       ath79_register_m25p80(NULL);
+       ath79_register_mdio(0, ~UBNT_M_WAN_PHYMASK);
+
+       ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
+       ath79_init_local_mac(ath79_eth1_data.mac_addr, mac1);
+
+       ath79_register_eth(1);
+       ath79_register_eth(0);
+       ath79_register_usb();
+
+       ap91_pci_init(ee, NULL);
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_airrouter_leds_gpio),
+                                ubnt_airrouter_leds_gpio);
+
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
+                                        ubnt_xm_gpio_keys);
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_AIRROUTER, "UBNT-AR", "Ubiquiti AirRouter",
+            ubnt_airrouter_setup);
+
+static struct gpio_led ubnt_unifi_leds_gpio[] __initdata = {
+       {
+               .name           = "ubnt:orange:dome",
+               .gpio           = 1,
+               .active_low     = 0,
+       }, {
+               .name           = "ubnt:green:dome",
+               .gpio           = 0,
+               .active_low     = 0,
+       }
+};
+
+static struct gpio_led ubnt_unifi_outdoor_leds_gpio[] __initdata = {
+       {
+               .name           = "ubnt:orange:front",
+               .gpio           = 1,
+               .active_low     = 0,
+       }, {
+               .name           = "ubnt:green:front",
+               .gpio           = 0,
+               .active_low     = 0,
+       }
+};
+
+static struct gpio_led ubnt_unifi_outdoor_plus_leds_gpio[] __initdata = {
+       {
+               .name           = "ubnt:white:front",
+               .gpio           = 1,
+               .active_low     = 0,
+       }, {
+               .name           = "ubnt:blue:front",
+               .gpio           = 0,
+               .active_low     = 0,
+       }
+};
+
+
+static void __init ubnt_unifi_setup(void)
+{
+       u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000);
+       u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_register_mdio(0, ~UBNT_M_WAN_PHYMASK);
+
+       ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
+       ath79_register_eth(0);
+
+       ap91_pci_init(ee, NULL);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifi_leds_gpio),
+                                ubnt_unifi_leds_gpio);
+
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
+                                        ubnt_xm_gpio_keys);
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFI, "UBNT-UF", "Ubiquiti UniFi",
+            ubnt_unifi_setup);
+
+
+#define UBNT_UNIFIOD_PRI_PHYMASK       BIT(4)
+#define UBNT_UNIFIOD_2ND_PHYMASK       (BIT(0) | BIT(1) | BIT(2) | BIT(3))
+
+static void __init ubnt_unifi_outdoor_setup(void)
+{
+       u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000);
+       u8 *mac2 = (u8 *) KSEG1ADDR(0x1fff0000 + ETH_ALEN);
+       u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_register_mdio(0, ~(UBNT_UNIFIOD_PRI_PHYMASK |
+                                UBNT_UNIFIOD_2ND_PHYMASK));
+
+       ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
+       ath79_init_mac(ath79_eth1_data.mac_addr, mac2, 0);
+       ath79_register_eth(0);
+       ath79_register_eth(1);
+
+       ap91_pci_init(ee, NULL);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifi_outdoor_leds_gpio),
+                                ubnt_unifi_outdoor_leds_gpio);
+
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
+                                        ubnt_xm_gpio_keys);
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFI_OUTDOOR, "UBNT-U20",
+            "Ubiquiti UniFiAP Outdoor",
+            ubnt_unifi_outdoor_setup);
+
+
+static void __init ubnt_unifi_outdoor_plus_setup(void)
+{
+       u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000);
+       u8 *mac2 = (u8 *) KSEG1ADDR(0x1fff0000 + ETH_ALEN);
+       u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_register_mdio(0, ~(UBNT_UNIFIOD_PRI_PHYMASK |
+                                UBNT_UNIFIOD_2ND_PHYMASK));
+
+       ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
+       ath79_init_mac(ath79_eth1_data.mac_addr, mac2, 0);
+       ath79_register_eth(0);
+       ath79_register_eth(1);
+
+       ap91_pci_init(ee, NULL);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifi_outdoor_plus_leds_gpio),
+                                ubnt_unifi_outdoor_plus_leds_gpio);
+
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
+                                        ubnt_xm_gpio_keys);
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFI_OUTDOOR_PLUS, "UBNT-UOP",
+            "Ubiquiti UniFiAP Outdoor+",
+            ubnt_unifi_outdoor_plus_setup);
+
+
+static struct gpio_led ubnt_uap_pro_gpio_leds[] __initdata = {
+       {
+               .name           = "ubnt:white:dome",
+               .gpio           = 12,
+       }, {
+               .name           = "ubnt:blue:dome",
+               .gpio           = 13,
+       }
+};
+
+static struct gpio_keys_button uap_pro_gpio_keys[] __initdata = {
+       {
+               .desc                   = "reset",
+               .type                   = EV_KEY,
+               .code                   = KEY_RESTART,
+               .debounce_interval      = UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
+               .gpio                   = 17,
+               .active_low             = 1,
+       }
+};
+
+static struct ar8327_pad_cfg uap_pro_ar8327_pad0_cfg = {
+       .mode = AR8327_PAD_MAC_RGMII,
+       .txclk_delay_en = true,
+       .rxclk_delay_en = true,
+       .txclk_delay_sel = AR8327_CLK_DELAY_SEL1,
+       .rxclk_delay_sel = AR8327_CLK_DELAY_SEL2,
+};
+
+static struct ar8327_platform_data uap_pro_ar8327_data = {
+       .pad0_cfg = &uap_pro_ar8327_pad0_cfg,
+       .port0_cfg = {
+               .force_link = 1,
+               .speed = AR8327_PORT_SPEED_1000,
+               .duplex = 1,
+               .txpause = 1,
+               .rxpause = 1,
+       },
+};
+
+static struct mdio_board_info uap_pro_mdio0_info[] = {
+       {
+               .bus_id = "ag71xx-mdio.0",
+               .phy_addr = 0,
+               .platform_data = &uap_pro_ar8327_data,
+       },
+};
+
+#define UAP_PRO_MAC0_OFFSET            0x0000
+#define UAP_PRO_MAC1_OFFSET            0x0006
+#define UAP_PRO_WMAC_CALDATA_OFFSET    0x1000
+#define UAP_PRO_PCI_CALDATA_OFFSET     0x5000
+
+static void __init ubnt_uap_pro_setup(void)
+{
+       u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_uap_pro_gpio_leds),
+                                ubnt_uap_pro_gpio_leds);
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                        ARRAY_SIZE(uap_pro_gpio_keys),
+                                        uap_pro_gpio_keys);
+
+       ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
+       ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
+
+       ath79_register_mdio(0, 0x0);
+       mdiobus_register_board_info(uap_pro_mdio0_info,
+                                   ARRAY_SIZE(uap_pro_mdio0_info));
+
+       ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0);
+       ath79_init_mac(ath79_eth0_data.mac_addr,
+                      eeprom + UAP_PRO_MAC0_OFFSET, 0);
+
+       /* GMAC0 is connected to an AR8327 switch */
+       ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
+       ath79_eth0_data.phy_mask = BIT(0);
+       ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
+       ath79_eth0_pll_data.pll_1000 = 0x06000000;
+       ath79_register_eth(0);
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_UAP_PRO, "UAP-PRO", "Ubiquiti UniFi AP Pro",
+            ubnt_uap_pro_setup);
+
+#define UBNT_XW_GPIO_LED_L1            11
+#define UBNT_XW_GPIO_LED_L2            16
+#define UBNT_XW_GPIO_LED_L3            13
+#define UBNT_XW_GPIO_LED_L4            14
+
+static struct gpio_led ubnt_xw_leds_gpio[] __initdata = {
+       {
+               .name           = "ubnt:red:link1",
+               .gpio           = UBNT_XW_GPIO_LED_L1,
+               .active_low     = 1,
+       }, {
+               .name           = "ubnt:orange:link2",
+               .gpio           = UBNT_XW_GPIO_LED_L2,
+               .active_low     = 1,
+       }, {
+               .name           = "ubnt:green:link3",
+               .gpio           = UBNT_XW_GPIO_LED_L3,
+               .active_low     = 1,
+       }, {
+               .name           = "ubnt:green:link4",
+               .gpio           = UBNT_XW_GPIO_LED_L4,
+               .active_low     = 1,
+       },
+};
+
+#define UBNT_ROCKET_TI_GPIO_LED_L1     16
+#define UBNT_ROCKET_TI_GPIO_LED_L2     17
+#define UBNT_ROCKET_TI_GPIO_LED_L3     18
+#define UBNT_ROCKET_TI_GPIO_LED_L4     19
+#define UBNT_ROCKET_TI_GPIO_LED_L5     20
+#define UBNT_ROCKET_TI_GPIO_LED_L6     21
+static struct gpio_led ubnt_rocket_ti_leds_gpio[] __initdata = {
+       {
+               .name           = "ubnt:green:link1",
+               .gpio           = UBNT_ROCKET_TI_GPIO_LED_L1,
+               .active_low     = 1,
+       }, {
+               .name           = "ubnt:green:link2",
+               .gpio           = UBNT_ROCKET_TI_GPIO_LED_L2,
+               .active_low     = 1,
+       }, {
+               .name           = "ubnt:green:link3",
+               .gpio           = UBNT_ROCKET_TI_GPIO_LED_L3,
+               .active_low     = 1,
+       }, {
+               .name           = "ubnt:green:link4",
+               .gpio           = UBNT_ROCKET_TI_GPIO_LED_L4,
+               .active_low     = 0,
+       }, {
+               .name           = "ubnt:green:link5",
+               .gpio           = UBNT_ROCKET_TI_GPIO_LED_L5,
+               .active_low     = 0,
+       }, {
+               .name           = "ubnt:green:link6",
+               .gpio           = UBNT_ROCKET_TI_GPIO_LED_L6,
+               .active_low     = 0,
+       },
+};
+
+static void __init ubnt_xw_init(void)
+{
+       u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xw_leds_gpio),
+                                ubnt_xw_leds_gpio);
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
+                                        ubnt_xm_gpio_keys);
+
+       ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
+       ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
+
+
+       ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_MII_GMAC0 | AR934X_ETH_CFG_MII_GMAC0_SLAVE);
+       ath79_init_mac(ath79_eth0_data.mac_addr,
+                      eeprom + UAP_PRO_MAC0_OFFSET, 0);
+
+       ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+       ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
+}
+
+static void __init ubnt_nano_m_xw_setup(void)
+{
+       ubnt_xw_init();
+
+       /* GMAC0 is connected to an AR8326 switch */
+       ath79_register_mdio(0, ~(BIT(0) | BIT(1) | BIT(5)));
+       ath79_eth0_data.phy_mask = (BIT(0) | BIT(1) | BIT(5));
+       ath79_eth0_data.speed = SPEED_100;
+       ath79_eth0_data.duplex = DUPLEX_FULL;
+       ath79_register_eth(0);
+}
+
+static void __init ubnt_loco_m_xw_setup(void)
+{
+       ubnt_xw_init();
+
+       ath79_register_mdio(0, ~BIT(1));
+       ath79_eth0_data.phy_mask = BIT(1);
+       ath79_register_eth(0);
+}
+
+static void __init ubnt_rocket_m_xw_setup(void)
+{
+       u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xw_leds_gpio),
+                                ubnt_xw_leds_gpio);
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
+                                        ubnt_xm_gpio_keys);
+
+       ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
+       ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
+
+       ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0);
+       ath79_init_mac(ath79_eth0_data.mac_addr,
+                      eeprom + UAP_PRO_MAC0_OFFSET, 0);
+
+       ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
+       ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
+
+       ath79_register_mdio(0, ~BIT(4));
+       ath79_eth0_data.phy_mask = BIT(4);
+       ath79_eth0_pll_data.pll_1000 = 0x06000000;
+       ath79_register_eth(0);
+}
+
+static struct at803x_platform_data ubnt_rocket_m_ti_at803_data = {
+       .disable_smarteee = 1,
+       .enable_rgmii_rx_delay = 1,
+       .enable_rgmii_tx_delay = 1,
+};
+static struct mdio_board_info ubnt_rocket_m_ti_mdio_info[] = {
+        {
+                .bus_id = "ag71xx-mdio.0",
+                .phy_addr = 4,
+                .platform_data = &ubnt_rocket_m_ti_at803_data,
+        },
+};
+
+static void __init ubnt_rocket_m_ti_setup(void)
+{
+       u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
+
+       ath79_register_m25p80(NULL);
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_rocket_ti_leds_gpio),
+                                ubnt_rocket_ti_leds_gpio);
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
+                                        ubnt_xm_gpio_keys);
+
+       ap91_pci_init(eeprom + 0x1000, NULL);
+
+       ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0);
+       ath79_setup_ar934x_eth_rx_delay(3, 3);
+       ath79_init_mac(ath79_eth0_data.mac_addr,
+                      eeprom + UAP_PRO_MAC0_OFFSET, 0);
+       ath79_init_mac(ath79_eth1_data.mac_addr,
+                      eeprom + UAP_PRO_MAC1_OFFSET, 0);
+
+       ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
+       ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
+       ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
+       ath79_eth1_data.mii_bus_dev = &ath79_mdio1_device.dev;
+
+       mdiobus_register_board_info(ubnt_rocket_m_ti_mdio_info,
+                       ARRAY_SIZE(ubnt_rocket_m_ti_mdio_info));
+       ath79_register_mdio(0, 0x0);
+
+
+       ath79_eth0_data.phy_mask = BIT(4);
+       /* read out from vendor */
+       ath79_eth0_pll_data.pll_1000 = 0x2000000;
+       ath79_eth0_pll_data.pll_10 = 0x1313;
+       ath79_register_eth(0);
+
+       ath79_register_mdio(1, 0x0);
+       ath79_eth1_data.phy_mask = BIT(3);
+       ath79_register_eth(1);
+}
+
+
+MIPS_MACHINE(ATH79_MACH_UBNT_NANO_M_XW, "UBNT-NM-XW", "Ubiquiti Nanostation M XW",
+            ubnt_nano_m_xw_setup);
+
+MIPS_MACHINE(ATH79_MACH_UBNT_LOCO_M_XW, "UBNT-LOCO-XW", "Ubiquiti Loco M XW",
+            ubnt_loco_m_xw_setup);
+
+MIPS_MACHINE(ATH79_MACH_UBNT_ROCKET_M_XW, "UBNT-RM-XW", "Ubiquiti Rocket M XW",
+            ubnt_rocket_m_xw_setup);
+
+MIPS_MACHINE(ATH79_MACH_UBNT_ROCKET_M_TI, "UBNT-RM-TI", "Ubiquiti Rocket M TI",
+            ubnt_rocket_m_ti_setup);
+
+static struct gpio_led ubnt_airgateway_gpio_leds[] __initdata = {
+       {
+               .name      = "ubnt:blue:wlan",
+               .gpio      = 0,
+       }, {
+               .name      = "ubnt:white:status",
+               .gpio      = 1,
+       },
+};
+
+static struct gpio_keys_button airgateway_gpio_keys[] __initdata = {
+       {
+               .desc           = "reset",
+               .type           = EV_KEY,
+               .code           = KEY_RESTART,
+               .debounce_interval      = UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
+               .gpio           = 12,
+               .active_low     = 1,
+       }
+};
+
+static void __init ubnt_airgateway_setup(void)
+{
+       u32 t;
+       u8 *mac0 = (u8 *) KSEG1ADDR(0x1fff0000);
+       u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000 + ETH_ALEN);
+       u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+
+       ath79_gpio_function_disable(AR933X_GPIO_FUNC_ETH_SWITCH_LED0_EN |
+                                    AR933X_GPIO_FUNC_ETH_SWITCH_LED1_EN |
+                                    AR933X_GPIO_FUNC_ETH_SWITCH_LED2_EN |
+                                    AR933X_GPIO_FUNC_ETH_SWITCH_LED3_EN |
+                                    AR933X_GPIO_FUNC_ETH_SWITCH_LED4_EN);
+
+       t = ath79_reset_rr(AR933X_RESET_REG_BOOTSTRAP);
+       t |= AR933X_BOOTSTRAP_MDIO_GPIO_EN;
+       ath79_reset_wr(AR933X_RESET_REG_BOOTSTRAP, t);
+
+       ath79_register_m25p80(NULL);
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_airgateway_gpio_leds),
+                                ubnt_airgateway_gpio_leds);
+
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                       ARRAY_SIZE(airgateway_gpio_keys),
+                                       airgateway_gpio_keys);
+
+       ath79_init_mac(ath79_eth1_data.mac_addr, mac0, 0);
+       ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
+
+       ath79_register_mdio(0, 0x0);
+
+       ath79_register_eth(1);
+       ath79_register_eth(0);
+
+       ath79_register_wmac(ee, NULL);
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_AIRGW, "UBNT-AGW", "Ubiquiti AirGateway",
+            ubnt_airgateway_setup);
+
+static struct gpio_led ubnt_airgateway_pro_gpio_leds[] __initdata = {
+       {
+               .name      = "ubnt:blue:wlan",
+               .gpio      = 13,
+       }, {
+               .name      = "ubnt:white:status",
+               .gpio      = 17,
+       },
+};
+
+
+static struct gpio_keys_button airgateway_pro_gpio_keys[] __initdata = {
+       {
+               .desc           = "reset",
+               .type           = EV_KEY,
+               .code           = KEY_RESTART,
+               .debounce_interval      = UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
+               .gpio           = 12,
+               .active_low     = 1,
+       }
+};
+
+static void __init ubnt_airgateway_pro_setup(void)
+{
+       u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
+       u8 *mac0 = (u8 *) KSEG1ADDR(0x1fff0000);
+
+       ath79_register_m25p80(NULL);
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_airgateway_pro_gpio_leds),
+                                ubnt_airgateway_pro_gpio_leds);
+
+       ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
+                                       ARRAY_SIZE(airgateway_pro_gpio_keys),
+                                       airgateway_pro_gpio_keys);
+
+       ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
+       ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
+
+
+       ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_SW_ONLY_MODE);
+
+       ath79_register_mdio(1, 0x0);
+
+       /* GMAC0 is left unused in this configuration */
+
+       /* GMAC1 is connected to MAC0 on the internal switch */
+       /* The PoE/WAN port connects to port 5 on the internal switch */
+       /* The LAN port connects to port 4 on the internal switch */
+       ath79_init_mac(ath79_eth1_data.mac_addr, mac0, 0);
+       ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
+       ath79_register_eth(1);
+
+}
+
+MIPS_MACHINE(ATH79_MACH_UBNT_AIRGWP, "UBNT-AGWP", "Ubiquiti AirGateway Pro",
+            ubnt_airgateway_pro_setup);
index 50be509e6cd35a63fade394c2bcc68e2870e578c..4699c82746a9fb77b4fc59f0516028f6d44dd5b0 100644 (file)
        help
          Say 'Y' here if you want your kernel to support the
          Ubiquiti Networks XM (rev 1.0) board.
        help
          Say 'Y' here if you want your kernel to support the
          Ubiquiti Networks XM (rev 1.0) board.
---- a/arch/mips/ath79/mach-ubnt-xm.c
-+++ b/arch/mips/ath79/mach-ubnt-xm.c
-@@ -16,10 +16,11 @@
- #include <asm/mach-ath79/irq.h>
--#include "machtypes.h"
-+#include "dev-ap9x-pci.h"
- #include "dev-gpio-buttons.h"
- #include "dev-leds-gpio.h"
--#include "dev-spi.h"
-+#include "dev-m25p80.h"
-+#include "machtypes.h"
- #include "pci.h"
- #define UBNT_XM_GPIO_LED_L1           0
-@@ -32,7 +33,7 @@
- #define UBNT_XM_KEYS_POLL_INTERVAL    20
- #define UBNT_XM_KEYS_DEBOUNCE_INTERVAL        (3 * UBNT_XM_KEYS_POLL_INTERVAL)
--#define UBNT_XM_EEPROM_ADDR           (u8 *) KSEG1ADDR(0x1fff1000)
-+#define UBNT_XM_EEPROM_ADDR           0x1fff1000
- static struct gpio_led ubnt_xm_leds_gpio[] __initdata = {
-       {
-@@ -65,48 +66,10 @@ static struct gpio_keys_button ubnt_xm_g
-       }
- };
--static struct spi_board_info ubnt_xm_spi_info[] = {
--      {
--              .bus_num        = 0,
--              .chip_select    = 0,
--              .max_speed_hz   = 25000000,
--              .modalias       = "mx25l6405d",
--      }
--};
--
--static struct ath79_spi_platform_data ubnt_xm_spi_data = {
--      .bus_num                = 0,
--      .num_chipselect         = 1,
--};
--
--#ifdef CONFIG_PCI
--static struct ath9k_platform_data ubnt_xm_eeprom_data;
--
--static int ubnt_xm_pci_plat_dev_init(struct pci_dev *dev)
--{
--      switch (PCI_SLOT(dev->devfn)) {
--      case 0:
--              dev->dev.platform_data = &ubnt_xm_eeprom_data;
--              break;
--      }
--
--      return 0;
--}
--
--static void __init ubnt_xm_pci_init(void)
--{
--      memcpy(ubnt_xm_eeprom_data.eeprom_data, UBNT_XM_EEPROM_ADDR,
--             sizeof(ubnt_xm_eeprom_data.eeprom_data));
--
--      ath79_pci_set_plat_dev_init(ubnt_xm_pci_plat_dev_init);
--      ath79_register_pci();
--}
--#else
--static inline void ubnt_xm_pci_init(void) {}
--#endif /* CONFIG_PCI */
--
- static void __init ubnt_xm_init(void)
- {
-+      u8 *eeprom = (u8 *) KSEG1ADDR(UBNT_XM_EEPROM_ADDR);
-+
-       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xm_leds_gpio),
-                                ubnt_xm_leds_gpio);
-@@ -114,10 +77,8 @@ static void __init ubnt_xm_init(void)
-                                       ARRAY_SIZE(ubnt_xm_gpio_keys),
-                                       ubnt_xm_gpio_keys);
--      ath79_register_spi(&ubnt_xm_spi_data, ubnt_xm_spi_info,
--                         ARRAY_SIZE(ubnt_xm_spi_info));
--
--      ubnt_xm_pci_init();
-+      ath79_register_m25p80(NULL);
-+      ap91_pci_init(eeprom, NULL);
- }
- MIPS_MACHINE(ATH79_MACH_UBNT_XM,
index b463d1415612cb4013a52e14710606a56e3ed426..2bfd58d4e8d179538aa6a0431a21ce585e0e7e54 100644 (file)
@@ -1,629 +1,8 @@
---- a/arch/mips/ath79/mach-ubnt-xm.c
-+++ b/arch/mips/ath79/mach-ubnt-xm.c
-@@ -12,16 +12,26 @@
- #include <linux/init.h>
- #include <linux/pci.h>
-+#include <linux/platform_device.h>
- #include <linux/ath9k_platform.h>
-+#include <linux/etherdevice.h>
-+#include <linux/ar8216_platform.h>
-+#include <asm/mach-ath79/ath79.h>
- #include <asm/mach-ath79/irq.h>
-+#include <asm/mach-ath79/ar71xx_regs.h>
-+#include <linux/platform_data/phy-at803x.h>
-+
-+#include "common.h"
- #include "dev-ap9x-pci.h"
-+#include "dev-eth.h"
- #include "dev-gpio-buttons.h"
- #include "dev-leds-gpio.h"
- #include "dev-m25p80.h"
-+#include "dev-usb.h"
-+#include "dev-wmac.h"
- #include "machtypes.h"
--#include "pci.h"
- #define UBNT_XM_GPIO_LED_L1           0
- #define UBNT_XM_GPIO_LED_L2           1
-@@ -37,19 +47,19 @@
- static struct gpio_led ubnt_xm_leds_gpio[] __initdata = {
-       {
--              .name           = "ubnt-xm:red:link1",
-+              .name           = "ubnt:red:link1",
-               .gpio           = UBNT_XM_GPIO_LED_L1,
-               .active_low     = 0,
-       }, {
--              .name           = "ubnt-xm:orange:link2",
-+              .name           = "ubnt:orange:link2",
-               .gpio           = UBNT_XM_GPIO_LED_L2,
-               .active_low     = 0,
-       }, {
--              .name           = "ubnt-xm:green:link3",
-+              .name           = "ubnt:green:link3",
-               .gpio           = UBNT_XM_GPIO_LED_L3,
-               .active_low     = 0,
-       }, {
--              .name           = "ubnt-xm:green:link4",
-+              .name           = "ubnt:green:link4",
-               .gpio           = UBNT_XM_GPIO_LED_L4,
-               .active_low     = 0,
-       },
-@@ -66,9 +76,13 @@ static struct gpio_keys_button ubnt_xm_g
-       }
- };
-+#define UBNT_M_WAN_PHYMASK    BIT(4)
-+
- static void __init ubnt_xm_init(void)
- {
-       u8 *eeprom = (u8 *) KSEG1ADDR(UBNT_XM_EEPROM_ADDR);
-+      u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000);
-+      u8 *mac2 = (u8 *) KSEG1ADDR(0x1fff0000 + ETH_ALEN);
-       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xm_leds_gpio),
-                                ubnt_xm_leds_gpio);
-@@ -79,9 +93,552 @@ static void __init ubnt_xm_init(void)
-       ath79_register_m25p80(NULL);
-       ap91_pci_init(eeprom, NULL);
-+
-+      ath79_register_mdio(0, ~UBNT_M_WAN_PHYMASK);
-+      ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
-+      ath79_init_mac(ath79_eth1_data.mac_addr, mac2, 0);
-+      ath79_register_eth(0);
- }
- MIPS_MACHINE(ATH79_MACH_UBNT_XM,
-            "UBNT-XM",
-            "Ubiquiti Networks XM (rev 1.0) board",
-            ubnt_xm_init);
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_BULLET_M, "UBNT-BM", "Ubiquiti Bullet M",
-+           ubnt_xm_init);
-+
-+static void __init ubnt_rocket_m_setup(void)
-+{
-+      ubnt_xm_init();
-+      ath79_register_usb();
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_ROCKET_M, "UBNT-RM", "Ubiquiti Rocket M",
-+           ubnt_rocket_m_setup);
-+
-+static void __init ubnt_nano_m_setup(void)
-+{
-+      ubnt_xm_init();
-+      ath79_register_eth(1);
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_NANO_M, "UBNT-NM", "Ubiquiti Nanostation M",
-+           ubnt_nano_m_setup);
-+
-+static struct gpio_led ubnt_airrouter_leds_gpio[] __initdata = {
-+      {
-+              .name           = "ubnt:green:globe",
-+              .gpio           = 0,
-+              .active_low     = 1,
-+      }, {
-+              .name           = "ubnt:green:power",
-+              .gpio           = 11,
-+              .active_low     = 1,
-+              .default_state  = LEDS_GPIO_DEFSTATE_ON,
-+      }
-+};
-+
-+static void __init ubnt_airrouter_setup(void)
-+{
-+      u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000);
-+      u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
-+
-+      ath79_register_m25p80(NULL);
-+      ath79_register_mdio(0, ~UBNT_M_WAN_PHYMASK);
-+
-+      ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
-+      ath79_init_local_mac(ath79_eth1_data.mac_addr, mac1);
-+
-+      ath79_register_eth(1);
-+      ath79_register_eth(0);
-+      ath79_register_usb();
-+
-+      ap91_pci_init(ee, NULL);
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_airrouter_leds_gpio),
-+                               ubnt_airrouter_leds_gpio);
-+
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
-+                                        ubnt_xm_gpio_keys);
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_AIRROUTER, "UBNT-AR", "Ubiquiti AirRouter",
-+           ubnt_airrouter_setup);
-+
-+static struct gpio_led ubnt_unifi_leds_gpio[] __initdata = {
-+      {
-+              .name           = "ubnt:orange:dome",
-+              .gpio           = 1,
-+              .active_low     = 0,
-+      }, {
-+              .name           = "ubnt:green:dome",
-+              .gpio           = 0,
-+              .active_low     = 0,
-+      }
-+};
-+
-+static struct gpio_led ubnt_unifi_outdoor_leds_gpio[] __initdata = {
-+      {
-+              .name           = "ubnt:orange:front",
-+              .gpio           = 1,
-+              .active_low     = 0,
-+      }, {
-+              .name           = "ubnt:green:front",
-+              .gpio           = 0,
-+              .active_low     = 0,
-+      }
-+};
-+
-+static struct gpio_led ubnt_unifi_outdoor_plus_leds_gpio[] __initdata = {
-+      {
-+              .name           = "ubnt:white:front",
-+              .gpio           = 1,
-+              .active_low     = 0,
-+      }, {
-+              .name           = "ubnt:blue:front",
-+              .gpio           = 0,
-+              .active_low     = 0,
-+      }
-+};
-+
-+
-+static void __init ubnt_unifi_setup(void)
-+{
-+      u8 *mac = (u8 *) KSEG1ADDR(0x1fff0000);
-+      u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
-+
-+      ath79_register_m25p80(NULL);
-+
-+      ath79_register_mdio(0, ~UBNT_M_WAN_PHYMASK);
-+
-+      ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
-+      ath79_register_eth(0);
-+
-+      ap91_pci_init(ee, NULL);
-+
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifi_leds_gpio),
-+                               ubnt_unifi_leds_gpio);
-+
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
-+                                        ubnt_xm_gpio_keys);
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFI, "UBNT-UF", "Ubiquiti UniFi",
-+           ubnt_unifi_setup);
-+
-+
-+#define UBNT_UNIFIOD_PRI_PHYMASK      BIT(4)
-+#define UBNT_UNIFIOD_2ND_PHYMASK      (BIT(0) | BIT(1) | BIT(2) | BIT(3))
-+
-+static void __init ubnt_unifi_outdoor_setup(void)
-+{
-+      u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000);
-+      u8 *mac2 = (u8 *) KSEG1ADDR(0x1fff0000 + ETH_ALEN);
-+      u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
-+
-+      ath79_register_m25p80(NULL);
-+
-+      ath79_register_mdio(0, ~(UBNT_UNIFIOD_PRI_PHYMASK |
-+                               UBNT_UNIFIOD_2ND_PHYMASK));
-+
-+      ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
-+      ath79_init_mac(ath79_eth1_data.mac_addr, mac2, 0);
-+      ath79_register_eth(0);
-+      ath79_register_eth(1);
-+
-+      ap91_pci_init(ee, NULL);
-+
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifi_outdoor_leds_gpio),
-+                               ubnt_unifi_outdoor_leds_gpio);
-+
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
-+                                        ubnt_xm_gpio_keys);
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFI_OUTDOOR, "UBNT-U20",
-+           "Ubiquiti UniFiAP Outdoor",
-+           ubnt_unifi_outdoor_setup);
-+
-+
-+static void __init ubnt_unifi_outdoor_plus_setup(void)
-+{
-+      u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000);
-+      u8 *mac2 = (u8 *) KSEG1ADDR(0x1fff0000 + ETH_ALEN);
-+      u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
-+
-+      ath79_register_m25p80(NULL);
-+
-+      ath79_register_mdio(0, ~(UBNT_UNIFIOD_PRI_PHYMASK |
-+                               UBNT_UNIFIOD_2ND_PHYMASK));
-+
-+      ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
-+      ath79_init_mac(ath79_eth1_data.mac_addr, mac2, 0);
-+      ath79_register_eth(0);
-+      ath79_register_eth(1);
-+
-+      ap91_pci_init(ee, NULL);
-+
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifi_outdoor_plus_leds_gpio),
-+                               ubnt_unifi_outdoor_plus_leds_gpio);
-+
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
-+                                        ubnt_xm_gpio_keys);
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFI_OUTDOOR_PLUS, "UBNT-UOP",
-+           "Ubiquiti UniFiAP Outdoor+",
-+           ubnt_unifi_outdoor_plus_setup);
-+
-+
-+static struct gpio_led ubnt_uap_pro_gpio_leds[] __initdata = {
-+      {
-+              .name           = "ubnt:white:dome",
-+              .gpio           = 12,
-+      }, {
-+              .name           = "ubnt:blue:dome",
-+              .gpio           = 13,
-+      }
-+};
-+
-+static struct gpio_keys_button uap_pro_gpio_keys[] __initdata = {
-+      {
-+              .desc                   = "reset",
-+              .type                   = EV_KEY,
-+              .code                   = KEY_RESTART,
-+              .debounce_interval      = UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
-+              .gpio                   = 17,
-+              .active_low             = 1,
-+      }
-+};
-+
-+static struct ar8327_pad_cfg uap_pro_ar8327_pad0_cfg = {
-+      .mode = AR8327_PAD_MAC_RGMII,
-+      .txclk_delay_en = true,
-+      .rxclk_delay_en = true,
-+      .txclk_delay_sel = AR8327_CLK_DELAY_SEL1,
-+      .rxclk_delay_sel = AR8327_CLK_DELAY_SEL2,
-+};
-+
-+static struct ar8327_platform_data uap_pro_ar8327_data = {
-+      .pad0_cfg = &uap_pro_ar8327_pad0_cfg,
-+      .port0_cfg = {
-+              .force_link = 1,
-+              .speed = AR8327_PORT_SPEED_1000,
-+              .duplex = 1,
-+              .txpause = 1,
-+              .rxpause = 1,
-+      },
-+};
-+
-+static struct mdio_board_info uap_pro_mdio0_info[] = {
-+      {
-+              .bus_id = "ag71xx-mdio.0",
-+              .phy_addr = 0,
-+              .platform_data = &uap_pro_ar8327_data,
-+      },
-+};
-+
-+#define UAP_PRO_MAC0_OFFSET           0x0000
-+#define UAP_PRO_MAC1_OFFSET           0x0006
-+#define UAP_PRO_WMAC_CALDATA_OFFSET   0x1000
-+#define UAP_PRO_PCI_CALDATA_OFFSET    0x5000
-+
-+static void __init ubnt_uap_pro_setup(void)
-+{
-+      u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
-+
-+      ath79_register_m25p80(NULL);
-+
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_uap_pro_gpio_leds),
-+                               ubnt_uap_pro_gpio_leds);
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                        ARRAY_SIZE(uap_pro_gpio_keys),
-+                                        uap_pro_gpio_keys);
-+
-+      ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
-+      ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
-+
-+      ath79_register_mdio(0, 0x0);
-+      mdiobus_register_board_info(uap_pro_mdio0_info,
-+                                  ARRAY_SIZE(uap_pro_mdio0_info));
-+
-+      ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0);
-+      ath79_init_mac(ath79_eth0_data.mac_addr,
-+                     eeprom + UAP_PRO_MAC0_OFFSET, 0);
-+
-+      /* GMAC0 is connected to an AR8327 switch */
-+      ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
-+      ath79_eth0_data.phy_mask = BIT(0);
-+      ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
-+      ath79_eth0_pll_data.pll_1000 = 0x06000000;
-+      ath79_register_eth(0);
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_UAP_PRO, "UAP-PRO", "Ubiquiti UniFi AP Pro",
-+           ubnt_uap_pro_setup);
-+
-+#define UBNT_XW_GPIO_LED_L1           11
-+#define UBNT_XW_GPIO_LED_L2           16
-+#define UBNT_XW_GPIO_LED_L3           13
-+#define UBNT_XW_GPIO_LED_L4           14
-+
-+static struct gpio_led ubnt_xw_leds_gpio[] __initdata = {
-+      {
-+              .name           = "ubnt:red:link1",
-+              .gpio           = UBNT_XW_GPIO_LED_L1,
-+              .active_low     = 1,
-+      }, {
-+              .name           = "ubnt:orange:link2",
-+              .gpio           = UBNT_XW_GPIO_LED_L2,
-+              .active_low     = 1,
-+      }, {
-+              .name           = "ubnt:green:link3",
-+              .gpio           = UBNT_XW_GPIO_LED_L3,
-+              .active_low     = 1,
-+      }, {
-+              .name           = "ubnt:green:link4",
-+              .gpio           = UBNT_XW_GPIO_LED_L4,
-+              .active_low     = 1,
-+      },
-+};
-+
-+#define UBNT_ROCKET_TI_GPIO_LED_L1    16
-+#define UBNT_ROCKET_TI_GPIO_LED_L2    17
-+#define UBNT_ROCKET_TI_GPIO_LED_L3    18
-+#define UBNT_ROCKET_TI_GPIO_LED_L4    19
-+#define UBNT_ROCKET_TI_GPIO_LED_L5    20
-+#define UBNT_ROCKET_TI_GPIO_LED_L6    21
-+static struct gpio_led ubnt_rocket_ti_leds_gpio[] __initdata = {
-+      {
-+              .name           = "ubnt:green:link1",
-+              .gpio           = UBNT_ROCKET_TI_GPIO_LED_L1,
-+              .active_low     = 1,
-+      }, {
-+              .name           = "ubnt:green:link2",
-+              .gpio           = UBNT_ROCKET_TI_GPIO_LED_L2,
-+              .active_low     = 1,
-+      }, {
-+              .name           = "ubnt:green:link3",
-+              .gpio           = UBNT_ROCKET_TI_GPIO_LED_L3,
-+              .active_low     = 1,
-+      }, {
-+              .name           = "ubnt:green:link4",
-+              .gpio           = UBNT_ROCKET_TI_GPIO_LED_L4,
-+              .active_low     = 0,
-+      }, {
-+              .name           = "ubnt:green:link5",
-+              .gpio           = UBNT_ROCKET_TI_GPIO_LED_L5,
-+              .active_low     = 0,
-+      }, {
-+              .name           = "ubnt:green:link6",
-+              .gpio           = UBNT_ROCKET_TI_GPIO_LED_L6,
-+              .active_low     = 0,
-+      },
-+};
-+
-+static void __init ubnt_xw_init(void)
-+{
-+      u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
-+
-+      ath79_register_m25p80(NULL);
-+
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xw_leds_gpio),
-+                               ubnt_xw_leds_gpio);
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
-+                                        ubnt_xm_gpio_keys);
-+
-+      ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
-+      ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
-+
-+
-+      ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_MII_GMAC0 | AR934X_ETH_CFG_MII_GMAC0_SLAVE);
-+      ath79_init_mac(ath79_eth0_data.mac_addr,
-+                     eeprom + UAP_PRO_MAC0_OFFSET, 0);
-+
-+      ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
-+      ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
-+}
-+
-+static void __init ubnt_nano_m_xw_setup(void)
-+{
-+      ubnt_xw_init();
-+
-+      /* GMAC0 is connected to an AR8326 switch */
-+      ath79_register_mdio(0, ~(BIT(0) | BIT(1) | BIT(5)));
-+      ath79_eth0_data.phy_mask = (BIT(0) | BIT(1) | BIT(5));
-+      ath79_eth0_data.speed = SPEED_100;
-+      ath79_eth0_data.duplex = DUPLEX_FULL;
-+      ath79_register_eth(0);
-+}
-+
-+static void __init ubnt_loco_m_xw_setup(void)
-+{
-+      ubnt_xw_init();
-+
-+      ath79_register_mdio(0, ~BIT(1));
-+      ath79_eth0_data.phy_mask = BIT(1);
-+      ath79_register_eth(0);
-+}
-+
-+static void __init ubnt_rocket_m_xw_setup(void)
-+{
-+      u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
-+
-+      ath79_register_m25p80(NULL);
-+
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xw_leds_gpio),
-+                               ubnt_xw_leds_gpio);
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
-+                                        ubnt_xm_gpio_keys);
-+
-+      ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
-+      ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
-+
-+      ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0);
-+      ath79_init_mac(ath79_eth0_data.mac_addr,
-+                     eeprom + UAP_PRO_MAC0_OFFSET, 0);
-+
-+      ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
-+      ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
-+
-+      ath79_register_mdio(0, ~BIT(4));
-+      ath79_eth0_data.phy_mask = BIT(4);
-+      ath79_eth0_pll_data.pll_1000 = 0x06000000;
-+      ath79_register_eth(0);
-+}
-+
-+static struct at803x_platform_data ubnt_rocket_m_ti_at803_data = {
-+      .disable_smarteee = 1,
-+      .enable_rgmii_rx_delay = 1,
-+      .enable_rgmii_tx_delay = 1,
-+};
-+static struct mdio_board_info ubnt_rocket_m_ti_mdio_info[] = {
-+        {
-+                .bus_id = "ag71xx-mdio.0",
-+                .phy_addr = 4,
-+                .platform_data = &ubnt_rocket_m_ti_at803_data,
-+        },
-+};
-+
-+static void __init ubnt_rocket_m_ti_setup(void)
-+{
-+      u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
-+
-+      ath79_register_m25p80(NULL);
-+
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_rocket_ti_leds_gpio),
-+                               ubnt_rocket_ti_leds_gpio);
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                        ARRAY_SIZE(ubnt_xm_gpio_keys),
-+                                        ubnt_xm_gpio_keys);
-+
-+      ap91_pci_init(eeprom + 0x1000, NULL);
-+
-+      ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0);
-+      ath79_setup_ar934x_eth_rx_delay(3, 3);
-+      ath79_init_mac(ath79_eth0_data.mac_addr,
-+                     eeprom + UAP_PRO_MAC0_OFFSET, 0);
-+      ath79_init_mac(ath79_eth1_data.mac_addr,
-+                     eeprom + UAP_PRO_MAC1_OFFSET, 0);
-+
-+      ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
-+      ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
-+      ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
-+      ath79_eth1_data.mii_bus_dev = &ath79_mdio1_device.dev;
-+
-+      mdiobus_register_board_info(ubnt_rocket_m_ti_mdio_info,
-+                      ARRAY_SIZE(ubnt_rocket_m_ti_mdio_info));
-+      ath79_register_mdio(0, 0x0);
-+
-+
-+      ath79_eth0_data.phy_mask = BIT(4);
-+      /* read out from vendor */
-+      ath79_eth0_pll_data.pll_1000 = 0x2000000;
-+      ath79_eth0_pll_data.pll_10 = 0x1313;
-+      ath79_register_eth(0);
-+
-+      ath79_register_mdio(1, 0x0);
-+      ath79_eth1_data.phy_mask = BIT(3);
-+      ath79_register_eth(1);
-+}
-+
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_NANO_M_XW, "UBNT-NM-XW", "Ubiquiti Nanostation M XW",
-+           ubnt_nano_m_xw_setup);
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_LOCO_M_XW, "UBNT-LOCO-XW", "Ubiquiti Loco M XW",
-+           ubnt_loco_m_xw_setup);
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_ROCKET_M_XW, "UBNT-RM-XW", "Ubiquiti Rocket M XW",
-+           ubnt_rocket_m_xw_setup);
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_ROCKET_M_TI, "UBNT-RM-TI", "Ubiquiti Rocket M TI",
-+           ubnt_rocket_m_ti_setup);
-+
-+static struct gpio_led ubnt_airgateway_gpio_leds[] __initdata = {
-+      {
-+              .name      = "ubnt:blue:wlan",
-+              .gpio      = 0,
-+      }, {
-+              .name      = "ubnt:white:status",
-+              .gpio      = 1,
-+      },
-+};
-+
-+static struct gpio_keys_button airgateway_gpio_keys[] __initdata = {
-+      {
-+              .desc           = "reset",
-+              .type           = EV_KEY,
-+              .code           = KEY_RESTART,
-+              .debounce_interval      = UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
-+              .gpio           = 12,
-+              .active_low     = 1,
-+      }
-+};
-+
-+static void __init ubnt_airgateway_setup(void)
-+{
-+      u32 t;
-+      u8 *mac0 = (u8 *) KSEG1ADDR(0x1fff0000);
-+      u8 *mac1 = (u8 *) KSEG1ADDR(0x1fff0000 + ETH_ALEN);
-+      u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
-+
-+
-+      ath79_gpio_function_disable(AR933X_GPIO_FUNC_ETH_SWITCH_LED0_EN |
-+                                   AR933X_GPIO_FUNC_ETH_SWITCH_LED1_EN |
-+                                   AR933X_GPIO_FUNC_ETH_SWITCH_LED2_EN |
-+                                   AR933X_GPIO_FUNC_ETH_SWITCH_LED3_EN |
-+                                   AR933X_GPIO_FUNC_ETH_SWITCH_LED4_EN);
-+
-+      t = ath79_reset_rr(AR933X_RESET_REG_BOOTSTRAP);
-+      t |= AR933X_BOOTSTRAP_MDIO_GPIO_EN;
-+      ath79_reset_wr(AR933X_RESET_REG_BOOTSTRAP, t);
-+
-+      ath79_register_m25p80(NULL);
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_airgateway_gpio_leds),
-+                               ubnt_airgateway_gpio_leds);
-+
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                      ARRAY_SIZE(airgateway_gpio_keys),
-+                                      airgateway_gpio_keys);
-+
-+      ath79_init_mac(ath79_eth1_data.mac_addr, mac0, 0);
-+      ath79_init_mac(ath79_eth0_data.mac_addr, mac1, 0);
-+
-+      ath79_register_mdio(0, 0x0);
-+
-+      ath79_register_eth(1);
-+      ath79_register_eth(0);
-+
-+      ath79_register_wmac(ee, NULL);
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_AIRGW, "UBNT-AGW", "Ubiquiti AirGateway",
-+           ubnt_airgateway_setup);
-+
 --- a/arch/mips/ath79/Kconfig
 +++ b/arch/mips/ath79/Kconfig
 @@ -68,12 +68,16 @@ config ATH79_MACH_PB44
          Atheros PB44 reference board.
 --- a/arch/mips/ath79/Kconfig
 +++ b/arch/mips/ath79/Kconfig
 @@ -68,12 +68,16 @@ config ATH79_MACH_PB44
          Atheros PB44 reference board.
+
  config ATH79_MACH_UBNT_XM
 -      bool "Ubiquiti Networks XM (rev 1.0) board"
 +      bool "Ubiquiti Networks XM/UniFi boards"
  config ATH79_MACH_UBNT_XM
 -      bool "Ubiquiti Networks XM (rev 1.0) board"
 +      bool "Ubiquiti Networks XM/UniFi boards"
diff --git a/target/linux/ar71xx/patches-4.4/610-MIPS-ath79-UBNT-add-airGateway-pro-support.patch b/target/linux/ar71xx/patches-4.4/610-MIPS-ath79-UBNT-add-airGateway-pro-support.patch
deleted file mode 100644 (file)
index 27cc1e5..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/arch/mips/ath79/mach-ubnt-xm.c
-+++ b/arch/mips/ath79/mach-ubnt-xm.c
-@@ -642,3 +642,59 @@ static void __init ubnt_airgateway_setup
- MIPS_MACHINE(ATH79_MACH_UBNT_AIRGW, "UBNT-AGW", "Ubiquiti AirGateway",
-            ubnt_airgateway_setup);
-+static struct gpio_led ubnt_airgateway_pro_gpio_leds[] __initdata = {
-+      {
-+              .name      = "ubnt:blue:wlan",
-+              .gpio      = 13,
-+      }, {
-+              .name      = "ubnt:white:status",
-+              .gpio      = 17,
-+      },
-+};
-+
-+
-+static struct gpio_keys_button airgateway_pro_gpio_keys[] __initdata = {
-+      {
-+              .desc           = "reset",
-+              .type           = EV_KEY,
-+              .code           = KEY_RESTART,
-+              .debounce_interval      = UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
-+              .gpio           = 12,
-+              .active_low     = 1,
-+      }
-+};
-+
-+static void __init ubnt_airgateway_pro_setup(void)
-+{
-+      u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
-+      u8 *mac0 = (u8 *) KSEG1ADDR(0x1fff0000);
-+
-+      ath79_register_m25p80(NULL);
-+      ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_airgateway_pro_gpio_leds),
-+                               ubnt_airgateway_pro_gpio_leds);
-+
-+      ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
-+                                      ARRAY_SIZE(airgateway_pro_gpio_keys),
-+                                      airgateway_pro_gpio_keys);
-+
-+      ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
-+      ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
-+
-+
-+      ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_SW_ONLY_MODE);
-+
-+      ath79_register_mdio(1, 0x0);
-+
-+      /* GMAC0 is left unused in this configuration */
-+
-+      /* GMAC1 is connected to MAC0 on the internal switch */
-+      /* The PoE/WAN port connects to port 5 on the internal switch */
-+      /* The LAN port connects to port 4 on the internal switch */
-+      ath79_init_mac(ath79_eth1_data.mac_addr, mac0, 0);
-+      ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
-+      ath79_register_eth(1);
-+
-+}
-+
-+MIPS_MACHINE(ATH79_MACH_UBNT_AIRGWP, "UBNT-AGWP", "Ubiquiti AirGateway Pro",
-+           ubnt_airgateway_pro_setup);