From patchwork Mon Mar 12 20:23:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bill Moffitt X-Patchwork-Id: 884850 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=bmoffitt.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hARlswGV"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=bmoffitt.com header.i=@bmoffitt.com header.b="gGzPrG8C"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 400TxB3k7Nz9sSh for ; Tue, 13 Mar 2018 07:24:46 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Subject:Message-Id: Date:To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=J66DWEYq2LKYKnJq/6+QrZUS+eVQyCCuIO3OBU+9ZbA=; b=hARlswGV58u38c bBov0C3ur0q3Sp+8xSJfCunPYwM8EegeYeEXTFIv2JMPRmIS2wa5taACzAYUtpGp0hMjgSJZBz2un HbKe38+6UhhpURra2Qgy4WisJPTXQ0Ntt81iWzM5740bTxSTD7JNZcQCI8sHsZn/+JPXUB8MMeRBn gTod9BHP+KDjxFNkc/cbIidSB+yppChrBMMCPwurcABMQJ8GhYQXxS5KxTsLxkcAGgBA+EJ/pCJn0 Una1Bey8+WJC2dtSCXw8AUQAqH7h7IgTwRkslFsx9LpreE1E0z6I/3WGKHMEIq+JsoAvi3L+9YFxo UsBp8RXG8VeGc2DkswcQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1evTzl-0002Uo-W5; Mon, 12 Mar 2018 20:24:34 +0000 Received: from homie.mail.dreamhost.com ([208.97.132.208] helo=homiemail-a7.g.dreamhost.com) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1evTzg-0002Qn-2n for lede-dev@lists.infradead.org; Mon, 12 Mar 2018 20:24:31 +0000 Received: from homiemail-a7.g.dreamhost.com (localhost [127.0.0.1]) by homiemail-a7.g.dreamhost.com (Postfix) with ESMTP id 6BCDE25C074; Mon, 12 Mar 2018 13:24:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=bmoffitt.com; h=from:to:cc :subject:date:message-id; s=bmoffitt.com; bh=AmT8JsLHd7rNK1hB2JJ KGCHCugY=; b=gGzPrG8C2RA5h4FKJfW2JBCViBl3nIG3Jm1vNxXbYQ9CnpwE3Bs puGsmHZAhv9X/N9T/r3nPJ+UHRowgV86xCUhEaZbyr7lW/TIh8MuEYS/59tvwxua Dy3ljsoNT9EVlOxSeIHjV676YGdpvVyOSqY2n1rU6pfa1KNBoQdG1aTo= Received: from localhost.localdomain (108-196-201-22.lightspeed.sntcca.sbcglobal.net [108.196.201.22]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: bmoffitt@bmoffitt.com) by homiemail-a7.g.dreamhost.com (Postfix) with ESMTPSA id 2835D25C073; Mon, 12 Mar 2018 13:24:15 -0700 (PDT) From: Bill Moffitt To: lede-dev@lists.infradead.org Date: Mon, 12 Mar 2018 13:23:59 -0700 Message-Id: <1520886239-24725-1-git-send-email-bmoffitt@bmoffitt.com> X-Mailer: git-send-email 2.7.4 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180312_132428_395344_79CE9B48 X-CRM114-Status: GOOD ( 16.75 ) X-Spam-Score: -0.1 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (-0.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [208.97.132.208 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [208.97.132.208 listed in wl.mailspike.net] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.0 RCVD_IN_MSPIKE_WL Mailspike good senders Subject: [LEDE-DEV] [PATCH] Add support for Comfast E314N X-BeenThere: lede-dev@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bill Moffitt MIME-Version: 1.0 Sender: "Lede-dev" Errors-To: lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The Comfast E314N-V2 is a 2.4 GHz 2x2 radio with a built-in directional antenna and a second Ethernet port - very similar to the Ubiquiti NanoStation M2. The Ethernet port features a pass-through PoE capability, enabled or disabled with a slide switch. The radio is built using a Qualcomm/Atheros QCA9531 chipset. The majority of the changes are in the target/linux/ar71xx/files/arch/mips/ath79/mach-cf-e316n-v2.c file. One significant change is that the function cf_exxxn_qca953x_eth_setup had to be moved before the CF-314N section in that file. Firmware can be flashed on these units by the following method: 1.) Apply power to the unit 2.) Immediately AFTER applying power, hold down the reset button 3.) The WAN, LAN, and wireless lights will flash - wait three seconds (three flashes) and then release the button. 4.) After a second, the lights will "flutter" quickly and the unit will be visible at 192.168.1.1. A web page will be available to enable quick and simple uploading and flashing of firmware. During the boot process, these units also look for a tftp server at 192.168.1.10. If one is present, the firmware can be uploaded as a file called "firmware-auto.bin" --- target/linux/ar71xx/base-files/etc/board.d/01_leds | 5 + target/linux/ar71xx/base-files/etc/diag.sh | 1 + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + target/linux/ar71xx/config-4.4 | 1 + .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt | 10 ++ target/linux/ar71xx/files/arch/mips/ath79/Makefile | 1 + .../files/arch/mips/ath79/mach-cf-e316n-v2.c | 148 +++++++++++++++++---- .../linux/ar71xx/files/arch/mips/ath79/machtypes.h | 1 + target/linux/ar71xx/image/generic.mk | 9 ++ 10 files changed, 153 insertions(+), 27 deletions(-) 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 833522f..dae3481 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds @@ -143,6 +143,11 @@ carambola2) ucidef_set_led_netdev "wan" "WAN" "$board:orange:eth1" "eth1" ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" ;; +cf-e314n-v2) + ucidef_set_led_netdev "wan" "WAN" "$board:white:wan" "eth0" + ucidef_set_led_netdev "lan" "lAN" "$board:white:lan" "eth1" + ucidef_set_led_wlan "wlan" "WLAN" "$board:white:wlan" "phy0tpt" + ;; cf-e316n-v2) ucidef_set_led_netdev "lan" "LAN" "$board:blue:lan" "eth0" ucidef_set_led_netdev "wan" "WAN" "$board:blue:wan" "eth1" diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index bc2fc2f..e2f26eb 100644 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -101,6 +101,7 @@ get_status_led() { cap4200ag) status_led="senao:green:pwr" ;; + cf-e314n-v2|\ cf-e316n-v2|\ cf-e520n|\ cf-e530n) diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index bf36598..b01f4af 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -487,6 +487,9 @@ ar71xx_board_detect() { *CAP4200AG) name="cap4200ag" ;; + *"CF-E314N v2") + name="cf-e314n-v2" + ;; *"CF-E316N v2") name="cf-e316n-v2" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 21ad2a6..f7d03e5 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -209,6 +209,7 @@ platform_check_image() { bullet-m|\ c-55|\ carambola2|\ + cf-e314n-v2|\ cf-e316n-v2|\ cf-e320n-v2|\ cf-e380ac-v1|\ diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 index a862245..7ba7e2f 100644 --- a/target/linux/ar71xx/config-4.4 +++ b/target/linux/ar71xx/config-4.4 @@ -62,6 +62,7 @@ CONFIG_ATH79_MACH_C60=y CONFIG_ATH79_MACH_CAP324=y CONFIG_ATH79_MACH_CAP4200AG=y CONFIG_ATH79_MACH_CARAMBOLA2=y +CONFIG_ATH79_MACH_CF_E314N_V2=y CONFIG_ATH79_MACH_CF_E316N_V2=y CONFIG_ATH79_MACH_CF_E320N_V2=y CONFIG_ATH79_MACH_CF_E380AC_V1=y diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt index 58d7e43..d85ae2c 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt @@ -1765,6 +1765,16 @@ config ATH79_MACH_CARAMBOLA2 select ATH79_DEV_USB select ATH79_DEV_WMAC +config ATH79_MACH_CF_E314N_V2 + bool "COMFAST CF-E314N v2 support" + select SOC_QCA953X + select ATH79_DEV_ETH + select ATH79_DEV_GPIO_BUTTONS + select ATH79_DEV_LEDS_GPIO + select ATH79_DEV_M25P80 + select ATH79_DEV_USB + select ATH79_DEV_WMAC + config ATH79_MACH_CF_E316N_V2 bool "COMFAST CF-E316N v2 support" select SOC_AR934X diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile index 7aee760..942eb80 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile @@ -67,6 +67,7 @@ obj-$(CONFIG_ATH79_MACH_C60) += mach-c60.o obj-$(CONFIG_ATH79_MACH_CAP324) += mach-cap324.o obj-$(CONFIG_ATH79_MACH_CAP4200AG) += mach-cap4200ag.o obj-$(CONFIG_ATH79_MACH_CARAMBOLA2) += mach-carambola2.o +obj-$(CONFIG_ATH79_MACH_CF_E314N_V2) += mach-cf-e316n-v2.o obj-$(CONFIG_ATH79_MACH_CF_E316N_V2) += mach-cf-e316n-v2.o obj-$(CONFIG_ATH79_MACH_CF_E320N_V2) += mach-cf-e316n-v2.o obj-$(CONFIG_ATH79_MACH_CF_E380AC_V1) += mach-cf-e316n-v2.o diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-cf-e316n-v2.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-cf-e316n-v2.c index 2c202e3..87c2127 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-cf-e316n-v2.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-cf-e316n-v2.c @@ -1,5 +1,6 @@ /* * Support for COMFAST boards: + * - CF-E314N v2 (QCA9531) * - CF-E316N v2 (AR9341) * - CF-E320N v2 (QCA9531) * - CF-E380AC v1/v2 (QCA9558) @@ -35,6 +36,63 @@ #define CF_EXXXN_KEYS_POLL_INTERVAL 20 #define CF_EXXXN_KEYS_DEBOUNCE_INTERVAL (3 * CF_EXXXN_KEYS_POLL_INTERVAL) +/* CF-E314N */ +#define CF_E314N_V2_GPIO_LED_WLAN 0 +#define CF_E314N_V2_GPIO_LED_WAN 2 +#define CF_E314N_V2_GPIO_LED_LAN 3 + +#define CF_E314N_V2_GPIO_LED_SIGNAL1 11 +#define CF_E314N_V2_GPIO_LED_SIGNAL2 12 +#define CF_E314N_V2_GPIO_LED_SIGNAL3 14 +#define CF_E314N_V2_GPIO_LED_SIGNAL4 16 + +#define CF_E314N_V2_GPIO_EXT_WDT 13 + +#define CF_E314N_V2_GPIO_BTN_RESET 17 + +static struct gpio_led cf_e314n_v2_leds_gpio[] __initdata = { + { + .name = "cf-e314n-v2:white:lan", + .gpio = CF_E314N_V2_GPIO_LED_LAN, + .active_low = 1, + }, { + .name = "cf-e314n-v2:white:wan", + .gpio = CF_E314N_V2_GPIO_LED_WAN, + .active_low = 1, + }, { + .name = "cf-e314n-v2:white:wlan", + .gpio = CF_E314N_V2_GPIO_LED_WLAN, + .active_low = 1, + }, { + .name = "cf-e314n-v2:white:signal1", + .gpio = CF_E314N_V2_GPIO_LED_SIGNAL1, + .active_low = 1, + }, { + .name = "cf-e314n-v2:white:signal2", + .gpio = CF_E314N_V2_GPIO_LED_SIGNAL2, + .active_low = 1, + }, { + .name = "cf-e314n-v2:white:signal3", + .gpio = CF_E314N_V2_GPIO_LED_SIGNAL3, + .active_low = 1, + }, { + .name = "cf-e314n-v2:white:signal4", + .gpio = CF_E314N_V2_GPIO_LED_SIGNAL4, + .active_low = 1, + }, +}; + +static struct gpio_keys_button cf_e314n_v2_gpio_keys[] __initdata = { + { + .desc = "Reset button", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = CF_EXXXN_KEYS_DEBOUNCE_INTERVAL, + .gpio = CF_E314N_V2_GPIO_BTN_RESET, + .active_low = 1, + }, +}; + /* CF-E316N v2 */ #define CF_E316N_V2_GPIO_LED_DIAG_B 0 #define CF_E316N_V2_GPIO_LED_DIAG_R 2 @@ -253,6 +311,69 @@ static void __init cf_exxxn_common_setup(unsigned long art_ofs, int gpio_wdt) ath79_register_usb(); } +static void __init cf_exxxn_qca953x_eth_setup(void) +{ + u8 *mac = (u8 *) KSEG1ADDR(0x1f010000); + + ath79_setup_ar933x_phy4_switch(false, false); + + ath79_register_mdio(0, 0x0); + + ath79_switch_data.phy4_mii_en = 1; + ath79_switch_data.phy_poll_mask |= BIT(4); + + /* LAN */ + ath79_eth1_data.duplex = DUPLEX_FULL; + ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; + ath79_eth1_data.speed = SPEED_1000; + ath79_init_mac(ath79_eth1_data.mac_addr, mac, 2); + ath79_register_eth(1); + + /* WAN */ + ath79_eth0_data.duplex = DUPLEX_FULL; + ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ath79_eth0_data.speed = SPEED_100; + ath79_eth0_data.phy_mask = BIT(4); + ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); + ath79_register_eth(0); +} + +static void __init cf_e314n_v2_setup(void) +{ + cf_exxxn_common_setup(0x10000, CF_E314N_V2_GPIO_EXT_WDT); + + cf_exxxn_qca953x_eth_setup(); + + /* Disable JTAG (enables GPIO0-3) */ + ath79_gpio_function_enable(AR934X_GPIO_FUNC_JTAG_DISABLE); + + ath79_gpio_direction_select(CF_E314N_V2_GPIO_LED_LAN, true); + ath79_gpio_direction_select(CF_E314N_V2_GPIO_LED_WAN, true); + ath79_gpio_direction_select(CF_E314N_V2_GPIO_LED_WLAN, true); + ath79_gpio_direction_select(CF_E314N_V2_GPIO_LED_SIGNAL1, true); + ath79_gpio_direction_select(CF_E314N_V2_GPIO_LED_SIGNAL2, true); + ath79_gpio_direction_select(CF_E314N_V2_GPIO_LED_SIGNAL3, true); + ath79_gpio_direction_select(CF_E314N_V2_GPIO_LED_SIGNAL4, true); + + ath79_gpio_output_select(CF_E314N_V2_GPIO_LED_LAN, 0); + ath79_gpio_output_select(CF_E314N_V2_GPIO_LED_WAN, 0); + ath79_gpio_output_select(CF_E314N_V2_GPIO_LED_WLAN, 0); + ath79_gpio_output_select(CF_E314N_V2_GPIO_LED_SIGNAL1, 0); + ath79_gpio_output_select(CF_E314N_V2_GPIO_LED_SIGNAL2, 0); + ath79_gpio_output_select(CF_E314N_V2_GPIO_LED_SIGNAL3, 0); + ath79_gpio_output_select(CF_E314N_V2_GPIO_LED_SIGNAL4, 0); + + ath79_register_leds_gpio(-1, ARRAY_SIZE(cf_e314n_v2_leds_gpio), + cf_e314n_v2_leds_gpio); + + ath79_register_gpio_keys_polled(-1, CF_EXXXN_KEYS_POLL_INTERVAL, + ARRAY_SIZE(cf_e314n_v2_gpio_keys), + cf_e314n_v2_gpio_keys); +} + +MIPS_MACHINE(ATH79_MACH_CF_E314N_V2, "CF-E314N-V2", "COMFAST CF-E314N v2", + cf_e314n_v2_setup); + static void __init cf_e316n_v2_setup(void) { u8 *mac = (u8 *) KSEG1ADDR(0x1f010000); @@ -294,33 +415,6 @@ static void __init cf_e316n_v2_setup(void) MIPS_MACHINE(ATH79_MACH_CF_E316N_V2, "CF-E316N-V2", "COMFAST CF-E316N v2", cf_e316n_v2_setup); -static void __init cf_exxxn_qca953x_eth_setup(void) -{ - u8 *mac = (u8 *) KSEG1ADDR(0x1f010000); - - ath79_setup_ar933x_phy4_switch(false, false); - - ath79_register_mdio(0, 0x0); - - ath79_switch_data.phy4_mii_en = 1; - ath79_switch_data.phy_poll_mask |= BIT(4); - - /* LAN */ - ath79_eth1_data.duplex = DUPLEX_FULL; - ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; - ath79_eth1_data.speed = SPEED_1000; - ath79_init_mac(ath79_eth1_data.mac_addr, mac, 2); - ath79_register_eth(1); - - /* WAN */ - ath79_eth0_data.duplex = DUPLEX_FULL; - ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; - ath79_eth0_data.speed = SPEED_100; - ath79_eth0_data.phy_mask = BIT(4); - ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); - ath79_register_eth(0); -} - static void __init cf_e320n_v2_setup(void) { cf_exxxn_common_setup(0x10000, CF_E320N_V2_GPIO_EXT_WDT); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index a12685c..78c2322 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -53,6 +53,7 @@ enum ath79_mach_type { ATH79_MACH_CAP324, /* PowerCloud CAP324 */ ATH79_MACH_CAP4200AG, /* Senao CAP4200AG */ ATH79_MACH_CARAMBOLA2, /* 8devices Carambola2 */ + ATH79_MACH_CF_E314N_V2, /* COMFAST CF-E314N v2 */ ATH79_MACH_CF_E316N_V2, /* COMFAST CF-E316N v2 */ ATH79_MACH_CF_E320N_V2, /* COMFAST CF-E320N v2 */ ATH79_MACH_CF_E380AC_V1, /* COMFAST CF-E380AC v1 */ diff --git a/target/linux/ar71xx/image/generic.mk b/target/linux/ar71xx/image/generic.mk index e11a899..9717841 100644 --- a/target/linux/ar71xx/image/generic.mk +++ b/target/linux/ar71xx/image/generic.mk @@ -40,6 +40,15 @@ define Device/carambola2 endef TARGET_DEVICES += carambola2 +define Device/cf-e314n-v2 + DEVICE_TITLE := COMFAST CF-E314N v2 + BOARDNAME = CF-E314N-V2 + IMAGE_SIZE = 16192k + CONSOLE = ttyS0,115200 + MTDPARTS = spi0.0:64k(u-boot)ro,64k(art)ro,16192k(firmware),64k(art-backup)ro +endef +TARGET_DEVICES += cf-e314n-v2 + define Device/cf-e316n-v2 DEVICE_TITLE := COMFAST CF-E316N v2 BOARDNAME = CF-E316N-V2