From 772f9d4e32f326d94050da157d108f7f97961c5f Mon Sep 17 00:00:00 2001 From: John Crispin Date: Wed, 23 Dec 2015 14:43:35 +0000 Subject: [PATCH] ar71xx: Add support for AirTight Networks C-55 This patch is to add support for the AirTight Networks C-55 Access Point Signed-off-by: Chris R Blake SVN-Revision: 47973 --- .../ar71xx/base-files/etc/board.d/01_leds | 6 + .../ar71xx/base-files/etc/board.d/02_network | 1 + target/linux/ar71xx/base-files/etc/diag.sh | 3 + .../etc/hotplug.d/firmware/10-ath9k-eeprom | 8 ++ target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + .../lib/preinit/05_set_iface_mac_ar71xx | 5 +- .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + target/linux/ar71xx/config-4.1 | 1 + .../files/arch/mips/ath79/Kconfig.openwrt | 10 ++ .../ar71xx/files/arch/mips/ath79/Makefile | 1 + .../ar71xx/files/arch/mips/ath79/mach-c55.c | 132 ++++++++++++++++++ .../ar71xx/files/arch/mips/ath79/machtypes.h | 1 + .../linux/ar71xx/generic/profiles/airtight.mk | 17 +++ target/linux/ar71xx/image/Makefile | 10 ++ 14 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-c55.c create mode 100644 target/linux/ar71xx/generic/profiles/airtight.mk diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds index 16053443b4..576d45b64d 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds @@ -98,6 +98,12 @@ cap324) ucidef_set_led_wlan "wlan_green" "WLAN_GREEN" "pcs:green:wlan" "phy1tpt" ;; +c-55) + ucidef_set_led_netdev "lan_green" "LAN_GREEN" "c-55:green:lan" "eth0" + ucidef_set_led_wlan "wlan_amber" "WLAN_AMBER" "c-55:amber:wlan" "phy0tpt" + ucidef_set_led_wlan "wlan_green" "WLAN_GREEN" "c-55:green:wlan" "phy1tpt" + ;; + cap4200ag) ucidef_set_led_default "lan_green" "LAN_GREEN" "senao:green:lan" "1" ucidef_set_led_wlan "wlan_amber" "WLAN_AMBER" "senao:amber:wlan" "phy0tpt" diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network index bbc93fff5b..8c57f2b59c 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -319,6 +319,7 @@ antminer-s1 |\ antminer-s3 |\ aw-nr580 |\ bullet-m |\ +c-55 |\ cap4200ag |\ eap300v2 |\ eap7660d |\ diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index eaf410b8b8..7e2dac8035 100644 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -58,6 +58,9 @@ get_status_led() { cap324) status_led="pcs:green:power" ;; + c-55) + status_led="c-55:green:pwr" + ;; cap4200ag) status_led="senao:green:pwr" ;; diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 9d3356447a..3b0229d3d5 100644 --- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -53,6 +53,10 @@ board=$(ar71xx_board_name) case "$FIRMWARE" in "soc_wmac.eeprom") case $board in + c-55) + ath9k_eeprom_extract "art" 4096 2048 + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +1) + ;; mr18) . /lib/upgrade/nand.sh @@ -77,6 +81,10 @@ case "$FIRMWARE" in "pci_wmac0.eeprom") case $board in + c-55) + ath9k_eeprom_extract "art" 20480 2048 + ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +2) + ;; mr18) . /lib/upgrade/nand.sh diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index dd327fbc7f..46e631110c 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -414,6 +414,9 @@ ar71xx_board_detect() { *CAP324) name="cap324" ;; + *C-55) + name="c-55" + ;; *CAP4200AG) name="cap4200ag" ;; diff --git a/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx b/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx index a9f4bf5244..39da3090f8 100644 --- a/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx +++ b/target/linux/ar71xx/base-files/lib/preinit/05_set_iface_mac_ar71xx @@ -22,6 +22,10 @@ fetch_mac_from_mtd() { preinit_set_mac_address() { case $(ar71xx_board_name) in + c-55) + mac_lan=$(mtd_get_mac_binary art 0) + [ -n "$mac_lan" ] && ifconfig eth0 hw ether "$mac_lan" + ;; dir-615-c1) fetch_mac_from_mtd config lan_mac wan_mac echo 1 > /sys/class/leds/dir-615-c1:green:wancpu/brightness @@ -49,4 +53,3 @@ preinit_set_mac_address() { } boot_hook_add preinit_main preinit_set_mac_address - diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 51ca7f796e..e8998f4c58 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -204,6 +204,7 @@ platform_check_image() { ap81 | \ ap83 | \ ap132 | \ + c-55 | \ cf-e316n-v2 | \ dgl-5500-a1 |\ dhp-1565-a1 |\ diff --git a/target/linux/ar71xx/config-4.1 b/target/linux/ar71xx/config-4.1 index 8da23db0b6..7845aa271e 100644 --- a/target/linux/ar71xx/config-4.1 +++ b/target/linux/ar71xx/config-4.1 @@ -50,6 +50,7 @@ CONFIG_ATH79_MACH_ARDUINO_YUN=y CONFIG_ATH79_MACH_AW_NR580=y CONFIG_ATH79_MACH_BHU_BXU2000N2_A=y CONFIG_ATH79_MACH_BSB=y +CONFIG_ATH79_MACH_C55=y CONFIG_ATH79_MACH_CAP324=y CONFIG_ATH79_MACH_CAP4200AG=y CONFIG_ATH79_MACH_CARAMBOLA2=y diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt index 9cf7a0b317..84d22fe7a0 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt @@ -182,6 +182,16 @@ config ATH79_MACH_PB92 select ATH79_DEV_PB9X_PCI if PCI select ATH79_DEV_USB +config ATH79_MACH_C55 + bool "AirTight Networks C-55 support" + select SOC_AR934X + 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_AW_NR580 bool "AzureWave AW-NR580 board support" select SOC_AR71XX diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile index 6800bfd3ac..2d4522551a 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile @@ -117,6 +117,7 @@ obj-$(CONFIG_ATH79_MACH_ONION_OMEGA) += mach-onion-omega.o obj-$(CONFIG_ATH79_MACH_PB42) += mach-pb42.o obj-$(CONFIG_ATH79_MACH_PB44) += mach-pb44.o obj-$(CONFIG_ATH79_MACH_PB92) += mach-pb92.o +obj-$(CONFIG_ATH79_MACH_C55) += mach-c55.o obj-$(CONFIG_ATH79_MACH_QIHOO_C301) += mach-qihoo-c301.o obj-$(CONFIG_ATH79_MACH_R6100) += mach-r6100.o obj-$(CONFIG_ATH79_MACH_RB4XX) += mach-rb4xx.o diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-c55.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-c55.c new file mode 100644 index 0000000000..cbee18e395 --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-c55.c @@ -0,0 +1,132 @@ +/* + * AirTight Networks C-55 board support + * + * Copyright (C) 2014-2015 Chris Blake + * + * Based on Senao CAP4200AG board support + * + * Copyright (C) 2012 Gabor Juhos + * + * 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 +#include +#include +#include +#include +#include +#include + +#include + +#include "common.h" +#include "pci.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-spi.h" +#include "dev-wmac.h" +#include "machtypes.h" + +#define C55_GPIO_LED_PWR_GREEN 12 +#define C55_GPIO_LED_PWR_AMBER 13 +#define C55_GPIO_LED_LAN_GREEN 14 +#define C55_GPIO_LED_LAN_AMBER 15 +#define C55_GPIO_LED_WLAN_GREEN 18 +#define C55_GPIO_LED_WLAN_AMBER 19 + +#define C55_GPIO_BTN_RESET 17 + +#define C55_KEYS_POLL_INTERVAL 20 /* msecs */ +#define C55_KEYS_DEBOUNCE_INTERVAL (3 * C55_KEYS_POLL_INTERVAL) + +#define C55_MAC_OFFSET 0 +#define C55_WMAC_CALDATA_OFFSET 0x1000 +#define C55_PCIE_CALDATA_OFFSET 0x5000 + +static struct gpio_led c55_leds_gpio[] __initdata = { + { + .name = "c-55:green:pwr", + .gpio = C55_GPIO_LED_PWR_GREEN, + .active_low = 1, + }, + { + .name = "c-55:amber:pwr", + .gpio = C55_GPIO_LED_PWR_AMBER, + .active_low = 1, + }, + { + .name = "c-55:green:lan", + .gpio = C55_GPIO_LED_LAN_GREEN, + .active_low = 1, + }, + { + .name = "c-55:amber:lan", + .gpio = C55_GPIO_LED_LAN_AMBER, + .active_low = 1, + }, + { + .name = "c-55:green:wlan", + .gpio = C55_GPIO_LED_WLAN_GREEN, + .active_low = 1, + }, + { + .name = "c-55:amber:wlan", + .gpio = C55_GPIO_LED_WLAN_AMBER, + .active_low = 1, + }, +}; + +static struct gpio_keys_button c55_gpio_keys[] __initdata = { + { + .desc = "Reset button", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = C55_KEYS_DEBOUNCE_INTERVAL, + .gpio = C55_GPIO_BTN_RESET, + .active_low = 1, + }, +}; + +static void __init c55_setup(void) +{ + /* SPI Storage*/ + ath79_register_m25p80_large(NULL); + + /* MDIO Interface */ + ath79_register_mdio(0, 0x0); + + /* AR8035-A Ethernet */ + ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0 | + AR934X_ETH_CFG_SW_ONLY_MODE); + ath79_init_mac(ath79_eth0_data.mac_addr, NULL, 0); + 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); + + /* LEDs & GPIO */ + ath79_gpio_output_select(C55_GPIO_LED_LAN_GREEN, + AR934X_GPIO_OUT_GPIO); + ath79_gpio_output_select(C55_GPIO_LED_LAN_AMBER, + AR934X_GPIO_OUT_GPIO); + ath79_register_leds_gpio(-1, ARRAY_SIZE(c55_leds_gpio), + c55_leds_gpio); + ath79_register_gpio_keys_polled(-1, C55_KEYS_POLL_INTERVAL, + ARRAY_SIZE(c55_gpio_keys), + c55_gpio_keys); + + /* WiFi */ + ath79_wmac_disable_2ghz(); + ath79_register_wmac_simple(); + ap91_pci_init_simple(); + +} +MIPS_MACHINE(ATH79_MACH_C55, "C-55", "AirTight Networks C-55", + c55_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index fd22505565..c32d44a73a 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -42,6 +42,7 @@ enum ath79_mach_type { ATH79_MACH_AW_NR580, /* AzureWave AW-NR580 */ ATH79_MACH_BHU_BXU2000N2_A1, /* BHU BXU2000n-2 A1 */ ATH79_MACH_BSB, /* Smart Electronics Black Swift board */ + ATH79_MACH_C55, /* AirTight Networks C-55 */ ATH79_MACH_CAP324, /* PowerCloud CAP324 */ ATH79_MACH_CAP4200AG, /* Senao CAP4200AG */ ATH79_MACH_CARAMBOLA2, /* 8devices Carambola2 */ diff --git a/target/linux/ar71xx/generic/profiles/airtight.mk b/target/linux/ar71xx/generic/profiles/airtight.mk new file mode 100644 index 0000000000..00f9ce4bef --- /dev/null +++ b/target/linux/ar71xx/generic/profiles/airtight.mk @@ -0,0 +1,17 @@ +# +# Copyright (C) 2015 Chris Blake (chrisrblake93@gmail.com) +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +define Profile/C-55 + NAME:=AirTight Networks C-55 + PACKAGES:=kmod-ath9k +endef + +define Profile/C-55/Description + Package set optimized for the AirTight Networks C-55 AP. +endef + +$(eval $(call Profile,C-55)) diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile index 61c76a342b..d214eaefef 100644 --- a/target/linux/ar71xx/image/Makefile +++ b/target/linux/ar71xx/image/Makefile @@ -2308,6 +2308,16 @@ $(eval $(call BuildTemplate,256k,,256k)) $(eval $(call BuildTemplate,all,,64k 128k 256k)) ifeq ($(SUBTARGET),generic) +define Device/c-55 + BOARDNAME = C-55 + KERNEL_SIZE = 2048k + IMAGE_SIZE = 15872k + MTDPARTS = spi0.0:256k(u-boot)ro,128k(u-boot-env)ro,2048k(kernel),13824k(rootfs),13824k(opt)ro,2624k(failsafe)ro,64k(art)ro,15872k@0x60000(firmware) + IMAGE/sysupgrade.bin = append-kernel $$$$(KERNEL_SIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) +endef + +TARGET_DEVICES += c-55 + $(eval $(call SingleProfile,ALFA,64k,ALFANX,alfa-nx,ALFA-NX,ttyS0,115200,$$(alfa_mtdlayout_8M),1638400,6291456,vmlinux.gz.uImage,pb9x-2.6.31-jffs2)) $(eval $(call SingleProfile,ALFA,64k,HORNETUB,hornet-ub,HORNET-UB,ttyATH0,115200,$$(alfa_mtdlayout_8M),1638400,6291456,kernel_image,rootfs_image)) $(eval $(call SingleProfile,ALFA,64k,TUBE2H8M,tube2h-8M,TUBE2H,ttyATH0,115200,$$(alfa_mtdlayout_8M),1638400,6291456,kernel.image,rootfs.image))