From: Gabor Juhos Date: Tue, 31 Jan 2012 18:37:01 +0000 (+0000) Subject: ar71xx: add support for TP-Link TL-MR11U X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=97e4ddd012546ecaf5dea609af784e339408e502;p=openwrt%2Fstaging%2Flinusw.git ar71xx: add support for TP-Link TL-MR11U Adds support for TL-MR11U, a portable router with very similar hardware to the TL-WR703N and TL-MR3020, but with an onboard 2000mAh battery. Tested, working: All interfaces (Ethernet, 802.11n, USB) WPS & Reset switches (Power appears to be a hardware slider) Ethernet, Wifi, 3G LEDs (Power & charging LEDs hardware controlled) Sysupgrade [juhosg: fix indentations to use TABs instead of spaces, fix 3.2 patch breakage] Signed-off-by: Simon Taylor SVN-Revision: 29972 --- diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/leds b/target/linux/ar71xx/base-files/etc/uci-defaults/leds index ae75f78c32..d9613930d4 100755 --- a/target/linux/ar71xx/base-files/etc/uci-defaults/leds +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/leds @@ -146,6 +146,7 @@ om2p) set_led_netdev "port2" "port2" "om2p:blue:lan" "eth1" ;; +tl-mr11u | \ tl-mr3020) set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1" set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt" diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/network b/target/linux/ar71xx/base-files/etc/uci-defaults/network index 4d6a68b73a..ca99898183 100755 --- a/target/linux/ar71xx/base-files/etc/uci-defaults/network +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/network @@ -111,6 +111,7 @@ aw-nr580 |\ bullet-m |\ eap7660d |\ rb-411 |\ +tl-mr11u |\ tl-mr3020 |\ tl-wa901nd |\ tl-wa901nd-v2 |\ diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index 6761382743..9f117225f1 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -100,6 +100,9 @@ tplink_board_detect() { "254300"*) model="TP-Link TL-WR2543N/ND" ;; + "110101"*) + model="TP-Link TL-MR11U" + ;; "302000"*) model="TP-Link TL-MR3020" ;; @@ -292,6 +295,9 @@ ar71xx_board_detect() { *"TL-WR703N v1") name="tl-wr703n" ;; + *"TL-MR11U") + name="tl-mr11u" + ;; *UniFi) name="unifi" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index d07b7823ad..49df3c3966 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -122,6 +122,7 @@ platform_check_image() { } return 0 ;; + tl-mr11u | \ tl-mr3020 | \ tl-mr3220 | \ tl-mr3420 | \ diff --git a/target/linux/ar71xx/config-2.6.39 b/target/linux/ar71xx/config-2.6.39 index 2b1662a745..4f51b1a2b9 100644 --- a/target/linux/ar71xx/config-2.6.39 +++ b/target/linux/ar71xx/config-2.6.39 @@ -41,6 +41,7 @@ CONFIG_AR71XX_MACH_RB4XX=y CONFIG_AR71XX_MACH_RB750=y CONFIG_AR71XX_MACH_RW2458N=y CONFIG_AR71XX_MACH_TEW_632BRP=y +CONFIG_AR71XX_MACH_TL_MR11U=y CONFIG_AR71XX_MACH_TL_MR3020=y CONFIG_AR71XX_MACH_TL_MR3X20=y CONFIG_AR71XX_MACH_TL_WA901ND=y diff --git a/target/linux/ar71xx/config-3.2 b/target/linux/ar71xx/config-3.2 index 6d2f6b815b..50fe18fd95 100644 --- a/target/linux/ar71xx/config-3.2 +++ b/target/linux/ar71xx/config-3.2 @@ -50,6 +50,7 @@ CONFIG_ATH79_MACH_RB4XX=y CONFIG_ATH79_MACH_RB750=y CONFIG_ATH79_MACH_RW2458N=y CONFIG_ATH79_MACH_TEW_632BRP=y +CONFIG_ATH79_MACH_TL_MR11U=y CONFIG_ATH79_MACH_TL_MR3020=y CONFIG_ATH79_MACH_TL_MR3X20=y CONFIG_ATH79_MACH_TL_WA901ND=y diff --git a/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/Kconfig b/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/Kconfig index cf1664e76e..60db3ef415 100644 --- a/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/Kconfig +++ b/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/Kconfig @@ -312,6 +312,15 @@ config AR71XX_MACH_NBG460N select AR71XX_DEV_GPIO_BUTTONS select AR71XX_DEV_LEDS_GPIO +config AR71XX_MACH_TL_MR11U + bool "TP-LINK TL-MR11U support" + select SOC_AR933X + select AR71XX_DEV_M25P80 + select AR71XX_DEV_GPIO_BUTTONS + select AR71XX_DEV_LEDS_GPIO + select AR71XX_DEV_USB + select AR71XX_DEV_AR9XXX_WMAC + config AR71XX_MACH_TL_MR3020 bool "TP-LINK TL-MR3020 support" select SOC_AR933X diff --git a/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/Makefile b/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/Makefile index 9b36bcfbba..22e32e5acc 100644 --- a/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/Makefile +++ b/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/Makefile @@ -56,6 +56,7 @@ obj-$(CONFIG_AR71XX_MACH_RB4XX) += mach-rb4xx.o obj-$(CONFIG_AR71XX_MACH_RB750) += mach-rb750.o obj-$(CONFIG_AR71XX_MACH_RW2458N) += mach-rw2458n.o obj-$(CONFIG_AR71XX_MACH_TEW_632BRP) += mach-tew-632brp.o +obj-$(CONFIG_AR71XX_MACH_TL_MR11U) += mach-tl-mr11u.o obj-$(CONFIG_AR71XX_MACH_TL_MR3020) += mach-tl-mr3020.o obj-$(CONFIG_AR71XX_MACH_TL_MR3X20) += mach-tl-mr3x20.o obj-$(CONFIG_AR71XX_MACH_TL_WA901ND) += mach-tl-wa901nd.o diff --git a/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/mach-tl-mr11u.c b/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/mach-tl-mr11u.c new file mode 100644 index 0000000000..427af169fc --- /dev/null +++ b/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/mach-tl-mr11u.c @@ -0,0 +1,107 @@ +/* + * TP-LINK TL-MR11U board support + * + * Copyright (C) 2011 dongyuqi <729650915@qq.com> + * Copyright (C) 2011 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 "machtype.h" +#include "devices.h" +#include "dev-ar9xxx-wmac.h" +#include "dev-gpio-buttons.h" +#include "dev-leds-gpio.h" +#include "dev-m25p80.h" +#include "dev-usb.h" + +#define TL_MR11U_GPIO_LED_3G 27 +#define TL_MR11U_GPIO_LED_WLAN 26 +#define TL_MR11U_GPIO_LED_LAN 17 + +#define TL_MR11U_GPIO_BTN_WPS 20 +#define TL_MR11U_GPIO_BTN_RESET 11 + +#define TL_MR11U_GPIO_USB_POWER 8 + +#define TL_MR11U_KEYS_POLL_INTERVAL 20 /* msecs */ +#define TL_MR11U_KEYS_DEBOUNCE_INTERVAL (3 * TL_MR11U_KEYS_POLL_INTERVAL) + +static const char *tl_mr11u_part_probes[] = { + "tp-link", + NULL, +}; + +static struct flash_platform_data tl_mr11u_flash_data = { + .part_probes = tl_mr11u_part_probes, +}; + +static struct gpio_led tl_mr11u_leds_gpio[] __initdata = { + { + .name = "tp-link:green:3g", + .gpio = TL_MR11U_GPIO_LED_3G, + .active_low = 1, + }, + { + .name = "tp-link:green:wlan", + .gpio = TL_MR11U_GPIO_LED_WLAN, + .active_low = 1, + }, + { + .name = "tp-link:green:lan", + .gpio = TL_MR11U_GPIO_LED_LAN, + .active_low = 1, + } +}; + +static struct gpio_keys_button tl_mr11u_gpio_keys[] __initdata = { + { + .desc = "wps", + .type = EV_KEY, + .code = KEY_WPS_BUTTON, + .debounce_interval = TL_MR11U_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR11U_GPIO_BTN_WPS, + .active_low = 0, + }, + { + .desc = "reset", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = TL_MR11U_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR11U_GPIO_BTN_RESET, + .active_low = 0, + } +}; + +static void __init tl_mr11u_setup(void) +{ + u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); + u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); + + ar71xx_add_device_m25p80(&tl_mr11u_flash_data); + ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(tl_mr11u_leds_gpio), + tl_mr11u_leds_gpio); + ar71xx_register_gpio_keys_polled(-1, TL_MR11U_KEYS_POLL_INTERVAL, + ARRAY_SIZE(tl_mr11u_gpio_keys), + tl_mr11u_gpio_keys); + + gpio_request(TL_MR11U_GPIO_USB_POWER, "USB power"); + gpio_direction_output(TL_MR11U_GPIO_USB_POWER, 1); + ar71xx_add_device_usb(); + + ar71xx_init_mac(ar71xx_eth0_data.mac_addr, mac, 0); + + ar71xx_add_device_mdio(0, 0x0); + ar71xx_add_device_eth(0); + + ar9xxx_add_device_wmac(ee, mac); +} + +MIPS_MACHINE(AR71XX_MACH_TL_MR11U, "TL-MR11U", "TP-LINK TL-MR11U", + tl_mr11u_setup); diff --git a/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/machtype.h b/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/machtype.h index 1be8dbbf34..452055d78f 100644 --- a/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/machtype.h +++ b/target/linux/ar71xx/files-2.6.39/arch/mips/ar71xx/machtype.h @@ -52,6 +52,7 @@ enum ar71xx_mach_type { AR71XX_MACH_RB_750, /* MikroTik RouterBOARD 750 */ AR71XX_MACH_RW2458N, /* Redwave RW2458N */ AR71XX_MACH_TEW_632BRP, /* TRENDnet TEW-632BRP */ + AR71XX_MACH_TL_MR11U, /* TP-LINK TL-MR11U */ AR71XX_MACH_TL_MR3020, /* TP-LINK TL-MR3020 */ AR71XX_MACH_TL_MR3220, /* TP-LINK TL-MR3220 */ AR71XX_MACH_TL_MR3420, /* TP-LINK TL-MR3420 */ diff --git a/target/linux/ar71xx/files-3.2/arch/mips/ath79/mach-tl-mr11u.c b/target/linux/ar71xx/files-3.2/arch/mips/ath79/mach-tl-mr11u.c new file mode 100644 index 0000000000..7846b4f18d --- /dev/null +++ b/target/linux/ar71xx/files-3.2/arch/mips/ath79/mach-tl-mr11u.c @@ -0,0 +1,107 @@ +/* + * TP-LINK TL-MR11U board support + * + * Copyright (C) 2011 dongyuqi <729650915@qq.com> + * Copyright (C) 2011-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 "dev-eth.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" + +#define TL_MR11U_GPIO_LED_3G 27 +#define TL_MR11U_GPIO_LED_WLAN 26 +#define TL_MR11U_GPIO_LED_LAN 17 + +#define TL_MR11U_GPIO_BTN_WPS 20 +#define TL_MR11U_GPIO_BTN_RESET 11 + +#define TL_MR11U_GPIO_USB_POWER 8 + +#define TL_MR11U_KEYS_POLL_INTERVAL 20 /* msecs */ +#define TL_MR11U_KEYS_DEBOUNCE_INTERVAL (3 * TL_MR11U_KEYS_POLL_INTERVAL) + +static const char *tl_mr11u_part_probes[] = { + "tp-link", + NULL, +}; + +static struct flash_platform_data tl_mr11u_flash_data = { + .part_probes = tl_mr11u_part_probes, +}; + +static struct gpio_led tl_mr11u_leds_gpio[] __initdata = { + { + .name = "tp-link:green:3g", + .gpio = TL_MR11U_GPIO_LED_3G, + .active_low = 1, + }, + { + .name = "tp-link:green:wlan", + .gpio = TL_MR11U_GPIO_LED_WLAN, + .active_low = 1, + }, + { + .name = "tp-link:green:lan", + .gpio = TL_MR11U_GPIO_LED_LAN, + .active_low = 1, + } +}; + +static struct gpio_keys_button tl_mr11u_gpio_keys[] __initdata = { + { + .desc = "wps", + .type = EV_KEY, + .code = KEY_WPS_BUTTON, + .debounce_interval = TL_MR11U_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR11U_GPIO_BTN_WPS, + .active_low = 0, + }, + { + .desc = "reset", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = TL_MR11U_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR11U_GPIO_BTN_RESET, + .active_low = 0, + } +}; + +static void __init tl_mr11u_setup(void) +{ + u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); + u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); + + ath79_register_m25p80(&tl_mr11u_flash_data); + ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_mr11u_leds_gpio), + tl_mr11u_leds_gpio); + ath79_register_gpio_keys_polled(-1, TL_MR11U_KEYS_POLL_INTERVAL, + ARRAY_SIZE(tl_mr11u_gpio_keys), + tl_mr11u_gpio_keys); + + gpio_request(TL_MR11U_GPIO_USB_POWER, "USB power"); + gpio_direction_output(TL_MR11U_GPIO_USB_POWER, 1); + ath79_register_usb(); + + ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); + + ath79_register_mdio(0, 0x0); + ath79_register_eth(0); + + ath79_register_wmac(ee, mac); +} + +MIPS_MACHINE(ATH79_MACH_TL_MR11U, "TL-MR11U", "TP-LINK TL-MR11U", + tl_mr11u_setup); diff --git a/target/linux/ar71xx/generic/profiles/tp-link.mk b/target/linux/ar71xx/generic/profiles/tp-link.mk index e927696082..e2b97212bc 100644 --- a/target/linux/ar71xx/generic/profiles/tp-link.mk +++ b/target/linux/ar71xx/generic/profiles/tp-link.mk @@ -5,6 +5,17 @@ # See /LICENSE for more information. # +define Profile/TLMR11U + NAME:=TP-LINK TL-MR11U + PACKAGES:=kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev +endef + +define Profile/TLMR11U/Description + Package set optimized for the TP-LINK TL-MR11U. +endef +$(eval $(call Profile,TLMR11U)) + + define Profile/TLMR3020 NAME:=TP-LINK TL-MR3020 PACKAGES:=kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile index c3dc8a058d..bd5e945f59 100644 --- a/target/linux/ar71xx/image/Makefile +++ b/target/linux/ar71xx/image/Makefile @@ -819,6 +819,11 @@ define Image/Build/Profile/OM2P $(call Image/Build/Template/$(fs_squash)/$(1),OpenMesh,om2p,OM2P) endef +tlmr11u_cmdline=board=TL-MR11U console=ttyATH0,115200 +define Image/Build/Profile/TLMR11U + $(call Image/Build/Template/$(fs_64kraw)/$(1),TPLINK-LZMA,tl-mr11u-v1,$(tlmr11u_cmdline),0x00110101,1,4Mlzma) +endef + tlmr3020_cmdline=board=TL-MR3020 console=ttyATH0,115200 define Image/Build/Profile/TLMR3020 $(call Image/Build/Template/$(fs_64k)/$(1),TPLINK-LZMA,tl-mr3020-v1,$(tlmr3020_cmdline),0x30200001,1,4Mlzma) @@ -1006,6 +1011,7 @@ define Image/Build/Profile/Default $(call Image/Build/Profile/RW2458N,$(1)) $(call Image/Build/Profile/TEW632BRP,$(1)) $(call Image/Build/Profile/TEW652BRP,$(1)) + $(call Image/Build/Profile/TLMR11U,$(1)) $(call Image/Build/Profile/TLMR3020,$(1)) $(call Image/Build/Profile/TLMR3220,$(1)) $(call Image/Build/Profile/TLMR3420,$(1)) diff --git a/target/linux/ar71xx/patches-3.2/610-MIPS-ath79-openwrt-machines.patch b/target/linux/ar71xx/patches-3.2/610-MIPS-ath79-openwrt-machines.patch index 9927f6d73a..d5204cb082 100644 --- a/target/linux/ar71xx/patches-3.2/610-MIPS-ath79-openwrt-machines.patch +++ b/target/linux/ar71xx/patches-3.2/610-MIPS-ath79-openwrt-machines.patch @@ -1,6 +1,6 @@ --- a/arch/mips/ath79/machtypes.h +++ b/arch/mips/ath79/machtypes.h -@@ -16,17 +16,79 @@ +@@ -16,17 +16,80 @@ enum ath79_mach_type { ATH79_MACH_GENERIC = 0, @@ -40,6 +40,7 @@ + ATH79_MACH_RB_750, /* MikroTik RouterBOARD 750 */ + ATH79_MACH_RW2458N, /* Redwave RW2458N */ + ATH79_MACH_TEW_632BRP, /* TRENDnet TEW-632BRP */ ++ ATH79_MACH_TL_MR11U, /* TP-LINK TL-MR11U */ + ATH79_MACH_TL_MR3020, /* TP-LINK TL-MR3020 */ + ATH79_MACH_TL_MR3220, /* TP-LINK TL-MR3220 */ + ATH79_MACH_TL_MR3420, /* TP-LINK TL-MR3420 */ @@ -186,7 +187,7 @@ config ATH79_MACH_PB44 bool "Atheros PB44 reference board" select SOC_AR71XX -@@ -54,6 +137,359 @@ config ATH79_MACH_PB44 +@@ -54,6 +137,369 @@ config ATH79_MACH_PB44 Say 'Y' here if you want your kernel to support the Atheros PB44 reference board. @@ -419,6 +420,16 @@ + select ATH79_DEV_LEDS_GPIO + select ATH79_DEV_M25P80 + ++config ATH79_MACH_TL_MR11U ++ bool "TP-LINK TL-MR11U support" ++ select SOC_AR933X ++ 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_MR3020 + bool "TP-LINK TL-MR3020 support" + select SOC_AR933X @@ -546,7 +557,7 @@ config ATH79_MACH_UBNT_XM bool "Ubiquiti Networks XM (rev 1.0) board" select SOC_AR724X -@@ -67,6 +503,24 @@ config ATH79_MACH_UBNT_XM +@@ -67,6 +513,24 @@ config ATH79_MACH_UBNT_XM Say 'Y' here if you want your kernel to support the Ubiquiti Networks XM (rev 1.0) board. @@ -571,7 +582,7 @@ endmenu config SOC_AR71XX -@@ -96,10 +550,6 @@ config SOC_AR934X +@@ -96,10 +560,6 @@ config SOC_AR934X select PCI_AR724X if PCI def_bool n @@ -582,7 +593,7 @@ config ATH79_DEV_AP9X_PCI select ATH79_PCI_ATH9K_FIXUP def_bool n -@@ -110,7 +560,14 @@ config ATH79_DEV_DSA +@@ -110,7 +570,14 @@ config ATH79_DEV_DSA config ATH79_DEV_ETH def_bool n @@ -598,7 +609,7 @@ def_bool n config ATH79_DEV_GPIO_BUTTONS -@@ -135,4 +592,7 @@ config ATH79_NVRAM +@@ -135,4 +602,7 @@ config ATH79_NVRAM config ATH79_PCI_ATH9K_FIXUP def_bool n @@ -608,7 +619,7 @@ endif --- a/arch/mips/ath79/Makefile +++ b/arch/mips/ath79/Makefile -@@ -36,8 +36,55 @@ obj-$(CONFIG_ATH79_PCI_ATH9K_FIXUP) += p +@@ -36,8 +36,56 @@ obj-$(CONFIG_ATH79_PCI_ATH9K_FIXUP) += p # # Machines # @@ -640,6 +651,7 @@ +obj-$(CONFIG_ATH79_MACH_RB750) += mach-rb750.o +obj-$(CONFIG_ATH79_MACH_RW2458N) += mach-rw2458n.o +obj-$(CONFIG_ATH79_MACH_TEW_632BRP) += mach-tew-632brp.o ++obj-$(CONFIG_ATH79_MACH_TL_MR11U) += mach-tl-mr11u.o +obj-$(CONFIG_ATH79_MACH_TL_MR3020) += mach-tl-mr3020.o +obj-$(CONFIG_ATH79_MACH_TL_MR3X20) += mach-tl-mr3x20.o +obj-$(CONFIG_ATH79_MACH_TL_WA901ND) += mach-tl-wa901nd.o