Merge pull request #179 from imbrolla/master

add tl-6500 v6,wr941 v7,wr842 v9,wr882 v1
This commit is contained in:
coolsnowwolf 2017-11-15 20:38:27 +08:00 committed by GitHub
commit 3de044932e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 726 additions and 12 deletions

View File

@ -722,6 +722,7 @@ tl-wdr4900-v2)
ucidef_set_led_wlan "wlan5g" "WLAN5G" "tp-link:blue:wlan5g" "phy1tpt"
;;
tl-wdr6500-v2|\
tl-wdr6500-v6|\
tl-wr741nd)
ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x02"
@ -744,6 +745,7 @@ tl-wpa8630)
tl-wr740n-v6|\
tl-wr841n-v9|\
tl-wr841n-v11|\
tl-wr842n-v9|\
tl-wr842n-v3)
ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
@ -753,6 +755,7 @@ tl-wr842n-v3)
ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
case "$board" in
tl-wr842n-v9|\
tl-wr842n-v3)
ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
;;
@ -812,6 +815,13 @@ tl-wr2543n)
ucidef_set_led_wlan "wlan2g" "WLAN2G" "tp-link:green:wlan2g" "phy0tpt"
ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1"
;;
tl-wr882n-v1)
ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x04"
ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
;;
tube2h)
ucidef_set_led_netdev "lan" "LAN" "alfa:blue:lan" "eth0"
ucidef_set_rssimon "wlan0" "200000" "1"

View File

@ -49,6 +49,8 @@ ar71xx_setup_interfaces()
tl-wr841n-v11|\
tl-wr841n-v9|\
tl-wr842n-v3|\
tl-wr842n-v9|\
tl-wr882n-v1|\
whr-g301n|\
whr-hp-g300n|\
whr-hp-gn|\
@ -311,6 +313,7 @@ ar71xx_setup_interfaces()
r6100|\
smart-300|\
tl-wdr6500-v2|\
tl-wdr6500-v6|\
tl-wr940n-v4|\
tl-wr941nd-v6|\
wnr1000-v2|\

View File

@ -413,6 +413,7 @@ get_status_led() {
tl-wa830re-v2|\
tl-wr842n-v2|\
tl-wr842n-v3|\
tl-wr842n-v9|\
tl-wr941nd|\
tl-wr941n-v7|\
tl-wr941nd-v5)
@ -437,9 +438,13 @@ get_status_led() {
tl-wr841n-v9)
status_led="tp-link:green:qss"
;;
tl-wr882n-v1)
status_led="tp-link:white:status"
;;
tl-wr2543n)
status_led="tp-link:green:wps"
;;
tl-wdr6500-v6|\
tl-wdr6500-v2)
status_led="tp-link:white:system"
;;

View File

@ -318,6 +318,9 @@ tplink_board_detect() {
"65000002")
model="TP-Link TL-WDR6500"
;;
"65000006")
model="TP-Link TL-WDR6500"
;;
"721000"*)
model="TP-Link TL-WA7210N"
;;
@ -1112,6 +1115,9 @@ ar71xx_board_detect() {
*"TL-WDR6500 v2")
name="tl-wdr6500-v2"
;;
*"TL-WDR6500 v6")
name="tl-wdr6500-v6"
;;
*"TL-WPA8630")
name="tl-wpa8630"
;;
@ -1184,6 +1190,12 @@ ar71xx_board_detect() {
*"TL-WR842N/ND v3")
name="tl-wr842n-v3"
;;
*"TL-WR842N/ND v9")
name="tl-wr842n-v9"
;;
*"TL-WR882N v1")
name="tl-wr882n-v1"
;;
*"TL-WR902AC v1")
name="tl-wr902ac-v1"
;;

View File

@ -427,6 +427,7 @@ platform_check_image() {
tl-wdr4300|\
tl-wdr4900-v2|\
tl-wdr6500-v2|\
tl-wdr6500-v6|\
tl-wpa8630|\
tl-wr1041n-v2|\
tl-wr1043nd-v2|\
@ -451,6 +452,8 @@ platform_check_image() {
tl-wr841n-v9|\
tl-wr842n-v2|\
tl-wr842n-v3|\
tl-wr842n-v9|\
tl-wr882n-v1|\
tl-wr902ac-v1|\
tl-wr941nd-v5|\
tl-wr941nd-v6|\
@ -460,6 +463,8 @@ platform_check_image() {
local magic_ver="0100"
case "$board" in
tl-wdr6500-v6|\
tl-wdr3320-v2|\
tl-wdr6500-v2)
magic_ver="0200"
;;

View File

@ -196,6 +196,7 @@ CONFIG_ATH79_MACH_TL_WDR3320_V2=y
CONFIG_ATH79_MACH_TL_WDR3500=y
CONFIG_ATH79_MACH_TL_WDR4300=y
CONFIG_ATH79_MACH_TL_WDR6500_V2=y
CONFIG_ATH79_MACH_TL_WDR6500_V6=y
CONFIG_ATH79_MACH_TL_WPA8630=y
CONFIG_ATH79_MACH_TL_WR1041N_V2=y
CONFIG_ATH79_MACH_TL_WR1043ND=y
@ -213,6 +214,7 @@ CONFIG_ATH79_MACH_TL_WR840N_V2=y
CONFIG_ATH79_MACH_TL_WR841N_V1=y
CONFIG_ATH79_MACH_TL_WR841N_V8=y
CONFIG_ATH79_MACH_TL_WR841N_V9=y
CONFIG_ATH79_MACH_TL_WR882N_V1=y
CONFIG_ATH79_MACH_TL_WR902AC_V1=y
CONFIG_ATH79_MACH_TL_WR940N_V4=y
CONFIG_ATH79_MACH_TL_WR941ND=y

View File

@ -194,6 +194,7 @@ CONFIG_ATH79_MACH_TL_WDR3320_V2=y
CONFIG_ATH79_MACH_TL_WDR3500=y
CONFIG_ATH79_MACH_TL_WDR4300=y
CONFIG_ATH79_MACH_TL_WDR6500_V2=y
CONFIG_ATH79_MACH_TL_WDR6500_V6=y
CONFIG_ATH79_MACH_TL_WPA8630=y
CONFIG_ATH79_MACH_TL_WR1041N_V2=y
CONFIG_ATH79_MACH_TL_WR1043ND=y
@ -211,6 +212,7 @@ CONFIG_ATH79_MACH_TL_WR840N_V2=y
CONFIG_ATH79_MACH_TL_WR841N_V1=y
CONFIG_ATH79_MACH_TL_WR841N_V8=y
CONFIG_ATH79_MACH_TL_WR841N_V9=y
CONFIG_ATH79_MACH_TL_WR882N_V1=y
CONFIG_ATH79_MACH_TL_WR902AC_V1=y
CONFIG_ATH79_MACH_TL_WR940N_V4=y
CONFIG_ATH79_MACH_TL_WR941ND=y

View File

@ -1,13 +1,3 @@
config ATH79_MACH_TL_WR941N_V7
bool "TP-LINK TL-WR941N v7 support"
select SOC_QCA955X
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_A60
bool "OpenMesh A40/A60 board support"
select SOC_QCA955X
@ -1635,6 +1625,17 @@ config ATH79_MACH_TL_WDR6500_V2
select ATH79_DEV_USB
select ATH79_DEV_WMAC
config ATH79_MACH_TL_WDR6500_V6
bool "TP-LINK TL-WDR6500 v6 board 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_USB
select ATH79_DEV_WMAC
config ATH79_MACH_TL_WR703N
bool "TP-LINK TL-WR703N/TL-WR710N/TL-MR10U support"
select SOC_AR933X
@ -1738,6 +1739,16 @@ config ATH79_MACH_TL_WR841N_V9
select ATH79_DEV_USB
select ATH79_DEV_WMAC
config ATH79_MACH_TL_WR882N_V1
bool "TP-LINK TL-WR882N 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_WMAC
select ATH79_DEV_USB
config ATH79_MACH_TL_WR902AC_V1
bool "TP-LINK TL-WR902AC v1 support"
select SOC_QCA953X
@ -1768,6 +1779,16 @@ config ATH79_MACH_TL_WR941ND_V6
select ATH79_DEV_M25P80
select ATH79_DEV_WMAC
config ATH79_MACH_TL_WR941N_V7
bool "TP-LINK TL-WR941N v7 support"
select SOC_QCA955X
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_TL_WR940N_V4
bool "TP-LINK TL-WR940N v4 support"
select SOC_QCA956X

View File

@ -203,6 +203,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WDR3320_V2) += mach-tl-wdr3320-v2.o
obj-$(CONFIG_ATH79_MACH_TL_WDR3500) += mach-tl-wdr3500.o
obj-$(CONFIG_ATH79_MACH_TL_WDR4300) += mach-tl-wdr4300.o
obj-$(CONFIG_ATH79_MACH_TL_WDR6500_V2) += mach-tl-wdr6500-v2.o
obj-$(CONFIG_ATH79_MACH_TL_WDR6500_V6) += mach-tl-wdr6500-v6.o
obj-$(CONFIG_ATH79_MACH_TL_WPA8630) += mach-tl-wpa8630.o
obj-$(CONFIG_ATH79_MACH_TL_WR1041N_V2) += mach-tl-wr1041n-v2.o
obj-$(CONFIG_ATH79_MACH_TL_WR1043ND) += mach-tl-wr1043nd.o
@ -220,6 +221,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WR840N_V2) += mach-tl-wr841n-v9.o
obj-$(CONFIG_ATH79_MACH_TL_WR841N_V1) += mach-tl-wr841n.o
obj-$(CONFIG_ATH79_MACH_TL_WR841N_V8) += mach-tl-wr841n-v8.o
obj-$(CONFIG_ATH79_MACH_TL_WR841N_V9) += mach-tl-wr841n-v9.o
obj-$(CONFIG_ATH79_MACH_TL_WR882N_V1) += mach-tl-wr882n-v1.o
obj-$(CONFIG_ATH79_MACH_TL_WR902AC_V1) += mach-tl-wr902ac-v1.o
obj-$(CONFIG_ATH79_MACH_TL_WR941ND) += mach-tl-wr941nd.o
obj-$(CONFIG_ATH79_MACH_TL_WR941ND_V6) += mach-tl-wr941nd-v6.o

View File

@ -0,0 +1,113 @@
/*
* TP-LINK TL-WDR6500 v6
*
*/
#include <linux/pci.h>
#include <linux/gpio.h>
#include <linux/platform_device.h>
#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/ar71xx_regs.h>
#include "common.h"
#include "dev-eth.h"
#include "dev-ap9x-pci.h"
#include "dev-gpio-buttons.h"
#include "dev-leds-gpio.h"
#include "dev-m25p80.h"
#include "dev-usb.h"
#include "dev-wmac.h"
#include "machtypes.h"
#include "pci.h"
#define TL_WDR6500_V6_GPIO_LED_SYS 21
#define TL_WDR6500_V6_GPIO_LED_WAN 18
#define TL_WDR6500_V6_GPIO_LED_LAN1 17
#define TL_WDR6500_V6_GPIO_LED_LAN2 16
#define TL_WDR6500_V6_GPIO_LED_LAN3 15
#define TL_WDR6500_V6_GPIO_LED_LAN4 14
#define TL_WDR6500_V6_GPIO_BTN_RESET 1
#define TL_WDR6500_V6_KEYS_POLL_INTERVAL 20 /* msecs */
#define TL_WDR6500_V6_KEYS_DEBOUNCE_INTERVAL (3 * TL_WDR6500_V6_KEYS_POLL_INTERVAL)
#define TL_WDR6500_V6_WMAC_CALDATA_OFFSET 0x1000
#define TL_WDR6500_V6_PCIE_CALDATA_OFFSET 0x5000
static const char *tl_wdr6500_v6_part_probes[] = {
"tp-link-64k",
NULL,
};
static struct flash_platform_data tl_wdr6500_v6_flash_data = {
.part_probes = tl_wdr6500_v6_part_probes,
};
static struct gpio_led tl_wdr6500_v6_leds_gpio[] __initdata = {
{
.name = "tp-link:green:lan1",
.gpio = TL_WDR6500_V6_GPIO_LED_LAN1,
.active_low = 1,
}, {
.name = "tp-link:green:lan2",
.gpio = TL_WDR6500_V6_GPIO_LED_LAN2,
.active_low = 1,
}, {
.name = "tp-link:green:lan3",
.gpio = TL_WDR6500_V6_GPIO_LED_LAN3,
.active_low = 1,
}, {
.name = "tp-link:green:lan4",
.gpio = TL_WDR6500_V6_GPIO_LED_LAN4,
.active_low = 1,
}, {
.name = "tp-link:green:wan",
.gpio = TL_WDR6500_V6_GPIO_LED_WAN,
.active_low = 1,
}, {
.name = "tp-link:white:system",
.gpio = TL_WDR6500_V6_GPIO_LED_SYS,
.active_low = 0,
},
};
static struct gpio_keys_button tl_wdr6500_v6_gpio_keys[] __initdata = {
{
.desc = "Reset button",
.type = EV_KEY,
.code = KEY_RESTART,
.debounce_interval = TL_WDR6500_V6_KEYS_DEBOUNCE_INTERVAL,
.gpio = TL_WDR6500_V6_GPIO_BTN_RESET,
.active_low = 1,
}
};
static void __init tl_ap151_setup(void)
{
u8 *mac = (u8 *) KSEG1ADDR(0x1f00fc00);
u8 *ee = (u8 *) KSEG1ADDR(0x1fff0000);
u8 tmpmac[ETH_ALEN];
ath79_register_usb();
ath79_register_m25p80(&tl_wdr6500_v6_flash_data);
ath79_setup_ar933x_phy4_switch(false, false);
ath79_register_mdio(1, 0x0);
/* WAN */
ath79_switch_data.phy4_mii_en = 1;
ath79_switch_data.phy_poll_mask = BIT(4);
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
ath79_eth0_data.phy_mask = BIT(4);
ath79_eth0_data.mii_bus_dev = &ath79_mdio1_device.dev;
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
ath79_register_eth(0);
/* LAN */
ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
ath79_eth1_data.duplex = DUPLEX_FULL;
ath79_eth1_data.speed = SPEED_1000;
ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
ath79_register_eth(1);
ath79_init_mac(tmpmac, mac, -1);
ath79_register_wmac(ee + TL_WDR6500_V6_WMAC_CALDATA_OFFSET, tmpmac);
ath79_register_pci();
ath79_register_usb();
}
static void __init tl_wdr6500_v6_setup(void)
{
tl_ap151_setup();
ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wdr6500_v6_leds_gpio),
tl_wdr6500_v6_leds_gpio);
ath79_register_gpio_keys_polled(1, TL_WDR6500_V6_KEYS_POLL_INTERVAL,
ARRAY_SIZE(tl_wdr6500_v6_gpio_keys),
tl_wdr6500_v6_gpio_keys);
}
MIPS_MACHINE(ATH79_MACH_TL_WDR6500_V6, "TL-WDR6500-v6", "TP-LINK TL-WDR6500 v6",
tl_wdr6500_v6_setup);

View File

@ -73,6 +73,17 @@
#define TL_WR842NV3_GPIO_BTN_RESET 1
#define TL_WR842NV3_GPIO_BTN_WIFI 0
#define TL_WR842NV9_GPIO_LED_WLAN 12
#define TL_WR842NV9_GPIO_LED_QSS 3
#define TL_WR842NV9_GPIO_LED_WAN 11
#define TL_WR842NV9_GPIO_LED_LAN1 16
#define TL_WR842NV9_GPIO_LED_LAN2 15
#define TL_WR842NV9_GPIO_LED_LAN3 14
#define TL_WR842NV9_GPIO_LED_LAN4 4
#define TL_WR842NV9_GPIO_LED_SYSTEM 13
#define TL_WR842NV9_GPIO_BTN_RESET 17
#define TL_WR842NV9_GPIO_BTN_WIFI 0
#define TL_WR740NV6_GPIO_LED_SYSTEM 1
#define TL_WR740NV6_GPIO_LED_QSS 3
#define TL_WR740NV6_GPIO_LED_WAN_ORANGE 2
@ -343,15 +354,59 @@ static struct gpio_keys_button tl_wr740n_v6_gpio_keys[] __initdata = {
}
};
static struct gpio_led tl_wr842n_v9_leds_gpio[] __initdata = {
{
.name = "tp-link:green:lan1",
.gpio = TL_WR842NV9_GPIO_LED_LAN1,
.active_low = 1,
}, {
.name = "tp-link:green:lan2",
.gpio = TL_WR842NV9_GPIO_LED_LAN2,
.active_low = 1,
}, {
.name = "tp-link:green:lan3",
.gpio = TL_WR842NV9_GPIO_LED_LAN3,
.active_low = 1,
}, {
.name = "tp-link:green:lan4",
.gpio = TL_WR842NV9_GPIO_LED_LAN4,
.active_low = 1,
}, {
.name = "tp-link:green:system",
.gpio = TL_WR842NV9_GPIO_LED_SYSTEM,
.active_low = 1,
}, {
.name = "tp-link:green:wan",
.gpio = TL_WR842NV9_GPIO_LED_WAN,
.active_low = 1,
}, {
.name = "tp-link:green:wlan",
.gpio = TL_WR842NV9_GPIO_LED_WLAN,
.active_low = 1,
},
};
static struct gpio_keys_button tl_wr842n_v9_gpio_keys[] __initdata = {
{
.desc = "Reset button",
.type = EV_KEY,
.code = KEY_RESTART,
.debounce_interval = TL_WR841NV9_KEYS_DEBOUNCE_INTERVAL,
.gpio = TL_WR842NV9_GPIO_BTN_RESET,
.active_low = 1,
}
};
static void __init tl_ap143_setup(void)
{
u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
u8 tmpmac[ETH_ALEN];
ath79_register_usb();
ath79_register_m25p80(&tl_wr841n_v9_flash_data);
ath79_setup_ar933x_phy4_switch(false, false);
/*ath79_setup_ar933x_phy4_switch(false, false);*/
ath79_register_mdio(0, 0x0);
@ -435,7 +490,6 @@ static void __init tl_wr842n_v3_setup(void)
ARRAY_SIZE(tl_wr842n_v3_gpio_keys),
tl_wr842n_v3_gpio_keys);
ath79_register_usb();
}
MIPS_MACHINE(ATH79_MACH_TL_WR842N_V3, "TL-WR842N-v3", "TP-LINK TL-WR842N/ND v3",
@ -455,3 +509,49 @@ static void __init tl_wr740n_v6_setup(void)
MIPS_MACHINE(ATH79_MACH_TL_WR740N_V6, "TL-WR740N-v6", "TP-LINK TL-WR740N/ND v6",
tl_wr740n_v6_setup);
static void __init tl_wr842n_v9_setup(void)
{
u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
u8 tmpmac[ETH_ALEN];
ath79_register_usb();
ath79_register_m25p80(&tl_wr841n_v9_flash_data);
/*ath79_setup_ar933x_phy4_switch(false, false);*/
ath79_register_mdio(0, 0x0);
ath79_register_mdio(1, 0x0);
/* add by zcc */
ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_SW_PHY_SWAP);
/* LAN */
ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
ath79_eth1_data.duplex = DUPLEX_FULL;
ath79_eth1_data.speed = SPEED_1000;
ath79_switch_data.phy_poll_mask |= BIT(0);
ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
ath79_register_eth(1);
/* WAN */
ath79_switch_data.phy4_mii_en = 1;
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
ath79_eth0_data.phy_mask = BIT(0);
ath79_eth0_data.duplex = DUPLEX_FULL;
ath79_eth0_data.speed = SPEED_100;
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
ath79_register_eth(0);
ath79_init_mac(tmpmac, mac, 0);
ath79_register_wmac(ee, tmpmac);
ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr842n_v9_leds_gpio),
tl_wr842n_v9_leds_gpio);
ath79_register_gpio_keys_polled(1, TL_WR841NV9_KEYS_POLL_INTERVAL,
ARRAY_SIZE(tl_wr842n_v9_gpio_keys),
tl_wr842n_v9_gpio_keys);
}
MIPS_MACHINE(ATH79_MACH_TL_WR842N_V9, "TL-WR842N-v9", "TP-LINK TL-WR842N/ND v9",
tl_wr842n_v9_setup);

View File

@ -0,0 +1,126 @@
/*
* TP-LINK TL-WR882N v1
*
* Copyright (C) Weijie Gao <hackpascal@gmail.com>
*
* 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/gpio.h>
#include <linux/platform_device.h>
#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/ar71xx_regs.h>
#include "common.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 TL_WR882NV1_GPIO_LED_WAN 2
#define TL_WR882NV1_GPIO_LED_LAN1 4
#define TL_WR882NV1_GPIO_LED_LAN2 5
#define TL_WR882NV1_GPIO_LED_LAN3 6
#define TL_WR882NV1_GPIO_LED_LAN4 7
#define TL_WR882NV1_GPIO_LED_SYS 18
#define TL_WR882NV1_GPIO_BTN_RESET 1
#define TL_WR882NV1_KEYS_POLL_INTERVAL 20 /* msecs */
#define TL_WR882NV1_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR882NV1_KEYS_POLL_INTERVAL)
static const char *tl_wr882n_v1_part_probes[] = {
"tp-link",
NULL,
};
static struct flash_platform_data tl_wr882n_v1_flash_data = {
.part_probes = tl_wr882n_v1_part_probes,
};
static struct gpio_led tl_wr882n_v1_leds_gpio[] __initdata = {
{
.name = "tp-link:green:lan1",
.gpio = TL_WR882NV1_GPIO_LED_LAN1,
.active_low = 1,
}, {
.name = "tp-link:green:lan2",
.gpio = TL_WR882NV1_GPIO_LED_LAN2,
.active_low = 1,
}, {
.name = "tp-link:green:lan3",
.gpio = TL_WR882NV1_GPIO_LED_LAN3,
.active_low = 1,
}, {
.name = "tp-link:green:lan4",
.gpio = TL_WR882NV1_GPIO_LED_LAN4,
.active_low = 1,
}, {
.name = "tp-link:green:wan",
.gpio = TL_WR882NV1_GPIO_LED_WAN,
.active_low = 1,
}, {
.name = "tp-link:white:status",
.gpio = TL_WR882NV1_GPIO_LED_SYS,
.active_low = 1,
},
};
static struct gpio_keys_button tl_wr882n_v1_gpio_keys[] __initdata = {
{
.desc = "Reset button",
.type = EV_KEY,
.code = KEY_RESTART,
.debounce_interval = TL_WR882NV1_KEYS_DEBOUNCE_INTERVAL,
.gpio = TL_WR882NV1_GPIO_BTN_RESET,
.active_low = 1,
}
};
static void __init tl_cus249_setup(void)
{
u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
ath79_register_m25p80(&tl_wr882n_v1_flash_data);
ath79_register_mdio(0, 0x0);
/* LAN */
ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
ath79_eth1_data.duplex = DUPLEX_FULL;
ath79_eth1_data.speed = SPEED_1000;
ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
ath79_register_eth(1);
/* WAN */
ath79_switch_data.phy4_mii_en = 1;
ath79_switch_data.phy_poll_mask = BIT(4);
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
ath79_eth0_data.phy_mask = BIT(4);
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
ath79_register_eth(0);
ath79_register_wmac(ee, mac);
}
static void __init tl_wr882n_v1_setup(void)
{
tl_cus249_setup();
ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr882n_v1_leds_gpio),
tl_wr882n_v1_leds_gpio);
ath79_register_gpio_keys_polled(1, TL_WR882NV1_KEYS_POLL_INTERVAL,
ARRAY_SIZE(tl_wr882n_v1_gpio_keys),
tl_wr882n_v1_gpio_keys);
}
MIPS_MACHINE(ATH79_MACH_TL_WR882N_V1, "TL-WR882N-v1", "TP-LINK TL-WR882N v1",
tl_wr882n_v1_setup);

View File

@ -0,0 +1,279 @@
/*
* TP-LINK TL-WR941N v7 board support
*
* Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
* Copyright (C) 2014 Weijie Gao <hackpacsal@gmail.com>
*
* 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/delay.h>
#include <linux/pci.h>
#include <linux/phy.h>
#include <linux/gpio.h>
#include <linux/platform_device.h>
#include <linux/ath9k_platform.h>
#include <linux/ar8216_platform.h>
#include <asm/mach-ath79/ar71xx_regs.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-spi.h"
#include "dev-usb.h"
#include "dev-wmac.h"
#include "machtypes.h"
#define WR941NV7_GPIO_LED_WLAN 12
#define WR941NV7_GPIO_LED_SYSTEM 19
#define WR941NV7_GPIO_LED_QSS 15
#define WR941NV7_GPIO_BTN_RESET 16
#define WR941NV7_KEYS_POLL_INTERVAL 20 /* msecs */
#define WR941NV7_KEYS_DEBOUNCE_INTERVAL (3 * WR941NV7_KEYS_POLL_INTERVAL)
#define ATH_MII_MGMT_CMD 0x24
#define ATH_MGMT_CMD_READ 0x1
#define ATH_MII_MGMT_ADDRESS 0x28
#define ATH_ADDR_SHIFT 8
#define ATH_MII_MGMT_CTRL 0x2c
#define ATH_MII_MGMT_STATUS 0x30
#define ATH_MII_MGMT_IND 0x34
#define ATH_MGMT_IND_BUSY (1 << 0)
#define ATH_MGMT_IND_INVALID (1 << 2)
static const char *wr941nv7_part_probes[] = {
"tp-link",
NULL,
};
static struct flash_platform_data wr941nv7_flash_data = {
.part_probes = wr941nv7_part_probes,
};
static struct gpio_led wr941nv7_leds_gpio[] __initdata = {
{
.name = "tp-link:green:qss",
.gpio = WR941NV7_GPIO_LED_QSS,
.active_low = 1,
},
{
.name = "tp-link:green:system",
.gpio = WR941NV7_GPIO_LED_SYSTEM,
.active_low = 1,
},
{
.name = "tp-link:green:wlan",
.gpio = WR941NV7_GPIO_LED_WLAN,
.active_low = 1,
},
};
static struct gpio_keys_button wr941nv7_gpio_keys[] __initdata = {
{
.desc = "reset",
.type = EV_KEY,
.code = KEY_RESTART,
.debounce_interval = WR941NV7_KEYS_DEBOUNCE_INTERVAL,
.gpio = WR941NV7_GPIO_BTN_RESET,
.active_low = 1,
},
};
static struct mdio_board_info wr941nv7_mdio0_info[] = {
{
.bus_id = "ag71xx-mdio.0",
.phy_addr = 0,
.platform_data = NULL,
},
};
static unsigned long __init ath_gmac_reg_rd(unsigned long reg)
{
void __iomem *base;
unsigned long t;
base = ioremap(AR71XX_GE0_BASE, AR71XX_GE0_SIZE);
t = __raw_readl(base + reg);
iounmap(base);
return t;
}
static void __init ath_gmac_reg_wr(unsigned long reg, unsigned long value)
{
void __iomem *base;
unsigned long t = value;
base = ioremap(AR71XX_GE0_BASE, AR71XX_GE0_SIZE);
__raw_writel(t, base + reg);
iounmap(base);
}
static void __init phy_reg_write(unsigned char phy_addr, unsigned char reg, unsigned short data)
{
unsigned short addr = (phy_addr << ATH_ADDR_SHIFT) | reg;
volatile int rddata;
unsigned short ii = 0xFFFF;
do
{
udelay(5);
rddata = ath_gmac_reg_rd(ATH_MII_MGMT_IND) & 0x1;
} while (rddata && --ii);
ath_gmac_reg_wr(ATH_MII_MGMT_ADDRESS, addr);
ath_gmac_reg_wr(ATH_MII_MGMT_CTRL, data);
do
{
udelay(5);
rddata = ath_gmac_reg_rd(ATH_MII_MGMT_IND) & 0x1;
} while (rddata && --ii);
}
static unsigned short __init phy_reg_read(unsigned char phy_addr, unsigned char reg)
{
unsigned short addr = (phy_addr << ATH_ADDR_SHIFT) | reg, val;
volatile int rddata;
unsigned short ii = 0xffff;
do
{
udelay(5);
rddata = ath_gmac_reg_rd(ATH_MII_MGMT_IND) & 0x1;
} while (rddata && --ii);
ath_gmac_reg_wr(ATH_MII_MGMT_CMD, 0x0);
ath_gmac_reg_wr(ATH_MII_MGMT_ADDRESS, addr);
ath_gmac_reg_wr(ATH_MII_MGMT_CMD, ATH_MGMT_CMD_READ);
do
{
udelay(5);
rddata = ath_gmac_reg_rd(ATH_MII_MGMT_IND) & 0x1;
} while (rddata && --ii);
val = ath_gmac_reg_rd(ATH_MII_MGMT_STATUS);
ath_gmac_reg_wr(ATH_MII_MGMT_CMD, 0x0);
return val;
}
static void __init athrs27_reg_write(unsigned int s27_addr, unsigned int s27_write_data)
{
unsigned int addr_temp;
unsigned int data;
unsigned char phy_address, reg_address;
addr_temp = (s27_addr) >> 2;
data = addr_temp >> 7;
phy_address = 0x1f;
reg_address = 0x10;
phy_reg_write(phy_address, reg_address, data);
phy_address = (0x17 & ((addr_temp >> 4) | 0x10));
reg_address = (((addr_temp << 1) & 0x1e) | 0x1);
data = (s27_write_data >> 16) & 0xffff;
phy_reg_write(phy_address, reg_address, data);
reg_address = ((addr_temp << 1) & 0x1e);
data = s27_write_data & 0xffff;
phy_reg_write(phy_address, reg_address, data);
}
static unsigned int __init athrs27_reg_read(unsigned int s27_addr)
{
unsigned int addr_temp;
unsigned int s27_rd_csr_low, s27_rd_csr_high, s27_rd_csr;
unsigned int data;
unsigned char phy_address, reg_address;
addr_temp = s27_addr >>2;
data = addr_temp >> 7;
phy_address = 0x1f;
reg_address = 0x10;
phy_reg_write(phy_address, reg_address, data);
phy_address = (0x17 & ((addr_temp >> 4) | 0x10));
reg_address = ((addr_temp << 1) & 0x1e);
s27_rd_csr_low = (unsigned int) phy_reg_read(phy_address, reg_address);
reg_address = reg_address | 0x1;
s27_rd_csr_high = (unsigned int) phy_reg_read(phy_address, reg_address);
s27_rd_csr = (s27_rd_csr_high << 16) | s27_rd_csr_low ;
return (s27_rd_csr);
}
static void __init ar8236_reset(void)
{
unsigned short i = 60;
athrs27_reg_write(0x0, athrs27_reg_read(0x0) | 0x80000000);
while (i--)
{
mdelay(100);
if (!(athrs27_reg_read(0x0) & 0x80000000))
break;
}
}
static void __init wr941nv7_setup(void)
{
u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
u8 *art = (u8 *) KSEG1ADDR(0x1fff1000);
ath79_register_m25p80(&wr941nv7_flash_data);
ath79_register_leds_gpio(-1, ARRAY_SIZE(wr941nv7_leds_gpio),
wr941nv7_leds_gpio);
ath79_register_gpio_keys_polled(-1, WR941NV7_KEYS_POLL_INTERVAL,
ARRAY_SIZE(wr941nv7_gpio_keys),
wr941nv7_gpio_keys);
ath79_register_wmac(art, mac);
ar8236_reset();
ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_MII_GE0 |
QCA955X_ETH_CFG_MII_GE0_SLAVE);
mdiobus_register_board_info(wr941nv7_mdio0_info,
ARRAY_SIZE(wr941nv7_mdio0_info));
ath79_register_mdio(0, 0x0);
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
/* GMAC0 is connected to an AR8236 switch */
ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
ath79_eth0_data.speed = SPEED_100;
ath79_eth0_data.duplex = DUPLEX_FULL;
ath79_eth0_data.phy_mask = BIT(0);
ath79_eth0_data.mii_bus_dev = &ath79_mdio0_device.dev;
ath79_register_eth(0);
ath79_register_usb();
}
MIPS_MACHINE(ATH79_MACH_TL_WR941N_V7, "TL-WR941N-v7",
"TP-LINK TL-WR941N v7",
wr941nv7_setup);

View File

@ -243,6 +243,7 @@ enum ath79_mach_type {
ATH79_MACH_TL_WDR4300, /* TP-LINK TL-WDR4300 */
ATH79_MACH_TL_WDR4900_V2, /* TP-LINK TL-WDR4900 v2 */
ATH79_MACH_TL_WDR6500_V2, /* TP-LINK TL-WDR6500 v2 */
ATH79_MACH_TL_WDR6500_V6, /* TP-LINK TL-WDR6500 v6 */
ATH79_MACH_TL_WPA8630, /* TP-Link TL-WPA8630 */
ATH79_MACH_TL_WR1041N_V2, /* TP-LINK TL-WR1041N v2 */
ATH79_MACH_TL_WR1043ND, /* TP-LINK TL-WR1043ND */
@ -267,6 +268,8 @@ enum ath79_mach_type {
ATH79_MACH_TL_WR841N_V9, /* TP-LINK TL-WR841N/ND v9 */
ATH79_MACH_TL_WR842N_V2, /* TP-LINK TL-WR842N/ND v2 */
ATH79_MACH_TL_WR842N_V3, /* TP-LINK TL-WR842N/ND v3 */
ATH79_MACH_TL_WR842N_V9, /* TP-LINK TL-WR842N/ND v9 */
ATH79_MACH_TL_WR882N_V1, /* TP-LINK TL-WR882N v1 */
ATH79_MACH_TL_WR902AC_V1, /* TP-LINK TL-WR902AC v1 */
ATH79_MACH_TL_WR941ND, /* TP-LINK TL-WR941ND */
ATH79_MACH_TL_WR941ND_V5, /* TP-LINK TL-WR941ND v5 */

View File

@ -1129,3 +1129,34 @@ define Device/tl-wr941n-v7
endef
TARGET_DEVICES += tl-wr941n-v7
define Device/tl-wdr6500-v6
$(Device/tplink-8mlzma)
DEVICE_TITLE := TP-LINK TL-WDR6500 v6
DEVICE_PACKAGES := kmod-usb-core kmod-usb2
KERNEL := kernel-bin | patch-cmdline | lzma | uImage lzma
KERNEL_INITRAMFS := kernel-bin | patch-cmdline | lzma | uImage lzma | mktplinkfw-combined
BOARDNAME := TL-WDR6500-v6
DEVICE_PROFILE := TLWDR6500V6
TPLINK_HWID := 0x65000006
TPLINK_HEADER_VERSION := 2
endef
TARGET_DEVICES += tl-wdr6500-v6
define Device/tl-wr842n-v9
$(Device/tplink-8mlzma)
DEVICE_TITLE := TP-LINK TL-WR842N/ND v9
DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
BOARDNAME := TL-WR842N-v9
DEVICE_PROFILE := TLWR842
TPLINK_HWID := 0x08420009
endef
TARGET_DEVICES += tl-wr842n-v9
define Device/tl-wr882n-v1
$(Device/tplink-8mlzma)
DEVICE_TITLE := TP-LINK TL-WR882N v1
BOARDNAME := TL-WR882N-v1
DEVICE_PROFILE := TLWR882
TPLINK_HWID := 0x08820001
endef
TARGET_DEVICES += tl-wr882n-v1