ar71xx: add v4.14 support
[openwrt/openwrt.git] / target / linux / ar71xx / files / arch / mips / ath79 / mach-ubnt-unifiac.c
index 072cf12a31a0921a8e9b90689864f5d981cd2c32..5ea0028df8f8cdea7712f9d4ccc45f95ee7d2af8 100644 (file)
@@ -21,6 +21,7 @@
 #include <asm/mach-ath79/ar71xx_regs.h>
 
 #include <linux/platform_data/phy-at803x.h>
+#include <linux/ar8216_platform.h>
 
 #include "common.h"
 #include "dev-ap9x-pci.h"
@@ -29,6 +30,7 @@
 #include "dev-leds-gpio.h"
 #include "dev-m25p80.h"
 #include "dev-wmac.h"
+#include "dev-usb.h"
 #include "machtypes.h"
 
 
@@ -73,7 +75,7 @@ static struct gpio_keys_button ubnt_unifiac_gpio_keys[] __initdata = {
        }
 };
 
-static void __init ubnt_unifiac_setup(void)
+static void __init ubnt_unifiac_lite_setup(void)
 {
        u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
 
@@ -81,7 +83,7 @@ static void __init ubnt_unifiac_setup(void)
 
 
        ath79_init_mac(ath79_eth0_data.mac_addr,
-                      eeprom + UNIFIAC_MAC0_OFFSET, 0);
+                      eeprom + UNIFIAC_MAC0_OFFSET, 0);
 
        ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
        ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
@@ -99,12 +101,79 @@ static void __init ubnt_unifiac_setup(void)
 
 
        ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifiac_leds_gpio),
-                                ubnt_unifiac_leds_gpio);
+                                ubnt_unifiac_leds_gpio);
 
        ath79_register_gpio_keys_polled(-1, UNIFIAC_KEYS_POLL_INTERVAL,
-                                        ARRAY_SIZE(ubnt_unifiac_gpio_keys),
-                                        ubnt_unifiac_gpio_keys);
+                                       ARRAY_SIZE(ubnt_unifiac_gpio_keys),
+                                       ubnt_unifiac_gpio_keys);
 }
 
-MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC, "UBNT-UF-AC", "Ubiquiti UniFi-AC",
-            ubnt_unifiac_setup);
+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC_LITE, "UBNT-UF-AC-LITE",
+            "Ubiquiti UniFi-AC-LITE/MESH", ubnt_unifiac_lite_setup);
+
+static struct ar8327_pad_cfg ubnt_unifiac_pro_ar8327_pad0_cfg = {
+       .mode = AR8327_PAD_MAC_SGMII,
+       .sgmii_delay_en = true,
+};
+
+static struct ar8327_platform_data ubnt_unifiac_pro_ar8327_data = {
+       .pad0_cfg = &ubnt_unifiac_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 ubnt_unifiac_pro_mdio0_info[] = {
+       {
+               .bus_id = "ag71xx-mdio.0",
+               .mdio_addr = 0,
+               .platform_data = &ubnt_unifiac_pro_ar8327_data,
+       },
+};
+
+static void __init ubnt_unifiac_pro_setup(void)
+{
+       u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff0000);
+
+       ath79_register_m25p80(&ubnt_unifiac_flash_data);
+
+
+       ath79_init_mac(ath79_eth0_data.mac_addr,
+                      eeprom + UNIFIAC_MAC0_OFFSET, 0);
+
+       ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_SGMII;
+       ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
+       ath79_eth0_data.phy_mask = BIT(0);
+
+       mdiobus_register_board_info(ubnt_unifiac_pro_mdio0_info,
+                                   ARRAY_SIZE(ubnt_unifiac_pro_mdio0_info));
+
+       ath79_register_mdio(0, 0x00);
+       ath79_register_eth(0);
+
+
+       ath79_register_usb();
+
+
+       ath79_register_wmac(eeprom + UNIFIAC_WMAC_CALDATA_OFFSET, NULL);
+
+
+       ap91_pci_init(eeprom + UNIFIAC_PCI_CALDATA_OFFSET, NULL);
+
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_unifiac_leds_gpio),
+                                ubnt_unifiac_leds_gpio);
+
+       ath79_register_gpio_keys_polled(-1, UNIFIAC_KEYS_POLL_INTERVAL,
+                                       ARRAY_SIZE(ubnt_unifiac_gpio_keys),
+                                       ubnt_unifiac_gpio_keys);
+}
+
+
+MIPS_MACHINE(ATH79_MACH_UBNT_UNIFIAC_PRO, "UBNT-UF-AC-PRO",
+            "Ubiquiti UniFi-AC-PRO", ubnt_unifiac_pro_setup);