From 1045c83527d8c1b178321de104305c3a491ef923 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Wed, 4 Jan 2012 17:30:47 +0000 Subject: [PATCH] ar71xx: add support for TP-Link TL-MR3020 This patch adds support for the TP-Link device TL-MR3020 which is very similiar to the TL-WR703N. The TL-MR3020 uses 5 LEDs, 1 push button and a switch with 3 positions. Only four LEDs can be controlled via GPIO. The power LED is connected to the power supply. The WPS push button has been mapped to KEY_WPS_BUTTON. The two GPIO signals of the sliding switch have been mapped to BTN_0 and BTN_1. I have also setup a wiki page with details here: http://wiki.openwrt.org/toh/tp-link/tl-mr3020 USB is working and has been tested with USB mass storage and USB UMTS stick. Wifi also seems to work. Ethernet is working too. Signed-off-by: Christian Cier-Zniewski SVN-Revision: 29651 --- .../base-files/etc/uci-defaults/network | 1 + target/linux/ar71xx/base-files/lib/ar71xx.sh | 6 + .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + target/linux/ar71xx/config-2.6.39 | 1 + .../ar71xx/files/arch/mips/ar71xx/Kconfig | 9 ++ .../ar71xx/files/arch/mips/ar71xx/Makefile | 1 + .../files/arch/mips/ar71xx/mach-tl-mr3020.c | 122 ++++++++++++++++++ .../ar71xx/files/arch/mips/ar71xx/machtype.h | 1 + .../linux/ar71xx/generic/profiles/tp-link.mk | 12 ++ target/linux/ar71xx/image/Makefile | 6 + 10 files changed, 160 insertions(+) create mode 100644 target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-mr3020.c diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/network b/target/linux/ar71xx/base-files/etc/uci-defaults/network index ba556c1075..bf46fd765a 100755 --- a/target/linux/ar71xx/base-files/etc/uci-defaults/network +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/network @@ -108,6 +108,7 @@ aw-nr580 |\ bullet-m |\ eap7660d |\ rb-411 |\ +tl-mr3020 |\ tl-wa901nd-v2 |\ tl-wr703n |\ wp543) diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index b259b67865..b26a8debfa 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -94,6 +94,9 @@ tplink_board_detect() { "104300"*) model="TP-Link TL-WR1043N/ND" ;; + "302000"*) + model="TP-Link TL-MR3020" + ;; "322000"*) model="TP-Link TL-MR3220" ;; @@ -238,6 +241,9 @@ ar71xx_board_detect() { *"DIR-615 rev. C1") name="dir-615-c1" ;; + *TL-MR3020) + name="tl-mr3020" + ;; *TL-MR3220) name="tl-mr3220" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index ec0d03b684..c2bfa08dbb 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -119,6 +119,7 @@ platform_check_image() { } return 0 ;; + tl-mr3020 | \ tl-mr3220 | \ tl-mr3420 | \ tl-wa901nd | \ diff --git a/target/linux/ar71xx/config-2.6.39 b/target/linux/ar71xx/config-2.6.39 index 2a232ddb04..8cc92aba3e 100644 --- a/target/linux/ar71xx/config-2.6.39 +++ b/target/linux/ar71xx/config-2.6.39 @@ -43,6 +43,7 @@ CONFIG_AR71XX_MACH_TL_WA901ND=y CONFIG_AR71XX_MACH_TL_WA901ND_V2=y CONFIG_AR71XX_MACH_TL_WR1043ND=y CONFIG_AR71XX_MACH_TL_WR703N=y +CONFIG_AR71XX_MACH_TL_MR3020=y CONFIG_AR71XX_MACH_TL_WR741ND=y CONFIG_AR71XX_MACH_TL_WR741ND_V4=y CONFIG_AR71XX_MACH_TL_WR841N_V1=y diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig index c2ccf8121e..90c7b69a6d 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig @@ -277,6 +277,15 @@ config AR71XX_MACH_NBG460N select AR71XX_DEV_GPIO_BUTTONS select AR71XX_DEV_LEDS_GPIO +config AR71XX_MACH_TL_MR3020 + bool "TP-LINK TL-MR3020 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_MR3X20 bool "TP-LINK TL-MR3220/3420 support" select SOC_AR724X diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile b/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile index 9d086811f5..0cb277e828 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile @@ -53,6 +53,7 @@ obj-$(CONFIG_AR71XX_MACH_PB92) += mach-pb92.o obj-$(CONFIG_AR71XX_MACH_RB4XX) += mach-rb4xx.o obj-$(CONFIG_AR71XX_MACH_RB750) += mach-rb750.o obj-$(CONFIG_AR71XX_MACH_TEW_632BRP) += mach-tew-632brp.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 obj-$(CONFIG_AR71XX_MACH_TL_WA901ND_V2) += mach-tl-wa901nd-v2.o diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-mr3020.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-mr3020.c new file mode 100644 index 0000000000..6af58d1a5f --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-mr3020.c @@ -0,0 +1,122 @@ +/* + * TP-LINK TL-MR3020 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_MR3020_GPIO_LED_3G 27 +#define TL_MR3020_GPIO_LED_WLAN 0 +#define TL_MR3020_GPIO_LED_LAN 17 +#define TL_MR3020_GPIO_LED_WPS 26 + +#define TL_MR3020_GPIO_BTN_WPS 11 +#define TL_MR3020_GPIO_BTN_SW1 18 +#define TL_MR3020_GPIO_BTN_SW2 20 + +#define TL_MR3020_GPIO_USB_POWER 8 + +#define TL_MR3020_KEYS_POLL_INTERVAL 20 /* msecs */ +#define TL_MR3020_KEYS_DEBOUNCE_INTERVAL (3 * TL_MR3020_KEYS_POLL_INTERVAL) + +static const char *tl_mr3020_part_probes[] = { + "tp-link", + NULL, +}; + +static struct flash_platform_data tl_mr3020_flash_data = { + .part_probes = tl_mr3020_part_probes, +}; + +static struct gpio_led tl_mr3020_leds_gpio[] __initdata = { + { + .name = "tp-link:green:3g", + .gpio = TL_MR3020_GPIO_LED_3G, + .active_low = 1, + }, + { + .name = "tp-link:green:wlan", + .gpio = TL_MR3020_GPIO_LED_WLAN, + .active_low = 0, + }, + { + .name = "tp-link:green:lan", + .gpio = TL_MR3020_GPIO_LED_LAN, + .active_low = 1, + }, + { + .name = "tp-link:green:wps", + .gpio = TL_MR3020_GPIO_LED_WPS, + .active_low = 1, + }, +}; + +static struct gpio_keys_button tl_mr3020_gpio_keys[] __initdata = { + { + .desc = "wps", + .type = EV_KEY, + .code = KEY_WPS_BUTTON, + .debounce_interval = TL_MR3020_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR3020_GPIO_BTN_WPS, + .active_low = 1, + }, + { + .desc = "sw1", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = TL_MR3020_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR3020_GPIO_BTN_SW1, + .active_low = 1, + }, + { + .desc = "sw2", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = TL_MR3020_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_MR3020_GPIO_BTN_SW2, + .active_low = 1, + } +}; + +static void __init tl_mr3020_setup(void) +{ + u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00); + u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); + + ar71xx_add_device_m25p80(&tl_mr3020_flash_data); + ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(tl_mr3020_leds_gpio), + tl_mr3020_leds_gpio); + ar71xx_register_gpio_keys_polled(-1, TL_MR3020_KEYS_POLL_INTERVAL, + ARRAY_SIZE(tl_mr3020_gpio_keys), + tl_mr3020_gpio_keys); + + gpio_request(TL_MR3020_GPIO_USB_POWER, "USB power"); + gpio_direction_output(TL_MR3020_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_MR3020, "TL-MR3020", "TP-LINK TL-MR3020 v1", + tl_mr3020_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h b/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h index cac9d55f77..9d363a6acc 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h @@ -49,6 +49,7 @@ enum ar71xx_mach_type { AR71XX_MACH_RB_493G, /* Mikrotik RouterBOARD 493G */ AR71XX_MACH_RB_750, /* MikroTik RouterBOARD 750 */ AR71XX_MACH_TEW_632BRP, /* TRENDnet TEW-632BRP */ + AR71XX_MACH_TL_MR3020, /* TP-LINK TL-MR3020 */ AR71XX_MACH_TL_MR3220, /* TP-LINK TL-MR3220 */ AR71XX_MACH_TL_MR3420, /* TP-LINK TL-MR3420 */ AR71XX_MACH_TL_WA901ND, /* TP-LINK TL-WA901ND */ diff --git a/target/linux/ar71xx/generic/profiles/tp-link.mk b/target/linux/ar71xx/generic/profiles/tp-link.mk index 8e0fa29e4a..c9f0cacb1e 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/TLMR3020 + NAME:=TP-LINK TL-MR3020 + PACKAGES:=kmod-usb-core kmod-usb2 +endef + +define Profile/TLMR3020/Description + Package set optimized for the TP-LINK TL-MR3020. +endef +$(eval $(call Profile,TLMR3020)) + + define Profile/TLMR3220 NAME:=TP-LINK TL-MR3220 PACKAGES:=kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev @@ -32,6 +43,7 @@ define Profile/TLWR703 PACKAGES:=kmod-usb-core kmod-usb2 endef + define Profile/TLWR703/Description Package set optimized for the TP-LINK TL-WR703N. endef diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile index ebedf57e5a..4b90429edd 100644 --- a/target/linux/ar71xx/image/Makefile +++ b/target/linux/ar71xx/image/Makefile @@ -765,6 +765,11 @@ define Image/Build/Profile/OM2P $(call Image/Build/Template/$(fs_squash)/$(1),OpenMesh,om2p,OM2P) 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) +endef + tlmr3220_cmdline=board=TL-MR3220 console=ttyS0,115200 define Image/Build/Profile/TLMR3220 $(call Image/Build/Template/$(fs_64kraw)/$(1),TPLINK,tl-mr3220-v1,$(tlmr3220_cmdline),0x32200001,1,4M) @@ -933,6 +938,7 @@ define Image/Build/Profile/Default $(call Image/Build/Profile/PB92,$(1)) $(call Image/Build/Profile/TEW632BRP,$(1)) $(call Image/Build/Profile/TEW652BRP,$(1)) + $(call Image/Build/Profile/TLMR3020,$(1)) $(call Image/Build/Profile/TLMR3220,$(1)) $(call Image/Build/Profile/TLMR3420,$(1)) $(call Image/Build/Profile/TLWA901,$(1)) -- 2.30.2