diff mbox

[OpenWrt-Devel,v3] ar71xx: Support for Ubiquiti UniFi AP AC LITE

Message ID trinity-6f7120e1-85e9-4874-80fb-503af96ff54d-1453280719983@3capp-gmx-bs14
State Changes Requested
Headers show

Commit Message

p.wassi@gmx.at Jan. 20, 2016, 9:05 a.m. UTC
From: P.Wassi <p.wassi at gmx.at>

Add support for the Ubiquiti UniFi AP AC LITE
Signed-off-by: P.Wassi <p.wassi at gmx.at>
---
This patch adds:
* New machine type
* Code for device setup
* Proper image configuration
* New target for the build system
* Network setup as LAN-only
* Diagnostic LED
* Sysupgrade Support
* ath10k firmware extraction
* Board detection

 base-files/etc/board.d/02_network                   |    1 
 base-files/etc/diag.sh                              |    3 
 base-files/etc/hotplug.d/firmware/11-ath10k-caldata |    3 
 base-files/lib/ar71xx.sh                            |    3 
 base-files/lib/upgrade/platform.sh                  |    1 
 config-4.1                                          |    1 
 files/arch/mips/ath79/Kconfig.openwrt               |   10 +
 files/arch/mips/ath79/Makefile                      |    1 
 files/arch/mips/ath79/mach-ubnt-unifiac.c           |  109 ++++++++++++++++++++
 files/arch/mips/ath79/machtypes.h                   |    1 
 generic/profiles/ubnt.mk                            |   11 ++
 image/Makefile                                      |   11 +-
 mikrotik/config-default                             |    1 
 nand/config-default                                 |    1 
 14 files changed, 155 insertions(+), 2 deletions(-)

Comments

Vittorio Gambaletta Feb. 11, 2016, 3:46 a.m. UTC | #1
Hello,

It seems that whitespace is broken in this patch.

Can you resend it, please?

Thank you,
Vittorio G

On 20/01/2016 10:05:20 CET, p.wassi@gmx.at wrote:
> From: P.Wassi <p.wassi at gmx.at>
>
> Add support for the Ubiquiti UniFi AP AC LITE
> Signed-off-by: P.Wassi <p.wassi at gmx.at>
> ---
> This patch adds:
> * New machine type
> * Code for device setup
> * Proper image configuration
> * New target for the build system
> * Network setup as LAN-only
> * Diagnostic LED
> * Sysupgrade Support
> * ath10k firmware extraction
> * Board detection
>
>  base-files/etc/board.d/02_network                   |    1
>  base-files/etc/diag.sh                              |    3
>  base-files/etc/hotplug.d/firmware/11-ath10k-caldata |    3
>  base-files/lib/ar71xx.sh                            |    3
>  base-files/lib/upgrade/platform.sh                  |    1
>  config-4.1                                          |    1
>  files/arch/mips/ath79/Kconfig.openwrt               |   10 +
>  files/arch/mips/ath79/Makefile                      |    1
>  files/arch/mips/ath79/mach-ubnt-unifiac.c           |  109 ++++++++++++++++++++
>  files/arch/mips/ath79/machtypes.h                   |    1
>  generic/profiles/ubnt.mk                            |   11 ++
>  image/Makefile                                      |   11 +-
>  mikrotik/config-default                             |    1
>  nand/config-default                                 |    1
>  14 files changed, 155 insertions(+), 2 deletions(-)
>
> diff -rupN a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network
> --- a/target/linux/ar71xx/base-files/etc/board.d/02_network
> +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
> @@ -359,6 +359,7 @@ tl-wa901nd-v2 |\
> tl-wa901nd-v3 |\
> tl-wr703n |\
> tube2h |\
> +unifiac |\
> wndap360 |\
> mynet-rext |\
> wp543)
> diff -rupN a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
> --- a/target/linux/ar71xx/base-files/etc/diag.sh
> +++ b/target/linux/ar71xx/base-files/etc/diag.sh
> @@ -339,7 +339,8 @@ get_status_led() {
> unifi)
> status_led="ubnt:green:dome"
> ;;
> - uap-pro)
> + uap-pro | \
> + unifiac)
> status_led="ubnt:white:dome"
> ;;
> unifi-outdoor-plus)
> diff -rupN a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
> --- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
> +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
> @@ -75,6 +75,9 @@ case "$FIRMWARE" in
> ath10kcal_extract "ART" 20480 2116
> ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
> ;;
> + unifiac)
> + ath10kcal_extract "EEPROM" 20480 2116
> + ;;
> esac
> ;;
> "ath10k/cal-pci-0000:01:00.0.bin")
> diff -rupN a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
> +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
> @@ -905,6 +905,9 @@ ar71xx_board_detect() {
> *UniFi)
> name="unifi"
> ;;
> + *"UniFi-AC")
> + name="unifiac"
> + ;;
> *"UniFi AP Pro")
> name="uap-pro"
> ;;
> diff -rupN a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
> @@ -262,6 +262,7 @@ platform_check_image() {
> wlae-ag300n | \
> nbg460n_550n_550nh | \
> unifi | \
> + unifiac | \
> unifi-outdoor | \
> carambola2 | \
> weio )
> diff -rupN a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
> --- a/target/linux/ar71xx/config-4.1
> +++ b/target/linux/ar71xx/config-4.1
> CONFIG_ATH79_MACH_TUBE2H=y
> CONFIG_ATH79_MACH_UBNT=y
> CONFIG_ATH79_MACH_UBNT_XM=y
> +CONFIG_ATH79_MACH_UBNT_UNIFIAC=y
> CONFIG_ATH79_MACH_WEIO=y
> CONFIG_ATH79_MACH_WHR_HP_G300N=y
> CONFIG_ATH79_MACH_WLAE_AG300N=y
> diff -rupN a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
> --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
> @@ -1349,6 +1349,16 @@ config ATH79_MACH_UBNT
> select ATH79_DEV_M25P80
> select ATH79_DEV_USB
>
> +config ATH79_MACH_UBNT_UNIFIAC
> + bool "Ubiquiti UniFi AC (LITE) support"
> + select SOC_QCA956X
> + select ATH79_DEV_AP9X_PCI if PCI
> + select ATH79_DEV_ETH
> + select ATH79_DEV_GPIO_BUTTONS
> + select ATH79_DEV_LEDS_GPIO
> + select ATH79_DEV_M25P80
> + select ATH79_DEV_WMAC
> +
> config ATH79_MACH_WEIO
> bool "WeIO board"
> select SOC_AR933X
> diff -rupN a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
> @@ -209,6 +209,7 @@ enum ath79_mach_type {
> ATH79_MACH_UBNT_RS, /* Ubiquiti RouterStation */
> ATH79_MACH_UBNT_UAP_PRO, /* Ubiquiti UniFi AP Pro */
> ATH79_MACH_UBNT_UNIFI, /* Ubiquiti Unifi */
> + ATH79_MACH_UBNT_UNIFIAC, /* Ubiquiti Unifi AC */
> ATH79_MACH_UBNT_UNIFI_OUTDOOR, /* Ubiquiti UnifiAP Outdoor */
> ATH79_MACH_UBNT_UNIFI_OUTDOOR_PLUS, /* Ubiquiti UnifiAP Outdoor+ */
> ATH79_MACH_UBNT_XM, /* Ubiquiti Networks XM board rev 1.0 */
> diff -rupN a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
> --- /dev/null
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
> @@ -0,0 +1,109 @@
> +/*
> + * Ubiquiti UniFi AC (LITE) board support
> + *
> + * Copyright (C) 2015-2016 P. Wassi <p.wassi@gmx.at>
> + *
> + * Derived from: mach-ubnt-xm.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 <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-wmac.h"
> +#include "machtypes.h"
> +
> +
> +#define UNIFIAC_KEYS_POLL_INTERVAL 20
> +#define UNIFIAC_KEYS_DEBOUNCE_INTERVAL (3 * UNIFIAC_KEYS_POLL_INTERVAL)
> +
> +#define UNIFIAC_GPIO_LED_WHITE 7
> +#define UNIFIAC_GPIO_LED_BLUE 8
> +
> +#define UNIFIAC_GPIO_BTN_RESET 2
> +
> +#define UNIFIAC_MAC0_OFFSET 0x0000
> +#define UNIFIAC_WMAC_CALDATA_OFFSET 0x1000
> +#define UNIFIAC_PCI_CALDATA_OFFSET 0x5000
> +
> +
> +static struct flash_platform_data ubnt_unifiac_flash_data = {
> + /* mx25l12805d and mx25l12835f have the same JEDEC ID */
> + .type = "mx25l12805d",
> +};
> +
> +static struct gpio_led ubnt_unifiac_leds_gpio[] __initdata = {
> + {
> + .name = "ubnt:white:dome",
> + .gpio = UNIFIAC_GPIO_LED_WHITE,
> + .active_low = 0,
> + }, {
> + .name = "ubnt:blue:dome",
> + .gpio = UNIFIAC_GPIO_LED_BLUE,
> + .active_low = 0,
> + }
> +};
> +
> +static struct gpio_keys_button ubnt_unifiac_gpio_keys[] __initdata = {
> + {
> + .desc = "reset",
> + .type = EV_KEY,
> + .code = KEY_RESTART,
> + .debounce_interval = UNIFIAC_KEYS_DEBOUNCE_INTERVAL,
> + .gpio = UNIFIAC_GPIO_BTN_RESET,
> + .active_low = 1,
> + }
> +};
> +
> +static void __init ubnt_unifiac_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.phy_mask = BIT(4);
> + ath79_eth0_pll_data.pll_10 = 0x00001313;
> +
> + ath79_register_mdio(0, ~BIT(4));
> + ath79_register_eth(0);
> +
> +
> + 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, "UBNT-UF-AC", "Ubiquiti UniFi-AC",
> + ubnt_unifiac_setup);
> diff -rupN a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
> @@ -165,6 +165,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WR720N_V3) +=
> obj-$(CONFIG_ATH79_MACH_TUBE2H) += mach-tube2h.o
> obj-$(CONFIG_ATH79_MACH_UBNT) += mach-ubnt.o
> obj-$(CONFIG_ATH79_MACH_UBNT_XM) += mach-ubnt-xm.o
> +obj-$(CONFIG_ATH79_MACH_UBNT_UNIFIAC) += mach-ubnt-unifiac.o
> obj-$(CONFIG_ATH79_MACH_WEIO) += mach-weio.o
> obj-$(CONFIG_ATH79_MACH_WHR_HP_G300N) += mach-whr-hp-g300n.o
> obj-$(CONFIG_ATH79_MACH_WLAE_AG300N) += mach-wlae-ag300n.o
> diff -rupN a/target/linux/ar71xx/generic/profiles/ubnt.mk b/target/linux/ar71xx/generic/profiles/ubnt.mk
> --- a/target/linux/ar71xx/generic/profiles/ubnt.mk
> +++ b/target/linux/ar71xx/generic/profiles/ubnt.mk
> @@ -38,6 +38,17 @@ endef
>
> $(eval $(call Profile,UBNTUNIFI))
>
> +define Profile/UBNTUNIFIAC
> + NAME:=Ubiquiti UniFi AP AC
> + PACKAGES:=kmod-ath10k ath10k-firmware-qca988x
> +endef
> +
> +define Profile/UBNTUNIFIAC/Description
> + Package set optimized for the Ubiquiti UniFi AP AC.
> +endef
> +
> +$(eval $(call Profile,UBNTUNIFIAC))
> +
> define Profile/UBNTUNIFIOUTDOOR
> NAME:=Ubiquiti UniFiAP Outdoor
> PACKAGES:=
> diff -rupN a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
> --- a/target/linux/ar71xx/image/Makefile
> +++ b/target/linux/ar71xx/image/Makefile
> @@ -1132,12 +1132,21 @@ define Device/ubnt-unifi
> DEVICE_PROFILE := UBNT UBNTUNIFI
> endef
>
> +define Device/ubnt-unifiac
> + DEVICE_PROFILE := UBNT UBNTUNIFIAC
> + IMAGE_SIZE := 7744k
> + MTDPARTS = spi0.0:384k(u-boot)ro,64k(u-boot-env)ro,7744k(firmware),7744k(ubnt-airos)ro,128k(bs)ro,256k(cfg)ro,64k(EEPROM)ro
> + IMAGES := sysupgrade.bin
> + IMAGE/sysupgrade.bin = append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE)
> + BOARDNAME := UBNT-UF-AC
> +endef
> +
> define Device/ubnt-unifi-outdoor
> $(Device/ubnt-bz)
> BOARDNAME := UBNT-U20
> DEVICE_PROFILE := UBNT UBNTUNIFIOUTDOOR
> endef
> -TARGET_DEVICES += ubnt-unifi ubnt-unifi-outdoor
> +TARGET_DEVICES += ubnt-unifi ubnt-unifiac ubnt-unifi-outdoor
>
> define Device/ubnt-nano-m-xw
> $(Device/ubnt-xw)
> diff -rupN a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default
> --- a/target/linux/ar71xx/mikrotik/config-default
> +++ b/target/linux/ar71xx/mikrotik/config-default
> @@ -104,6 +104,7 @@ CONFIG_ATH79_MACH_RBSXTLITE=y
> # CONFIG_ATH79_MACH_TUBE2H is not set
> # CONFIG_ATH79_MACH_UBNT is not set
> # CONFIG_ATH79_MACH_UBNT_XM is not set
> +# CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
> # CONFIG_ATH79_MACH_WHR_HP_G300N is not set
> # CONFIG_ATH79_MACH_WLAE_AG300N is not set
> # CONFIG_ATH79_MACH_WLR8100 is not set
> diff -rupN a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default
> --- a/target/linux/ar71xx/nand/config-default
> +++ b/target/linux/ar71xx/nand/config-default
> @@ -63,6 +63,7 @@
> # CONFIG_ATH79_MACH_TL_WR941ND is not set
> # CONFIG_ATH79_MACH_UBNT is not set
> # CONFIG_ATH79_MACH_UBNT_XM is not set
> +# CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
> # CONFIG_ATH79_MACH_WHR_HP_G300N is not set
> # CONFIG_ATH79_MACH_WLAE_AG300N is not set
> # CONFIG_ATH79_MACH_WNDAP360 is not set
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
p.wassi@gmx.at Feb. 11, 2016, 9:44 a.m. UTC | #2
Hi Vittorio,

sorry, what is broken with the patch?
Which things should be changed?

P.Wassi

> Hello,
> 
> It seems that whitespace is broken in this patch.
> 
> Can you resend it, please?
> 
> Thank you,
> Vittorio G
>
Vittorio Gambaletta Feb. 12, 2016, 2:24 a.m. UTC | #3
Hi P.Wassi,

The code itself does not seem to be broken.
But the whitespace on the beginning of every line is missing.
It is possible that your email client has mangled it.
So the patch cannot be applied with the "patch" tool, since that
whitespace is essential in diff files.

Also, on your site you don't escape the < and > (less than and
greater than) signs in the patch inside the "pre" tags, so the
code inbetween is parsed as HTML tags (at least here with Firefox).
Try using a combination of "pre" and "code" tags to avoid that.

Cheers,
Vittorio

On 11/02/2016 10:44:33 CET, p.wassi@gmx.at wrote:
> Hi Vittorio,
>
> sorry, what is broken with the patch?
> Which things should be changed?
>
> P.Wassi
>
>> Hello,
>>
>> It seems that whitespace is broken in this patch.
>>
>> Can you resend it, please?
>>
>> Thank you,
>> Vittorio G
>>
diff mbox

Patch

diff -rupN a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network
--- a/target/linux/ar71xx/base-files/etc/board.d/02_network
+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
@@ -359,6 +359,7 @@  tl-wa901nd-v2 |\
tl-wa901nd-v3 |\
tl-wr703n |\
tube2h |\
+unifiac |\
wndap360 |\
mynet-rext |\
wp543)
diff -rupN a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
--- a/target/linux/ar71xx/base-files/etc/diag.sh
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
@@ -339,7 +339,8 @@  get_status_led() {
unifi)
status_led="ubnt:green:dome"
;;
- uap-pro)
+ uap-pro | \
+ unifiac)
status_led="ubnt:white:dome"
;;
unifi-outdoor-plus)
diff -rupN a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
--- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -75,6 +75,9 @@  case "$FIRMWARE" in
ath10kcal_extract "ART" 20480 2116
ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
;;
+ unifiac)
+ ath10kcal_extract "EEPROM" 20480 2116
+ ;;
esac
;;
"ath10k/cal-pci-0000:01:00.0.bin")
diff -rupN a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -905,6 +905,9 @@  ar71xx_board_detect() {
*UniFi)
name="unifi"
;;
+ *"UniFi-AC")
+ name="unifiac"
+ ;;
*"UniFi AP Pro")
name="uap-pro"
;;
diff -rupN a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -262,6 +262,7 @@  platform_check_image() {
wlae-ag300n | \
nbg460n_550n_550nh | \
unifi | \
+ unifiac | \
unifi-outdoor | \
carambola2 | \
weio )
diff -rupN a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1
--- a/target/linux/ar71xx/config-4.1
+++ b/target/linux/ar71xx/config-4.1
CONFIG_ATH79_MACH_TUBE2H=y
CONFIG_ATH79_MACH_UBNT=y
CONFIG_ATH79_MACH_UBNT_XM=y
+CONFIG_ATH79_MACH_UBNT_UNIFIAC=y
CONFIG_ATH79_MACH_WEIO=y
CONFIG_ATH79_MACH_WHR_HP_G300N=y
CONFIG_ATH79_MACH_WLAE_AG300N=y
diff -rupN a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
@@ -1349,6 +1349,16 @@  config ATH79_MACH_UBNT
select ATH79_DEV_M25P80
select ATH79_DEV_USB

+config ATH79_MACH_UBNT_UNIFIAC
+ bool "Ubiquiti UniFi AC (LITE) support"
+ select SOC_QCA956X
+ select ATH79_DEV_AP9X_PCI if PCI
+ select ATH79_DEV_ETH
+ select ATH79_DEV_GPIO_BUTTONS
+ select ATH79_DEV_LEDS_GPIO
+ select ATH79_DEV_M25P80
+ select ATH79_DEV_WMAC
+
config ATH79_MACH_WEIO
bool "WeIO board"
select SOC_AR933X
diff -rupN a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
@@ -209,6 +209,7 @@  enum ath79_mach_type {
ATH79_MACH_UBNT_RS, /* Ubiquiti RouterStation */
ATH79_MACH_UBNT_UAP_PRO, /* Ubiquiti UniFi AP Pro */
ATH79_MACH_UBNT_UNIFI, /* Ubiquiti Unifi */
+ ATH79_MACH_UBNT_UNIFIAC, /* Ubiquiti Unifi AC */
ATH79_MACH_UBNT_UNIFI_OUTDOOR, /* Ubiquiti UnifiAP Outdoor */
ATH79_MACH_UBNT_UNIFI_OUTDOOR_PLUS, /* Ubiquiti UnifiAP Outdoor+ */
ATH79_MACH_UBNT_XM, /* Ubiquiti Networks XM board rev 1.0 */
diff -rupN a/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-ubnt-unifiac.c
@@ -0,0 +1,109 @@ 
+/*
+ * Ubiquiti UniFi AC (LITE) board support
+ *
+ * Copyright (C) 2015-2016 P. Wassi <p.wassi@gmx.at>
+ *
+ * Derived from: mach-ubnt-xm.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 <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-wmac.h"
+#include "machtypes.h"
+
+
+#define UNIFIAC_KEYS_POLL_INTERVAL 20
+#define UNIFIAC_KEYS_DEBOUNCE_INTERVAL (3 * UNIFIAC_KEYS_POLL_INTERVAL)
+
+#define UNIFIAC_GPIO_LED_WHITE 7
+#define UNIFIAC_GPIO_LED_BLUE 8
+
+#define UNIFIAC_GPIO_BTN_RESET 2
+
+#define UNIFIAC_MAC0_OFFSET 0x0000
+#define UNIFIAC_WMAC_CALDATA_OFFSET 0x1000
+#define UNIFIAC_PCI_CALDATA_OFFSET 0x5000
+
+
+static struct flash_platform_data ubnt_unifiac_flash_data = {
+ /* mx25l12805d and mx25l12835f have the same JEDEC ID */
+ .type = "mx25l12805d",
+};
+
+static struct gpio_led ubnt_unifiac_leds_gpio[] __initdata = {
+ {
+ .name = "ubnt:white:dome",
+ .gpio = UNIFIAC_GPIO_LED_WHITE,
+ .active_low = 0,
+ }, {
+ .name = "ubnt:blue:dome",
+ .gpio = UNIFIAC_GPIO_LED_BLUE,
+ .active_low = 0,
+ }
+};
+
+static struct gpio_keys_button ubnt_unifiac_gpio_keys[] __initdata = {
+ {
+ .desc = "reset",
+ .type = EV_KEY,
+ .code = KEY_RESTART,
+ .debounce_interval = UNIFIAC_KEYS_DEBOUNCE_INTERVAL,
+ .gpio = UNIFIAC_GPIO_BTN_RESET,
+ .active_low = 1,
+ }
+};
+
+static void __init ubnt_unifiac_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.phy_mask = BIT(4);
+ ath79_eth0_pll_data.pll_10 = 0x00001313;
+
+ ath79_register_mdio(0, ~BIT(4));
+ ath79_register_eth(0);
+
+
+ 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, "UBNT-UF-AC", "Ubiquiti UniFi-AC",
+ ubnt_unifiac_setup);
diff -rupN a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
--- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
@@ -165,6 +165,7 @@  obj-$(CONFIG_ATH79_MACH_TL_WR720N_V3) +=
obj-$(CONFIG_ATH79_MACH_TUBE2H) += mach-tube2h.o
obj-$(CONFIG_ATH79_MACH_UBNT) += mach-ubnt.o
obj-$(CONFIG_ATH79_MACH_UBNT_XM) += mach-ubnt-xm.o
+obj-$(CONFIG_ATH79_MACH_UBNT_UNIFIAC) += mach-ubnt-unifiac.o
obj-$(CONFIG_ATH79_MACH_WEIO) += mach-weio.o
obj-$(CONFIG_ATH79_MACH_WHR_HP_G300N) += mach-whr-hp-g300n.o
obj-$(CONFIG_ATH79_MACH_WLAE_AG300N) += mach-wlae-ag300n.o
diff -rupN a/target/linux/ar71xx/generic/profiles/ubnt.mk b/target/linux/ar71xx/generic/profiles/ubnt.mk
--- a/target/linux/ar71xx/generic/profiles/ubnt.mk
+++ b/target/linux/ar71xx/generic/profiles/ubnt.mk
@@ -38,6 +38,17 @@  endef

$(eval $(call Profile,UBNTUNIFI))

+define Profile/UBNTUNIFIAC
+ NAME:=Ubiquiti UniFi AP AC
+ PACKAGES:=kmod-ath10k ath10k-firmware-qca988x
+endef
+
+define Profile/UBNTUNIFIAC/Description
+ Package set optimized for the Ubiquiti UniFi AP AC.
+endef
+
+$(eval $(call Profile,UBNTUNIFIAC))
+
define Profile/UBNTUNIFIOUTDOOR
NAME:=Ubiquiti UniFiAP Outdoor
PACKAGES:=
diff -rupN a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
--- a/target/linux/ar71xx/image/Makefile
+++ b/target/linux/ar71xx/image/Makefile
@@ -1132,12 +1132,21 @@  define Device/ubnt-unifi
DEVICE_PROFILE := UBNT UBNTUNIFI
endef

+define Device/ubnt-unifiac
+ DEVICE_PROFILE := UBNT UBNTUNIFIAC
+ IMAGE_SIZE := 7744k
+ MTDPARTS = spi0.0:384k(u-boot)ro,64k(u-boot-env)ro,7744k(firmware),7744k(ubnt-airos)ro,128k(bs)ro,256k(cfg)ro,64k(EEPROM)ro
+ IMAGES := sysupgrade.bin
+ IMAGE/sysupgrade.bin = append-kernel $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE)
+ BOARDNAME := UBNT-UF-AC
+endef
+
define Device/ubnt-unifi-outdoor
$(Device/ubnt-bz)
BOARDNAME := UBNT-U20
DEVICE_PROFILE := UBNT UBNTUNIFIOUTDOOR
endef
-TARGET_DEVICES += ubnt-unifi ubnt-unifi-outdoor
+TARGET_DEVICES += ubnt-unifi ubnt-unifiac ubnt-unifi-outdoor

define Device/ubnt-nano-m-xw
$(Device/ubnt-xw)
diff -rupN a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default
--- a/target/linux/ar71xx/mikrotik/config-default
+++ b/target/linux/ar71xx/mikrotik/config-default
@@ -104,6 +104,7 @@  CONFIG_ATH79_MACH_RBSXTLITE=y
# CONFIG_ATH79_MACH_TUBE2H is not set
# CONFIG_ATH79_MACH_UBNT is not set
# CONFIG_ATH79_MACH_UBNT_XM is not set
+# CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
# CONFIG_ATH79_MACH_WHR_HP_G300N is not set
# CONFIG_ATH79_MACH_WLAE_AG300N is not set
# CONFIG_ATH79_MACH_WLR8100 is not set
diff -rupN a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default
--- a/target/linux/ar71xx/nand/config-default
+++ b/target/linux/ar71xx/nand/config-default
@@ -63,6 +63,7 @@ 
# CONFIG_ATH79_MACH_TL_WR941ND is not set
# CONFIG_ATH79_MACH_UBNT is not set
# CONFIG_ATH79_MACH_UBNT_XM is not set
+# CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
# CONFIG_ATH79_MACH_WHR_HP_G300N is not set
# CONFIG_ATH79_MACH_WLAE_AG300N is not set
# CONFIG_ATH79_MACH_WNDAP360 is not set