ar71xx: add support for the TL-WR841N v1.5 board
authorGabor Juhos <juhosg@openwrt.org>
Tue, 22 Dec 2009 19:31:28 +0000 (19:31 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Tue, 22 Dec 2009 19:31:28 +0000 (19:31 +0000)
SVN-Revision: 18893

15 files changed:
target/linux/ar71xx/base-files/etc/defconfig/tl-wr841n-v1/network [new file with mode: 0644]
target/linux/ar71xx/base-files/etc/diag.sh
target/linux/ar71xx/base-files/lib/ar71xx.sh
target/linux/ar71xx/base-files/lib/upgrade/platform.sh
target/linux/ar71xx/config-2.6.30
target/linux/ar71xx/config-2.6.31
target/linux/ar71xx/config-2.6.32
target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig
target/linux/ar71xx/files/arch/mips/ar71xx/Makefile
target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr841n.c [new file with mode: 0644]
target/linux/ar71xx/files/arch/mips/ar71xx/prom.c
target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h
target/linux/ar71xx/image/Makefile
target/linux/ar71xx/profiles/tp-link.mk
tools/firmware-utils/src/mktplinkfw.c

diff --git a/target/linux/ar71xx/base-files/etc/defconfig/tl-wr841n-v1/network b/target/linux/ar71xx/base-files/etc/defconfig/tl-wr841n-v1/network
new file mode 100644 (file)
index 0000000..80fea51
--- /dev/null
@@ -0,0 +1,19 @@
+config interface loopback
+       option ifname   lo
+       option proto    static
+       option ipaddr   127.0.0.1
+       option netmask  255.0.0.0
+
+config interface mac0
+       option ifname   eth0
+
+config interface lan
+       option ifname   "lan1 lan2 lan3 lan4"
+       option type     bridge
+       option proto    static
+       option ipaddr   192.168.1.1
+       option netmask  255.255.255.0
+
+config interface wan
+       option ifname   wan
+       option proto    dhcp
index a74df07ce3e16cf04bb6c37b2d7d51730e5dfe7a..6e4ed5f6f1991803a773b3053cad462a2314c796 100755 (executable)
@@ -72,6 +72,9 @@ get_status_led() {
        tl-wr741nd)
                status_led="tl-wr741nd:green:system"
                ;;
+       tl-wr841n-v1)
+               status_led="tl-wr841n:green:system"
+               ;;
        tl-wr941nd)
                status_led="tl-wr941nd:green:system"
                ;;
index e73bb7f64f742d3e19c4a5a85b1c0c62764db79a..42f41e753eb484e28ec75451955c51e374c1deda 100755 (executable)
@@ -76,6 +76,9 @@ ar71xx_board_name() {
        *TL-WR741ND)
                name="tl-wr741nd"
                ;;
+       *"TL-WR841N v1")
+               name="tl-wr841n-v1"
+               ;;
        *TL-WR941ND)
                name="tl-wr941nd"
                ;;
index 629e42c304d743fd550e830105910babbbb9fc24..e320f30ea9abf8511ff97fb2529526b857fe61b0 100755 (executable)
@@ -75,7 +75,7 @@ platform_check_image() {
                }
                return 0
                ;;
-       tl-wr741nd | tl-wr941nd | tl-wr1043nd)
+       tl-wr741nd | tl-wr841n-v1 | tl-wr941nd | tl-wr1043nd)
                [ "$magic" != "0100" ] && {
                        echo "Invalid image type."
                        return 1
index 0564ad303b0d581a5d5d6ad59531ba81ef47b5fc..e1190a861c30c4669ea393f2d76765bc8e854aeb 100644 (file)
@@ -21,6 +21,7 @@ CONFIG_AR71XX_MACH_RB_4XX=y
 CONFIG_AR71XX_MACH_TEW_632BRP=y
 CONFIG_AR71XX_MACH_TL_WR1043ND=y
 CONFIG_AR71XX_MACH_TL_WR741ND=y
+CONFIG_AR71XX_MACH_TL_WR841N_V1=y
 CONFIG_AR71XX_MACH_TL_WR941ND=y
 CONFIG_AR71XX_MACH_UBNT=y
 CONFIG_AR71XX_MACH_WNDR3700=y
index 40fccc1a7a2a3f32dd58068facc0e6926a42f0ae..540b37ccc3a2ae41a8912184729964e03279f4bc 100644 (file)
@@ -23,6 +23,7 @@ CONFIG_AR71XX_MACH_RB_4XX=y
 CONFIG_AR71XX_MACH_TEW_632BRP=y
 CONFIG_AR71XX_MACH_TL_WR1043ND=y
 CONFIG_AR71XX_MACH_TL_WR741ND=y
+CONFIG_AR71XX_MACH_TL_WR841N_V1=y
 CONFIG_AR71XX_MACH_TL_WR941ND=y
 CONFIG_AR71XX_MACH_UBNT=y
 CONFIG_AR71XX_MACH_WNDR3700=y
index e43d1c4c683e76090226ee414e9ed7a17446d249..ed3bb6201c9878aef1034252ea90766c5a783081 100644 (file)
@@ -23,6 +23,7 @@ CONFIG_AR71XX_MACH_RB_4XX=y
 CONFIG_AR71XX_MACH_TEW_632BRP=y
 CONFIG_AR71XX_MACH_TL_WR1043ND=y
 CONFIG_AR71XX_MACH_TL_WR741ND=y
+CONFIG_AR71XX_MACH_TL_WR841N_V1=y
 CONFIG_AR71XX_MACH_TL_WR941ND=y
 CONFIG_AR71XX_MACH_UBNT=y
 CONFIG_AR71XX_MACH_WNDR3700=y
index 2bc7e7a648ba0554f9b6a1dcb3c8e37d55afd14a..39a175732aef74bb4f7de7bf320f406c04ff0836 100644 (file)
@@ -94,6 +94,11 @@ config AR71XX_MACH_TL_WR741ND
        select AR71XX_DEV_AP91_PCI if PCI
        default y
 
+config AR71XX_MACH_TL_WR841N_V1
+       bool "TP-LINK TL-WR841N v1 support"
+       select AR71XX_DEV_M25P80
+       default y
+
 config AR71XX_MACH_TL_WR941ND
        bool "TP-LINK TL-WR941ND support"
        select AR71XX_DEV_M25P80
index 0d6ae9ab7236b48ff6353099dae6aa15a039a148..34a89e22ee9097d1ceb4289f4376fc211b8898de 100644 (file)
@@ -31,6 +31,7 @@ obj-$(CONFIG_AR71XX_MACH_PB44)                += mach-pb44.o
 obj-$(CONFIG_AR71XX_MACH_RB_4XX)       += mach-rb-4xx.o
 obj-$(CONFIG_AR71XX_MACH_TEW_632BRP)   += mach-tew-632brp.o
 obj-$(CONFIG_AR71XX_MACH_TL_WR741ND)   += mach-tl-wr741nd.o
+obj-$(CONFIG_AR71XX_MACH_TL_WR841N_V1) += mach-tl-wr841n.o
 obj-$(CONFIG_AR71XX_MACH_TL_WR941ND)   += mach-tl-wr941nd.o
 obj-$(CONFIG_AR71XX_MACH_TL_WR1043ND)  += mach-tl-wr1043nd.o
 obj-$(CONFIG_AR71XX_MACH_UBNT)         += mach-ubnt.o
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr841n.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-wr841n.c
new file mode 100644 (file)
index 0000000..72d5acc
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ *  TP-LINK TL-WR841N board support
+ *
+ *  Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org>
+ *
+ *  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/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/input.h>
+
+#include <asm/mips_machine.h>
+#include <asm/mach-ar71xx/ar71xx.h>
+#include <asm/mach-ar71xx/pci.h>
+
+#include "devices.h"
+#include "dev-m25p80.h"
+#include "dev-ar913x-wmac.h"
+
+#define TL_WR841ND_V1_GPIO_LED_SYSTEM  2
+#define TL_WR841ND_V1_GPIO_LED_QSS     5
+
+#define TL_WR841ND_V1_GPIO_BTN_RESET   3
+#define TL_WR841ND_V1_GPIO_BTN_QSS     7
+
+#define TL_WR841ND_V1_BUTTONS_POLL_INTERVAL    20
+
+#ifdef CONFIG_MTD_PARTITIONS
+static struct mtd_partition tl_wr841n_v1_partitions[] = {
+       {
+               .name           = "redboot",
+               .offset         = 0,
+               .size           = 0x020000,
+               .mask_flags     = MTD_WRITEABLE,
+       } , {
+               .name           = "kernel",
+               .offset         = 0x020000,
+               .size           = 0x140000,
+       } , {
+               .name           = "rootfs",
+               .offset         = 0x160000,
+               .size           = 0x280000,
+       } , {
+               .name           = "config",
+               .offset         = 0x3e0000,
+               .size           = 0x020000,
+               .mask_flags     = MTD_WRITEABLE,
+       } , {
+               .name           = "firmware",
+               .offset         = 0x020000,
+               .size           = 0x3c0000,
+       }
+};
+#endif /* CONFIG_MTD_PARTITIONS */
+
+static struct flash_platform_data tl_wr841n_v1_flash_data = {
+#ifdef CONFIG_MTD_PARTITIONS
+        .parts          = tl_wr841n_v1_partitions,
+        .nr_parts       = ARRAY_SIZE(tl_wr841n_v1_partitions),
+#endif
+};
+
+static struct ar71xx_pci_irq tl_wr841n_v1_pci_irqs[] __initdata = {
+       {
+               .slot   = 0,
+               .pin    = 1,
+               .irq    = AR71XX_PCI_IRQ_DEV0,
+       }, {
+               .slot   = 1,
+               .pin    = 1,
+               .irq    = AR71XX_PCI_IRQ_DEV1,
+       }, {
+               .slot   = 2,
+               .pin    = 1,
+               .irq    = AR71XX_PCI_IRQ_DEV2,
+       }
+};
+
+static struct gpio_led tl_wr841n_v1_leds_gpio[] __initdata = {
+       {
+               .name           = "tl-wr841n:green:system",
+               .gpio           = TL_WR841ND_V1_GPIO_LED_SYSTEM,
+               .active_low     = 1,
+       }, {
+               .name           = "tl-wr841n:red:qss",
+               .gpio           = TL_WR841ND_V1_GPIO_LED_QSS,
+               .active_low     = 1,
+       }
+};
+
+static struct gpio_button tl_wr841n_v1_gpio_buttons[] __initdata = {
+       {
+               .desc           = "reset",
+               .type           = EV_KEY,
+               .code           = BTN_0,
+               .threshold      = 5,
+               .gpio           = TL_WR841ND_V1_GPIO_BTN_RESET,
+               .active_low     = 1,
+       }, {
+               .desc           = "qss",
+               .type           = EV_KEY,
+               .code           = BTN_1,
+               .threshold      = 5,
+               .gpio           = TL_WR841ND_V1_GPIO_BTN_QSS,
+               .active_low     = 1,
+       }
+};
+
+static struct dsa_chip_data tl_wr841n_v1_dsa_chip = {
+       .port_names[0]  = "wan",
+       .port_names[1]  = "lan1",
+       .port_names[2]  = "lan2",
+       .port_names[3]  = "lan3",
+       .port_names[4]  = "lan4",
+       .port_names[5]  = "cpu",
+};
+
+static struct dsa_platform_data tl_wr841n_v1_dsa_data = {
+       .nr_chips       = 1,
+       .chip           = &tl_wr841n_v1_dsa_chip,
+};
+
+static void __init tl_wr841n_v1_setup(void)
+{
+       u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
+
+       ar71xx_set_mac_base(mac);
+
+       ar71xx_add_device_mdio(0x0);
+
+       ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+       ar71xx_eth0_data.phy_mask = 0x0;
+       ar71xx_eth0_data.speed = SPEED_100;
+       ar71xx_eth0_data.duplex = DUPLEX_FULL;
+
+       ar71xx_add_device_eth(0);
+
+       ar71xx_add_device_dsa(0, &tl_wr841n_v1_dsa_data);
+
+       ar71xx_add_device_m25p80(&tl_wr841n_v1_flash_data);
+
+       ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(tl_wr841n_v1_leds_gpio),
+                                       tl_wr841n_v1_leds_gpio);
+
+       ar71xx_add_device_gpio_buttons(-1, TL_WR841ND_V1_BUTTONS_POLL_INTERVAL,
+                                       ARRAY_SIZE(tl_wr841n_v1_gpio_buttons),
+                                       tl_wr841n_v1_gpio_buttons);
+
+       ar71xx_pci_init(ARRAY_SIZE(tl_wr841n_v1_pci_irqs),
+                       tl_wr841n_v1_pci_irqs);
+}
+
+MIPS_MACHINE(AR71XX_MACH_TL_WR841N_V1, "TP-LINK TL-WR841N v1",
+            tl_wr841n_v1_setup);
index 283aff6a7bdc6952bcb9f56fe935af2599e3e8f0..b38b48ba3bd102e304a1d87a4c218e837e624dad 100644 (file)
@@ -70,6 +70,9 @@ static struct board_rec boards[] __initdata = {
        }, {
                .name           = "TL-WR741ND",
                .mach_type      = AR71XX_MACH_TL_WR741ND,
+       }, {
+               .name           = "TL-WR841N-v1.5",
+               .mach_type      = AR71XX_MACH_TL_WR841N_V1,
        }, {
                .name           = "TL-WR941ND",
                .mach_type      = AR71XX_MACH_TL_WR941ND,
index 74cdfb36a49abe1f259489368468a2e0015da0d3..7a52e8b54c8d6a1662976f8c0f5622eaf7041f05 100644 (file)
@@ -139,6 +139,7 @@ enum ar71xx_mach_type {
        AR71XX_MACH_TEW_632BRP, /* TRENDnet TEW-632BRP */
        AR71XX_MACH_DIR_615_C1, /* D-Link DIR-615 rev. C1 */
        AR71XX_MACH_TL_WR741ND, /* TP-LINK TL-WR741ND */
+       AR71XX_MACH_TL_WR841N_V1, /* TP-LINK TL-WR841N v1 */
        AR71XX_MACH_TL_WR941ND, /* TP-LINK TL-WR941ND */
        AR71XX_MACH_TL_WR1043ND, /* TP-LINK TL-WR1041ND */
        AR71XX_MACH_UBNT_LSSR71, /* Ubiquiti LS-SR71 */
index b6012b21b8b647a19d49b83269c4f5fcd9301c18..3c852770bdf025603ec41f5cea3fdee1dace66b9 100644 (file)
@@ -461,6 +461,10 @@ define Image/Build/Profile/TLWR741NDV1
        $(call Image/Build/Template/TPLINK4K/$(1),tl-wr741ndv1,board=TL-WR741ND,TL-WR741NDv1)
 endef
 
+define Image/Build/Profile/TLWR841NV15
+       $(call Image/Build/Template/TPLINK/$(1),tl-wr841n-v1.5,board=TL-WR841N-v1.5,TL-WR841Nv1.5)
+endef
+
 define Image/Build/Profile/TLWR841NDV3
        $(call Image/Build/Template/TPLINK/$(1),tl-wr841ndv3,board=TL-WR941ND,TL-WR841NDv3)
 endef
@@ -503,6 +507,7 @@ define Image/Build/Profile/Default
        $(call Image/Build/Profile/TEW632BRP,$(1))
        $(call Image/Build/Profile/TEW652BRP,$(1))
        $(call Image/Build/Profile/TLWR741NDV1,$(1))
+       $(call Image/Build/Profile/TLWR841NV15,$(1))
        $(call Image/Build/Profile/TLWR841NDV3,$(1))
        $(call Image/Build/Profile/TLWR841NDV5,$(1))
        $(call Image/Build/Profile/TLWR941NDV2,$(1))
index 8df005075bc7319c1ea43af4114df447a286583c..a7a9013b7a268f78fcb77ca7d061833bd56cf818 100644 (file)
@@ -15,6 +15,17 @@ endef
 
 $(eval $(call Profile,TLWR741NDV1))
 
+define Profile/TLWR841NV15
+       NAME:=TP-LINK TL-WR841N v1.5
+       PACKAGES:=kmod-ath9k hostapd-mini
+endef
+
+define Profile/TLWR841NV15/Description
+       Package set optimized for the TP-LINK TL-WR841N v1.5.
+endef
+
+$(eval $(call Profile,TLWR841NV15))
+
 define Profile/TLWR841NDV3
        NAME:=TP-LINK TL-WR841ND v3
        PACKAGES:=kmod-ath9k hostapd-mini
index 7bb877cffcf647bfbc27faeed9e34290efd245de..25c3ad6121fd0886363b86c5a51f82dfb04d8434 100644 (file)
@@ -34,6 +34,7 @@
 
 #define HEADER_VERSION_V1      0x01000000
 #define HWID_TL_WR741ND_V1     0x07410001
+#define HWID_TL_WR841N_V1_5    0x08410002
 #define HWID_TL_WR841ND_V3     0x08410003
 #define HWID_TL_WR841ND_V5     0x08410005
 #define HWID_TL_WR941ND_V2     0x09410002
@@ -113,6 +114,14 @@ static struct board_info boards[] = {
                .kernel_la      = 0x80060000,
                .kernel_ep      = 0x80060000,
                .rootfs_ofs     = 0x140000,
+       }, {
+               .id             = "TL-WR841Nv1.5",
+               .hw_id          = HWID_TL_WR841N_V1_5,
+               .hw_rev         = 2,
+               .fw_max_len     = 0x3c0000,
+               .kernel_la      = 0x80060000,
+               .kernel_ep      = 0x80060000,
+               .rootfs_ofs     = 0x140000,
        }, {
                .id             = "TL-WR841NDv3",
                .hw_id          = HWID_TL_WR841ND_V3,