648 lines
22 KiB
Diff
648 lines
22 KiB
Diff
|
From ac56ca1999a6d5ccf6a144187a3b94a9641678b4 Mon Sep 17 00:00:00 2001
|
||
|
From: Serg Studzinskii <serguzhg@gmail.com>
|
||
|
Date: Wed, 8 Mar 2017 22:10:05 +0200
|
||
|
Subject: [PATCH] ar71xx: add support for TP-Link TL-WR942N v1
|
||
|
|
||
|
TP-Link TL-WR942N v1 is a 2.4 GHz single-band N450 router, based on
|
||
|
Qualcomm/Atheros QCA9561.
|
||
|
|
||
|
Specification:
|
||
|
|
||
|
- 775/650/258 MHz (CPU/DDR/AHB)
|
||
|
- 128 MB of RAM (DDR2)
|
||
|
- 16 MB of FLASH (SPI NOR)
|
||
|
- 3T3R 2.4 GHz
|
||
|
- 5x 10/100 Mbps Ethernet
|
||
|
- 2x USB 2.0
|
||
|
- 11x LED (most are controlled by 74HC595)
|
||
|
- 2x button
|
||
|
- UART header on PCB*
|
||
|
|
||
|
* Serial console is disabled in OEM non-beta firmwares and corresponding
|
||
|
GPIO pins 14 and 15 are assigned to control USB1 and USB2 LEDs by
|
||
|
production (non-beta) U-Boot and firmware.
|
||
|
|
||
|
Currently not working:
|
||
|
|
||
|
1. USB1 and USB2 LEDs if UART RX and TX pins are assigned to their GPIOs
|
||
|
by some U-Boot versions.
|
||
|
|
||
|
Flash instruction under vendor GUI:
|
||
|
|
||
|
1. Download "lede-ar71xx-generic-tl-wr942n-v1-squashfs-factory.bin".
|
||
|
2. Go to WEB interface and perform usual firmware upgrade.
|
||
|
|
||
|
FLash instruction under U-Boot recovery mode (doesn't work in beta
|
||
|
firmware):
|
||
|
|
||
|
1. Setup PC with static IP "192.168.0.66/24" and tftp server.
|
||
|
2. Change "*-factory" image filename to "WR942v1_recovery.bin" and make
|
||
|
it available to download from your tftp server.
|
||
|
3. Press "reset" button and power up the router, wait till "WPS" LED
|
||
|
turns on.
|
||
|
|
||
|
Flash instruction under U-Boot, using UART (can be done only with
|
||
|
preinstalled UART-enabled U-Boot version!):
|
||
|
|
||
|
1. Use "tpl" to stop autobooting and obtain U-Boot CLI access.
|
||
|
2. Setup ip addresses for U-Boot and your tftp server.
|
||
|
3. Issue below commands:
|
||
|
tftp 0x81000000 lede-ar71xx-generic-tl-wr942n-v1-sysupgrade.bin
|
||
|
erase 0x9f020000 +$filesize
|
||
|
cp.b 0x81000000 0x9f020000 $filesize
|
||
|
reset
|
||
|
|
||
|
Signed-off-by: Serg Studzinskii <serguzhg@gmail.com>
|
||
|
[minor code style fixes, extended commit message]
|
||
|
Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
|
||
|
---
|
||
|
target/linux/ar71xx/base-files/etc/board.d/01_leds | 31 +++
|
||
|
.../linux/ar71xx/base-files/etc/board.d/02_network | 9 +
|
||
|
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 | 11 +
|
||
|
target/linux/ar71xx/files/arch/mips/ath79/Makefile | 1 +
|
||
|
.../files/arch/mips/ath79/mach-tl-wr942n-v1.c | 279 +++++++++++++++++++++
|
||
|
.../linux/ar71xx/files/arch/mips/ath79/machtypes.h | 1 +
|
||
|
target/linux/ar71xx/files/arch/mips/ath79/nvram.c | 7 +-
|
||
|
target/linux/ar71xx/image/tp-link.mk | 15 ++
|
||
|
target/linux/ar71xx/mikrotik/config-default | 1 +
|
||
|
target/linux/ar71xx/nand/config-default | 3 +
|
||
|
tools/firmware-utils/src/tplink-safeloader.c | 37 +++
|
||
|
15 files changed, 400 insertions(+), 1 deletion(-)
|
||
|
create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr942n-v1.c
|
||
|
|
||
|
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 0279dfca88..eafff81e37 100755
|
||
|
--- a/target/linux/ar71xx/base-files/etc/board.d/01_leds
|
||
|
+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds
|
||
|
@@ -648,6 +648,37 @@ tl-wr842n-v3)
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
+tl-wr802n-v1)
|
||
|
+ ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:system" "phy0tpt"
|
||
|
+ ;;
|
||
|
+tl-wr802n-v2)
|
||
|
+ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:system" "phy0tpt"
|
||
|
+ ;;
|
||
|
+tl-wr940n-v4|\
|
||
|
+tl-wr941nd-v6)
|
||
|
+ ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0"
|
||
|
+ ucidef_set_led_switch "lan1" "LAN1" "tp-link:blue:lan1" "switch0" "0x10"
|
||
|
+ ucidef_set_led_switch "lan2" "LAN2" "tp-link:blue:lan2" "switch0" "0x08"
|
||
|
+ ucidef_set_led_switch "lan3" "LAN3" "tp-link:blue:lan3" "switch0" "0x04"
|
||
|
+ ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02"
|
||
|
+ ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt"
|
||
|
+ ;;
|
||
|
+tl-wr840n-v2|\
|
||
|
+tl-wr840n-v3)
|
||
|
+ ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
|
||
|
+ ucidef_set_led_switch "lan" "LAN" "tp-link:green:lan" "switch0" "0x1E"
|
||
|
+ ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
|
||
|
+ ;;
|
||
|
+tl-wr942n-v1)
|
||
|
+ ucidef_set_led_switch "lan1" "LAN1" "$board:green:lan1" "switch0" "0x04"
|
||
|
+ ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" "switch0" "0x08"
|
||
|
+ ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" "0x10"
|
||
|
+ ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" "0x02"
|
||
|
+ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0"
|
||
|
+ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt"
|
||
|
+ ucidef_set_led_usbdev "usb1" "USB1" "$board:green:usb1" "1-1.2"
|
||
|
+ ucidef_set_led_usbdev "usb2" "USB2" "$board:green:usb2" "1-1.1"
|
||
|
+ ;;
|
||
|
tl-wr1043nd|\
|
||
|
tl-wr1043nd-v2)
|
||
|
ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1"
|
||
|
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 c8c7827a87..b33b924573 100755
|
||
|
--- a/target/linux/ar71xx/base-files/etc/board.d/02_network
|
||
|
+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
|
||
|
@@ -378,6 +378,15 @@ ar71xx_setup_interfaces()
|
||
|
ucidef_set_interface_wan "eth0"
|
||
|
ucidef_set_interface_raw "wlan" "wlan0" "dhcp"
|
||
|
;;
|
||
|
+ tl-mr3420-v2|\
|
||
|
+ tl-wr841n-v8|\
|
||
|
+ tl-wr842n-v2|\
|
||
|
+ tl-wr941nd-v5|\
|
||
|
+ tl-wr942n-v1)
|
||
|
+ ucidef_set_interfaces_lan_wan "eth1.1" "eth0"
|
||
|
+ ucidef_add_switch "switch0" \
|
||
|
+ "0@eth1" "1:lan:4" "2:lan:1" "3:lan:2" "4:lan:3"
|
||
|
+ ;;
|
||
|
tl-wdr4300|\
|
||
|
tl-wr1041n-v2)
|
||
|
ucidef_add_switch "switch0" \
|
||
|
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh
|
||
|
index 7b8aac8f8e..1a62d8fb29 100644
|
||
|
--- a/target/linux/ar71xx/base-files/etc/diag.sh
|
||
|
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
|
||
|
@@ -33,6 +33,7 @@ get_status_led() {
|
||
|
db120|\
|
||
|
dr344|\
|
||
|
tew-632brp|\
|
||
|
+ tl-wr942n-v1|\
|
||
|
wpj344|\
|
||
|
zbt-we1526)
|
||
|
status_led="$board:green:status"
|
||
|
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||
|
index b035535a42..5e2c151dc1 100755
|
||
|
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||
|
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
|
||
|
@@ -1088,6 +1088,9 @@ ar71xx_board_detect() {
|
||
|
*"TL-MR13U v1")
|
||
|
name="tl-mr13u"
|
||
|
;;
|
||
|
+ *"TL-WR942N v1")
|
||
|
+ name="tl-wr942n-v1"
|
||
|
+ ;;
|
||
|
*"Tube2H")
|
||
|
name="tube2h"
|
||
|
;;
|
||
|
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||
|
index 580e09a46f..74c1046241 100755
|
||
|
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||
|
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
|
||
|
@@ -259,6 +259,7 @@ platform_check_image() {
|
||
|
tew-712br|\
|
||
|
tew-732br|\
|
||
|
tew-823dru|\
|
||
|
+ tl-wr942n-v1|\
|
||
|
unifi-outdoor|\
|
||
|
unifiac-lite|\
|
||
|
unifiac-pro|\
|
||
|
diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4
|
||
|
index ff6bb135d1..287d1597dd 100644
|
||
|
--- a/target/linux/ar71xx/config-4.4
|
||
|
+++ b/target/linux/ar71xx/config-4.4
|
||
|
@@ -192,6 +192,7 @@ CONFIG_ATH79_MACH_TL_WR841N_V9=y
|
||
|
CONFIG_ATH79_MACH_TL_WR941ND=y
|
||
|
CONFIG_ATH79_MACH_TL_WR941ND_V6=y
|
||
|
CONFIG_ATH79_MACH_TL_WR940N_V4=y
|
||
|
+CONFIG_ATH79_MACH_TL_WR942N_V1=y
|
||
|
CONFIG_ATH79_MACH_TUBE2H=y
|
||
|
CONFIG_ATH79_MACH_UBNT=y
|
||
|
CONFIG_ATH79_MACH_UBNT_UNIFIAC=y
|
||
|
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
|
||
|
index 76ba6fafb7..bce65ec2a7 100644
|
||
|
--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
|
||
|
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
|
||
|
@@ -1533,6 +1533,17 @@ config ATH79_MACH_TL_WR940N_V4
|
||
|
select ATH79_DEV_M25P80
|
||
|
select ATH79_DEV_WMAC
|
||
|
|
||
|
+config ATH79_MACH_TL_WR942N_V1
|
||
|
+ bool "TP-LINK TL-WR942N v1 support"
|
||
|
+ select SOC_QCA956X
|
||
|
+ 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
|
||
|
+ select ATH79_NVRAM
|
||
|
+
|
||
|
config ATH79_MACH_TL_WR1041N_V2
|
||
|
bool "TP-LINK TL-WR1041N 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 c91d03ff21..876444249f 100644
|
||
|
--- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile
|
||
|
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
|
||
|
@@ -196,6 +196,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WR841N_V9) += mach-tl-wr841n-v9.o
|
||
|
obj-$(CONFIG_ATH79_MACH_TL_WR941ND) += mach-tl-wr941nd.o
|
||
|
obj-$(CONFIG_ATH79_MACH_TL_WR941ND_V6) += mach-tl-wr941nd-v6.o
|
||
|
obj-$(CONFIG_ATH79_MACH_TL_WR940N_V4) += mach-tl-wr940n-v4.o
|
||
|
+obj-$(CONFIG_ATH79_MACH_TL_WR942N_V1) += mach-tl-wr942n-v1.o
|
||
|
obj-$(CONFIG_ATH79_MACH_TUBE2H) += mach-tube2h.o
|
||
|
obj-$(CONFIG_ATH79_MACH_UBNT) += mach-ubnt.o
|
||
|
obj-$(CONFIG_ATH79_MACH_UBNT_UNIFIAC) += mach-ubnt-unifiac.o
|
||
|
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr942n-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr942n-v1.c
|
||
|
new file mode 100644
|
||
|
index 0000000000..72910400c5
|
||
|
--- /dev/null
|
||
|
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr942n-v1.c
|
||
|
@@ -0,0 +1,279 @@
|
||
|
+/*
|
||
|
+ * TP-Link TL-WR942N(RU) v1 board support
|
||
|
+ *
|
||
|
+ * Copyright (C) 2017 Sergey Studzinski <serguzhg@gmail.com>
|
||
|
+ * Thanks to Henryk Heisig <hyniu@o2.pl>
|
||
|
+ *
|
||
|
+ * 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/platform_device.h>
|
||
|
+#include <linux/ath9k_platform.h>
|
||
|
+#include <asm/mach-ath79/ar71xx_regs.h>
|
||
|
+#include <linux/gpio.h>
|
||
|
+#include <linux/init.h>
|
||
|
+#include <linux/spi/spi_gpio.h>
|
||
|
+#include <linux/spi/74x164.h>
|
||
|
+
|
||
|
+#include "common.h"
|
||
|
+#include "dev-m25p80.h"
|
||
|
+#include "machtypes.h"
|
||
|
+#include "dev-eth.h"
|
||
|
+#include "dev-gpio-buttons.h"
|
||
|
+#include "dev-leds-gpio.h"
|
||
|
+#include "dev-spi.h"
|
||
|
+#include "dev-usb.h"
|
||
|
+#include "dev-wmac.h"
|
||
|
+#include "nvram.h"
|
||
|
+
|
||
|
+#define TL_WR942N_V1_KEYS_POLL_INTERVAL 20
|
||
|
+#define TL_WR942N_V1_KEYS_DEBOUNCE_INTERVAL \
|
||
|
+ (3 * TL_WR942N_V1_KEYS_POLL_INTERVAL)
|
||
|
+
|
||
|
+#define TL_WR942N_V1_GPIO_BTN_RESET 1
|
||
|
+#define TL_WR942N_V1_GPIO_BTN_RFKILL 2
|
||
|
+
|
||
|
+#define TL_WR942N_V1_GPIO_UART_TX 4
|
||
|
+#define TL_WR942N_V1_GPIO_UART_RX 5
|
||
|
+
|
||
|
+#define TL_WR942N_V1_GPIO_LED_USB2 14
|
||
|
+#define TL_WR942N_V1_GPIO_LED_USB1 15
|
||
|
+
|
||
|
+#define TL_WR942N_V1_GPIO_SHIFT_OE 16
|
||
|
+#define TL_WR942N_V1_GPIO_SHIFT_SER 17
|
||
|
+#define TL_WR942N_V1_GPIO_SHIFT_SRCLK 18
|
||
|
+#define TL_WR942N_V1_GPIO_SHIFT_SRCLR 19
|
||
|
+#define TL_WR942N_V1_GPIO_SHIFT_RCLK 20
|
||
|
+#define TL_WR942N_V1_GPIO_LED_WPS 21
|
||
|
+#define TL_WR942N_V1_GPIO_LED_STATUS 22
|
||
|
+
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_BASE QCA956X_GPIO_COUNT
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_LED_LAN4 23
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_LED_LAN3 24
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_LED_LAN2 25
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_LED_LAN1 26
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_LED_WAN_GREEN 27
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_LED_WAN_AMBER 28
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_LED_WLAN 29
|
||
|
+#define TL_WR942N_V1_74HC_GPIO_HUB_RESET 30 /* from u-boot sources */
|
||
|
+
|
||
|
+#define TL_WR942N_V1_SSR_BIT_0 0
|
||
|
+#define TL_WR942N_V1_SSR_BIT_1 1
|
||
|
+#define TL_WR942N_V1_SSR_BIT_2 2
|
||
|
+#define TL_WR942N_V1_SSR_BIT_3 3
|
||
|
+#define TL_WR942N_V1_SSR_BIT_4 4
|
||
|
+#define TL_WR942N_V1_SSR_BIT_5 5
|
||
|
+#define TL_WR942N_V1_SSR_BIT_6 6
|
||
|
+#define TL_WR942N_V1_SSR_BIT_7 7
|
||
|
+
|
||
|
+#define TL_WR942N_V1_WMAC_CALDATA_OFFSET 0x1000
|
||
|
+#define TL_WR942N_V1_DEFAULT_MAC_ADDR 0x1fe40008
|
||
|
+#define TL_WR942N_V1_DEFAULT_MAC_SIZE 0x200
|
||
|
+
|
||
|
+#define GPIO_IN_ENABLE0_UART_SIN_LSB 8
|
||
|
+#define GPIO_IN_ENABLE0_UART_SIN_MASK 0x0000ff00
|
||
|
+
|
||
|
+static struct gpio_led tl_wr942n_v1_leds_gpio[] __initdata = {
|
||
|
+ {
|
||
|
+ .name = "tl-wr942n-v1:green:status",
|
||
|
+ .gpio = TL_WR942N_V1_GPIO_LED_STATUS,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:wlan",
|
||
|
+ .gpio = TL_WR942N_V1_74HC_GPIO_LED_WLAN,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:lan1",
|
||
|
+ .gpio = TL_WR942N_V1_74HC_GPIO_LED_LAN1,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:lan2",
|
||
|
+ .gpio = TL_WR942N_V1_74HC_GPIO_LED_LAN2,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:lan3",
|
||
|
+ .gpio = TL_WR942N_V1_74HC_GPIO_LED_LAN3,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:lan4",
|
||
|
+ .gpio = TL_WR942N_V1_74HC_GPIO_LED_LAN4,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:wan",
|
||
|
+ .gpio = TL_WR942N_V1_74HC_GPIO_LED_WAN_GREEN,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:amber:wan",
|
||
|
+ .gpio = TL_WR942N_V1_74HC_GPIO_LED_WAN_AMBER,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:wps",
|
||
|
+ .gpio = TL_WR942N_V1_GPIO_LED_WPS,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:usb1",
|
||
|
+ .gpio = TL_WR942N_V1_GPIO_LED_USB1,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .name = "tl-wr942n-v1:green:usb2",
|
||
|
+ .gpio = TL_WR942N_V1_GPIO_LED_USB2,
|
||
|
+ .active_low = 1,
|
||
|
+ },
|
||
|
+};
|
||
|
+
|
||
|
+static struct gpio_keys_button tl_wr942n_v1_gpio_keys[] __initdata = {
|
||
|
+ {
|
||
|
+ .desc = "Reset button",
|
||
|
+ .type = EV_KEY,
|
||
|
+ .code = KEY_RESTART,
|
||
|
+ .debounce_interval = TL_WR942N_V1_KEYS_DEBOUNCE_INTERVAL,
|
||
|
+ .gpio = TL_WR942N_V1_GPIO_BTN_RESET,
|
||
|
+ .active_low = 1,
|
||
|
+ }, {
|
||
|
+ .desc = "RFKILL button",
|
||
|
+ .type = EV_KEY,
|
||
|
+ .code = KEY_RFKILL,
|
||
|
+ .debounce_interval = TL_WR942N_V1_KEYS_DEBOUNCE_INTERVAL,
|
||
|
+ .gpio = TL_WR942N_V1_GPIO_BTN_RFKILL,
|
||
|
+ .active_low = 1,
|
||
|
+ },
|
||
|
+};
|
||
|
+
|
||
|
+static struct spi_gpio_platform_data tl_wr942n_v1_spi_data = {
|
||
|
+ .sck = TL_WR942N_V1_GPIO_SHIFT_SRCLK,
|
||
|
+ .miso = SPI_GPIO_NO_MISO,
|
||
|
+ .mosi = TL_WR942N_V1_GPIO_SHIFT_SER,
|
||
|
+ .num_chipselect = 1,
|
||
|
+};
|
||
|
+
|
||
|
+static u8 tl_wr942n_v1_ssr_initdata[] __initdata = {
|
||
|
+ BIT(TL_WR942N_V1_SSR_BIT_7) |
|
||
|
+ BIT(TL_WR942N_V1_SSR_BIT_6) |
|
||
|
+ BIT(TL_WR942N_V1_SSR_BIT_5) |
|
||
|
+ BIT(TL_WR942N_V1_SSR_BIT_4) |
|
||
|
+ BIT(TL_WR942N_V1_SSR_BIT_3) |
|
||
|
+ BIT(TL_WR942N_V1_SSR_BIT_2) |
|
||
|
+ BIT(TL_WR942N_V1_SSR_BIT_1) |
|
||
|
+ BIT(TL_WR942N_V1_SSR_BIT_0)
|
||
|
+};
|
||
|
+
|
||
|
+static struct gen_74x164_chip_platform_data tl_wr942n_v1_ssr_data = {
|
||
|
+ .base = TL_WR942N_V1_74HC_GPIO_BASE,
|
||
|
+ .num_registers = ARRAY_SIZE(tl_wr942n_v1_ssr_initdata),
|
||
|
+ .init_data = tl_wr942n_v1_ssr_initdata,
|
||
|
+};
|
||
|
+
|
||
|
+static struct platform_device tl_wr942n_v1_spi_device = {
|
||
|
+ .name = "spi_gpio",
|
||
|
+ .id = 1,
|
||
|
+ .dev = {
|
||
|
+ .platform_data = &tl_wr942n_v1_spi_data,
|
||
|
+ },
|
||
|
+};
|
||
|
+
|
||
|
+static struct spi_board_info tl_wr942n_v1_spi_info[] = {
|
||
|
+ {
|
||
|
+ .bus_num = 1,
|
||
|
+ .chip_select = 0,
|
||
|
+ .max_speed_hz = 10000000,
|
||
|
+ .modalias = "74x164",
|
||
|
+ .platform_data = &tl_wr942n_v1_ssr_data,
|
||
|
+ .controller_data = (void *) TL_WR942N_V1_GPIO_SHIFT_RCLK,
|
||
|
+ },
|
||
|
+};
|
||
|
+
|
||
|
+static void tl_wr942n_v1_get_mac(const char *name, char *mac)
|
||
|
+{
|
||
|
+ u8 *nvram = (u8 *) KSEG1ADDR(TL_WR942N_V1_DEFAULT_MAC_ADDR);
|
||
|
+ int err;
|
||
|
+
|
||
|
+ err = ath79_nvram_parse_mac_addr(nvram, TL_WR942N_V1_DEFAULT_MAC_SIZE,
|
||
|
+ name, mac);
|
||
|
+
|
||
|
+ if (err)
|
||
|
+ pr_err("no MAC address found for %s\n", name);
|
||
|
+}
|
||
|
+
|
||
|
+static void __init tl_wr942n_v1_setup(void)
|
||
|
+{
|
||
|
+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
|
||
|
+ u8 tmpmac[ETH_ALEN];
|
||
|
+ void __iomem *base;
|
||
|
+ u32 t;
|
||
|
+
|
||
|
+ ath79_register_m25p80(NULL);
|
||
|
+
|
||
|
+ spi_register_board_info(tl_wr942n_v1_spi_info,
|
||
|
+ ARRAY_SIZE(tl_wr942n_v1_spi_info));
|
||
|
+ platform_device_register(&tl_wr942n_v1_spi_device);
|
||
|
+
|
||
|
+ /* Check inherited UART RX GPIO definition */
|
||
|
+ base = ioremap(AR71XX_GPIO_BASE, AR71XX_GPIO_SIZE);
|
||
|
+
|
||
|
+ t = __raw_readl(base + QCA956X_GPIO_REG_IN_ENABLE0);
|
||
|
+ if (((t & GPIO_IN_ENABLE0_UART_SIN_MASK)
|
||
|
+ >> GPIO_IN_ENABLE0_UART_SIN_LSB) == TL_WR942N_V1_GPIO_LED_USB1) {
|
||
|
+ pr_warn("Active UART detected on USBLED's GPIOs!\n");
|
||
|
+
|
||
|
+ tl_wr942n_v1_leds_gpio[9].gpio = TL_WR942N_V1_GPIO_UART_TX;
|
||
|
+ tl_wr942n_v1_leds_gpio[10].gpio = TL_WR942N_V1_GPIO_UART_RX;
|
||
|
+ }
|
||
|
+
|
||
|
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr942n_v1_leds_gpio),
|
||
|
+ tl_wr942n_v1_leds_gpio);
|
||
|
+
|
||
|
+ ath79_register_gpio_keys_polled(-1, TL_WR942N_V1_KEYS_POLL_INTERVAL,
|
||
|
+ ARRAY_SIZE(tl_wr942n_v1_gpio_keys),
|
||
|
+ tl_wr942n_v1_gpio_keys);
|
||
|
+
|
||
|
+ tl_wr942n_v1_get_mac("MAC:", tmpmac);
|
||
|
+
|
||
|
+ /* swap PHYs */
|
||
|
+ ath79_setup_qca956x_eth_cfg(QCA956X_ETH_CFG_SW_PHY_SWAP |
|
||
|
+ QCA956X_ETH_CFG_SW_PHY_ADDR_SWAP);
|
||
|
+
|
||
|
+ ath79_register_mdio(0, 0x0);
|
||
|
+ ath79_register_mdio(1, 0x0);
|
||
|
+
|
||
|
+ /* WAN port */
|
||
|
+ ath79_init_mac(ath79_eth0_data.mac_addr, tmpmac, 1);
|
||
|
+ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
|
||
|
+ ath79_eth0_data.speed = SPEED_100;
|
||
|
+ ath79_eth0_data.duplex = DUPLEX_FULL;
|
||
|
+
|
||
|
+ /* swaped PHYs */
|
||
|
+ ath79_eth0_data.phy_mask = BIT(0);
|
||
|
+ ath79_register_eth(0);
|
||
|
+
|
||
|
+ /* LAN ports */
|
||
|
+ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
|
||
|
+ ath79_init_mac(ath79_eth1_data.mac_addr, tmpmac, 0);
|
||
|
+ ath79_eth1_data.speed = SPEED_1000;
|
||
|
+ ath79_eth1_data.duplex = DUPLEX_FULL;
|
||
|
+
|
||
|
+ /* swaped PHYs */
|
||
|
+ ath79_switch_data.phy_poll_mask |= BIT(0);
|
||
|
+ ath79_switch_data.phy4_mii_en = 1;
|
||
|
+ ath79_register_eth(1);
|
||
|
+
|
||
|
+ ath79_register_wmac(art + TL_WR942N_V1_WMAC_CALDATA_OFFSET, tmpmac);
|
||
|
+
|
||
|
+ ath79_register_usb();
|
||
|
+
|
||
|
+ gpio_request_one(TL_WR942N_V1_74HC_GPIO_HUB_RESET,
|
||
|
+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
|
||
|
+ "USB power");
|
||
|
+
|
||
|
+ gpio_request_one(TL_WR942N_V1_GPIO_SHIFT_OE,
|
||
|
+ GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED,
|
||
|
+ "LED control");
|
||
|
+
|
||
|
+ gpio_request_one(TL_WR942N_V1_GPIO_SHIFT_SRCLR,
|
||
|
+ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
|
||
|
+ "LED reset");
|
||
|
+}
|
||
|
+
|
||
|
+MIPS_MACHINE(ATH79_MACH_TL_WR942N_V1, "TL-WR942N-V1", "TP-LINK TL-WR942N v1",
|
||
|
+ tl_wr942n_v1_setup);
|
||
|
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
|
||
|
index b9a8e3e4e0..469d2fa794 100644
|
||
|
--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
|
||
|
+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
|
||
|
@@ -234,6 +234,7 @@ enum ath79_mach_type {
|
||
|
ATH79_MACH_TL_WR941ND_V5, /* TP-LINK TL-WR941ND v5 */
|
||
|
ATH79_MACH_TL_WR941ND_V6, /* TP-LINK TL-WR941ND v6 */
|
||
|
ATH79_MACH_TL_WR940N_V4, /* TP-LINK TL-WR940N v4 */
|
||
|
+ ATH79_MACH_TL_WR942N_V1, /* TP-LINK TL-WR942N v1 */
|
||
|
ATH79_MACH_TUBE2H, /* Alfa Network Tube2H */
|
||
|
ATH79_MACH_UBNT_AIRGW, /* Ubiquiti AirGateway */
|
||
|
ATH79_MACH_UBNT_AIRGWP, /* Ubiquiti AirGateway Pro */
|
||
|
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/nvram.c b/target/linux/ar71xx/files/arch/mips/ath79/nvram.c
|
||
|
index e55af5abe2..a1de55fb19 100644
|
||
|
--- a/target/linux/ar71xx/files/arch/mips/ath79/nvram.c
|
||
|
+++ b/target/linux/ar71xx/files/arch/mips/ath79/nvram.c
|
||
|
@@ -13,6 +13,7 @@
|
||
|
#include <linux/errno.h>
|
||
|
#include <linux/init.h>
|
||
|
#include <linux/string.h>
|
||
|
+#include <linux/etherdevice.h>
|
||
|
|
||
|
#include "nvram.h"
|
||
|
|
||
|
@@ -67,7 +68,11 @@ int ath79_nvram_parse_mac_addr(const char *nvram, unsigned nvram_len,
|
||
|
t = sscanf(mac_str, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
|
||
|
&mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
|
||
|
|
||
|
- if (t != 6) {
|
||
|
+ if (t != ETH_ALEN)
|
||
|
+ t = sscanf(mac_str, "%02hhx-%02hhx-%02hhx-%02hhx-%02hhx-%02hhx",
|
||
|
+ &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
|
||
|
+
|
||
|
+ if (t != ETH_ALEN) {
|
||
|
ret = -EINVAL;
|
||
|
goto free;
|
||
|
}
|
||
|
diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk
|
||
|
index 561fae3533..93a263cfc1 100644
|
||
|
--- a/target/linux/ar71xx/image/tp-link.mk
|
||
|
+++ b/target/linux/ar71xx/image/tp-link.mk
|
||
|
@@ -795,6 +795,21 @@ define Device/tl-wr941nd-v6-cn
|
||
|
endef
|
||
|
TARGET_DEVICES += tl-wr941nd-v2 tl-wr941nd-v3 tl-wr941nd-v4 tl-wr941nd-v5 tl-wr941nd-v6 tl-wr941nd-v6-cn tl-wr940n-v4
|
||
|
|
||
|
+define Device/tl-wr942n-v1
|
||
|
+ DEVICE_TITLE := TP-LINK TL-WR942N v1
|
||
|
+ DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
|
||
|
+ BOARDNAME := TL-WR942N-V1
|
||
|
+ TPLINK_BOARD_NAME := TLWR942NV1
|
||
|
+ DEVICE_PROFILE := TLWR942
|
||
|
+ IMAGE_SIZE := 14464k
|
||
|
+ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma
|
||
|
+ IMAGES := sysupgrade.bin factory.bin
|
||
|
+ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
|
||
|
+ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
|
||
|
+ MTDPARTS := spi0.0:128k(u-boot)ro,1344k(kernel),13120k(rootfs),64k(product-info)ro,64k(partition-table)ro,256k(oem-config)ro,1344k(oem-vars)ro,64k(ART)ro,14464k@0x20000(firmware)
|
||
|
+endef
|
||
|
+TARGET_DEVICES += tl-wr942n-v1
|
||
|
+
|
||
|
define Device/tl-wr1041n-v2
|
||
|
$(Device/tplink-4mlzma)
|
||
|
DEVICE_TITLE := TP-LINK TL-WR1041N
|
||
|
diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default
|
||
|
index 44ea327fb1..7368519cee 100644
|
||
|
--- a/target/linux/ar71xx/mikrotik/config-default
|
||
|
+++ b/target/linux/ar71xx/mikrotik/config-default
|
||
|
@@ -157,6 +157,7 @@ CONFIG_ATH79_MACH_RBSXTLITE=y
|
||
|
# CONFIG_ATH79_MACH_TL_WR940N_V4 is not set
|
||
|
# CONFIG_ATH79_MACH_TL_WR941ND is not set
|
||
|
# CONFIG_ATH79_MACH_TL_WR941ND_V6 is not set
|
||
|
+# CONFIG_ATH79_MACH_TL_WR942N_V1 is not set
|
||
|
# CONFIG_ATH79_MACH_TUBE2H is not set
|
||
|
# CONFIG_ATH79_MACH_UBNT is not set
|
||
|
# CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
|
||
|
diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default
|
||
|
index 515266b0f8..caad128aa6 100644
|
||
|
--- a/target/linux/ar71xx/nand/config-default
|
||
|
+++ b/target/linux/ar71xx/nand/config-default
|
||
|
@@ -61,6 +61,9 @@
|
||
|
# CONFIG_ATH79_MACH_TL_WR841N_V8 is not set
|
||
|
# CONFIG_ATH79_MACH_TL_WR941ND is not set
|
||
|
# CONFIG_ATH79_MACH_TL_WR940N_V4 is not set
|
||
|
+# CONFIG_ATH79_MACH_TL_WR941ND_V6 is not set
|
||
|
+# CONFIG_ATH79_MACH_TL_WR942N_V1 is not set
|
||
|
+# CONFIG_ATH79_MACH_TUBE2H is not set
|
||
|
# CONFIG_ATH79_MACH_UBNT is not set
|
||
|
# CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
|
||
|
# CONFIG_ATH79_MACH_UBNT_XM is not set
|
||
|
diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c
|
||
|
index 9c9efc369c..31b374f523 100644
|
||
|
--- a/tools/firmware-utils/src/tplink-safeloader.c
|
||
|
+++ b/tools/firmware-utils/src/tplink-safeloader.c
|
||
|
@@ -553,6 +553,43 @@ static struct device_info boards[] = {
|
||
|
.last_sysupgrade_partition = "file-system"
|
||
|
},
|
||
|
|
||
|
+ /** Firmware layout for the TL-WR942N V1 */
|
||
|
+ {
|
||
|
+ .id = "TLWR942NV1",
|
||
|
+ .vendor = "",
|
||
|
+ .support_list =
|
||
|
+ "SupportList:\r\n"
|
||
|
+ "{product_name:TL-WR942N,product_ver:1.0.0,special_id:00000000}\r\n"
|
||
|
+ "{product_name:TL-WR942N,product_ver:1.0.0,special_id:52550000}\r\n",
|
||
|
+ .support_trail = '\x00',
|
||
|
+ .soft_ver = NULL,
|
||
|
+
|
||
|
+ .partitions = {
|
||
|
+ {"fs-uboot", 0x00000, 0x20000},
|
||
|
+ {"os-image", 0x20000, 0x150000},
|
||
|
+ {"file-system", 0x170000, 0xcd0000},
|
||
|
+ {"default-mac", 0xe40000, 0x00200},
|
||
|
+ {"pin", 0xe40200, 0x00200},
|
||
|
+ {"product-info", 0xe40400, 0x0fc00},
|
||
|
+ {"partition-table", 0xe50000, 0x10000},
|
||
|
+ {"soft-version", 0xe60000, 0x10000},
|
||
|
+ {"support-list", 0xe70000, 0x10000},
|
||
|
+ {"profile", 0xe80000, 0x10000},
|
||
|
+ {"default-config", 0xe90000, 0x10000},
|
||
|
+ {"user-config", 0xea0000, 0x40000},
|
||
|
+ {"qos-db", 0xee0000, 0x40000},
|
||
|
+ {"certificate", 0xf20000, 0x10000},
|
||
|
+ {"usb-config", 0xfb0000, 0x10000},
|
||
|
+ {"log", 0xfc0000, 0x20000},
|
||
|
+ {"radio-bk", 0xfe0000, 0x10000},
|
||
|
+ {"radio", 0xff0000, 0x10000},
|
||
|
+ {NULL, 0, 0}
|
||
|
+ },
|
||
|
+
|
||
|
+ .first_sysupgrade_partition = "os-image",
|
||
|
+ .last_sysupgrade_partition = "file-system",
|
||
|
+ },
|
||
|
+
|
||
|
/** Firmware layout for the RE450 */
|
||
|
{
|
||
|
.id = "RE450",
|
||
|
--
|
||
|
2.13.1
|
||
|
|