ar71xx: add support for the UniFi AP Outdoor Plus
[openwrt/openwrt.git] / target / linux / ar71xx / patches-3.14 / 616-MIPS-ath79-ubnt-xw.patch
index ed2fd246ef4898e9d2db304047a22b531b85991a..8e16697d1b33340ac39013f96fd7e41e1292f880 100644 (file)
@@ -1,6 +1,65 @@
 --- a/arch/mips/ath79/mach-ubnt-xm.c
 +++ b/arch/mips/ath79/mach-ubnt-xm.c
-@@ -332,3 +332,60 @@ static void __init ubnt_uap_pro_setup(vo
+@@ -186,6 +186,19 @@ static struct gpio_led ubnt_unifi_outdoo
+       }
+ };
++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);
+@@ -245,6 +258,38 @@ MIPS_MACHINE(ATH79_MACH_UBNT_UNIFI_OUTDO
+            "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",
+@@ -332,3 +377,78 @@ static void __init ubnt_uap_pro_setup(vo
  MIPS_MACHINE(ATH79_MACH_UBNT_UAP_PRO, "UAP-PRO", "Ubiquiti UniFi AP Pro",
             ubnt_uap_pro_setup);
  
@@ -29,7 +88,7 @@
 +      },
 +};
 +
-+static void __init ubnt_nano_m_xw_setup(void)
++static void __init ubnt_xw_init(void)
 +{
 +      u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
 +
 +      ath79_register_wmac(eeprom + UAP_PRO_WMAC_CALDATA_OFFSET, NULL);
 +      ap91_pci_init(eeprom + UAP_PRO_PCI_CALDATA_OFFSET, NULL);
 +
-+      ath79_register_mdio(0, ~(BIT(0) | BIT(1) | BIT(5)));
 +
 +      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);
 +
-+      /* GMAC0 is connected to an AR8326 switch */
 +      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_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
++      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);
 +}
 +
 +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);
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -124,6 +124,7 @@ enum ath79_mach_type {
+@@ -122,9 +122,11 @@ enum ath79_mach_type {
+       ATH79_MACH_TL_WR941ND,          /* TP-LINK TL-WR941ND */
+       ATH79_MACH_UBNT_AIRROUTER,      /* Ubiquiti AirRouter */
+       ATH79_MACH_UBNT_BULLET_M,       /* Ubiquiti Bullet M */
++      ATH79_MACH_UBNT_LOCO_M_XW,      /* Ubiquiti Loco M XW */
        ATH79_MACH_UBNT_LSSR71,         /* Ubiquiti LS-SR71 */
        ATH79_MACH_UBNT_LSX,            /* Ubiquiti LSX */
        ATH79_MACH_UBNT_NANO_M,         /* Ubiquiti NanoStation M */