OpenWrt Forum Archive

Topic: Support for (Easylink) elink el-ml150 (AR9331)

The content of this topic has been archived on 7 Apr 2018. There are no obvious gaps in this topic, but there may still be some posts missing at the end.

I bought elink el-ml150
in ali-express
(more details on the original Chinese retailer is available in
http://item.taobao.com/item.htm?spm=a1z … obao_shop)

I am looking for that device source and configuration to customize its firmware.

It seems that they (the module producers) have not released build configuration and the OpenWrt source codes that are used in that module and maybe the build patches for that specific hardware configuration.

Can anyone in OpenWrt community ask or want them to hand out the sources and the firmware, which is required to exploit the daughter board hardware configuration?

To my understanding it seems that the OpenWrt source licensing requires manufacturers to release and make available to public all the GPL source codes that are used in their OpenWrt implementation?

Thanks

(Last edited by sina on 5 Jan 2014, 02:07)

Hi,sina:

I am huangfc, EL-m150 has been designed by me.

about the sources code,you can use this patch for openwrt. i do not know how to submit to original.


Index: target/linux/ar71xx/image/Makefile
===================================================================
--- target/linux/ar71xx/image/Makefile    (版本 39036)
+++ target/linux/ar71xx/image/Makefile    (工作副本)
@@ -981,6 +981,8 @@
$(eval $(call SingleProfile,TPLINK,64kraw,TLWR941NV4,tl-wr941nd-v4,TL-WR741ND,ttyS0,115200,0x09410004,1,4M))
$(eval $(call SingleProfile,TPLINK,64kraw,TLWR1043V1,tl-wr1043nd-v1,TL-WR1043ND,ttyS0,115200,0x10430001,1,8M))

+$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,ELM150,el-m150,EL-M150,ttyATH0,115200,0x01500101,1,8Mlzma))
+$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,MINI,M-mini,M-mini,ttyATH0,115200,0x01530001,1,8Mlzma))
$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,ARCHERC7,archer-c7-v1,ARCHER-C7,ttyS0,115200,0x75000001,1,8Mlzma))
$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLMR10U,tl-mr10u-v1,TL-MR10U,ttyATH0,115200,0x00100101,1,4Mlzma))
$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLMR11UV1,tl-mr11u-v1,TL-MR11U,ttyATH0,115200,0x00110101,1,4Mlzma))
Index: target/linux/ar71xx/base-files/lib/ar71xx.sh
===================================================================
--- target/linux/ar71xx/base-files/lib/ar71xx.sh    (版本 39036)
+++ target/linux/ar71xx/base-files/lib/ar71xx.sh    (工作副本)
@@ -91,6 +91,12 @@
    hwver="v${hwver#0}"

    case "$hwid" in
+    "015000"*)
+        model="ELink EL-M150"
+        ;;
+    "015300"*)
+        model="ELink M-mini"
+        ;;
    "070300"*)
        model="TP-Link TL-WR703N"
        ;;
@@ -201,6 +207,12 @@
    machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)

    case "$machine" in
+    *EL-M150)
+        name="EL-M150"
+        ;;
+    *M-mini)
+        name="M-mini"
+        ;;
    *"AirRouter")
        name="airrouter"
        ;;
Index: target/linux/ar71xx/base-files/lib/upgrade/platform.sh
===================================================================
--- target/linux/ar71xx/base-files/lib/upgrade/platform.sh    (版本 39036)
+++ target/linux/ar71xx/base-files/lib/upgrade/platform.sh    (工作副本)
@@ -200,6 +200,8 @@
        return 1
        ;;

+    EL-M150 | \
+    M-mini | \
    archer-c7 | \
    tl-mr10u | \
    tl-mr11u | \
Index: target/linux/ar71xx/base-files/etc/uci-defaults/03_network-switchX-migration
===================================================================
--- target/linux/ar71xx/base-files/etc/uci-defaults/03_network-switchX-migration    (版本 39036)
+++ target/linux/ar71xx/base-files/etc/uci-defaults/03_network-switchX-migration    (工作副本)
@@ -80,6 +80,7 @@
    migrate_switch_name "eth0" "switch0"
    ;;

+EL-M150|\
rb-450)
    migrate_switch_name "eth1" "switch0"
    ;;
Index: target/linux/ar71xx/base-files/etc/uci-defaults/02_network
===================================================================
--- target/linux/ar71xx/base-files/etc/uci-defaults/02_network    (版本 39036)
+++ target/linux/ar71xx/base-files/etc/uci-defaults/02_network    (工作副本)
@@ -22,6 +22,16 @@
    ucidef_set_interface_lan "eth0 eth1"
    ;;

+M-mini)
+    ucidef_set_interfaces_lan_wan "eth1" "eth0"
+    ;;
+
+EL-M150)
+    ucidef_set_interfaces_lan_wan "eth1" "eth0"
+    ucidef_add_switch "switch0" "1" "1"
+    ucidef_add_switch_vlan "switch0" "1" "0 1 3"
+    ;;
+
ap132 |\
wlr8100)
    ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
Index: target/linux/ar71xx/base-files/etc/diag.sh
===================================================================
--- target/linux/ar71xx/base-files/etc/diag.sh    (版本 39036)
+++ target/linux/ar71xx/base-files/etc/diag.sh    (工作副本)
@@ -6,6 +6,10 @@

get_status_led() {
    case $(ar71xx_board_name) in
+    M-mini | \
+    EL-M150)
+        status_led="elink:green:system"
+        ;;
    alfa-nx)
        status_led="alfa:green:led_8"
        ;;
Index: tools/firmware-utils/src/mktplinkfw.c
===================================================================
--- tools/firmware-utils/src/mktplinkfw.c    (版本 39036)
+++ tools/firmware-utils/src/mktplinkfw.c    (工作副本)
@@ -190,6 +190,12 @@
        .kernel_ep    = 0xc0000000,
        .rootfs_ofs    = 0x2a0000,
    }, {
+        .id        = "16Mlzma",
+        .fw_max_len    = 0xfc0000,
+        .kernel_la    = 0x80060000,
+        .kernel_ep    = 0x80060000,
+        .rootfs_ofs    = 0x100000,
+    }, {
        /* terminating entry */
    }
};
Index: target/linux/ar71xx/config-3.10
===================================================================
--- target/linux/ar71xx/config-3.10    (版本 39036)
+++ target/linux/ar71xx/config-3.10    (工作副本)
@@ -46,6 +46,7 @@
CONFIG_ATH79_MACH_DIR_825_C1=y
CONFIG_ATH79_MACH_DRAGINO2=y
CONFIG_ATH79_MACH_EAP7660D=y
+CONFIG_ATH79_MACH_EL_M150=y
CONFIG_ATH79_MACH_EW_DORIN=y
CONFIG_ATH79_MACH_HORNET_UB=y
CONFIG_ATH79_MACH_JA76PF=y
@@ -55,6 +56,7 @@
CONFIG_ATH79_MACH_MYNET_REXT=y
CONFIG_ATH79_MACH_MZK_W04NU=y
CONFIG_ATH79_MACH_MZK_W300NH=y
+CONFIG_ATH79_MACH_M_mini=y
CONFIG_ATH79_MACH_NBG460N=y
CONFIG_ATH79_MACH_OM2P=y
CONFIG_ATH79_MACH_PB42=y
Index: target/linux/ar71xx/generic/profiles/el-link.mk
===================================================================
--- /dev/null
+++ target/linux/ar71xx/generic/profiles/el-link.mk
@@ -0,0 +1,29 @@
+#
+# Copyright (C) 2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/ELM150
+    NAME:=ELINK EL-M150
+    PACKAGES:=kmod-usb-core kmod-usb2
+endef
+
+
+define Profile/ELM150/Description
+    Package set optimized for the ELINK EL-M150.
+endef
+$(eval $(call Profile,ELM150))
+
+
+define Profile/MINI
+    NAME:=ELINK M-mini
+    PACKAGES:=kmod-usb-core kmod-usb2
+endef
+
+
+define Profile/MINI/Description
+    Package set optimized for the ELINK M-mini.
+endef
+$(eval $(call Profile,MINI))
Index: target/linux/ar71xx/files/arch/mips/ath79/mach-el-m150.c
===================================================================
--- /dev/null
+++ target/linux/ar71xx/files/arch/mips/ath79/mach-el-m150.c
@@ -0,0 +1,138 @@
+/*
+ *  ELINK EL-M150 board support
+ *
+ *  Copyright (C) 2012 HYS <550663898@qq.com>
+ *  Copyright (C) 2012 huangfc <huangfangcheng@163.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 <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"
+#include "dev-usb.h"
+
+#define EL_M150_GPIO_BTN6        6
+#define EL_M150_GPIO_BTN7        7
+#define EL_M150_GPIO_BTN_RESET        11
+
+#define EL_M150_GPIO_LED_SYSTEM        27
+#define EL_M150_GPIO_USB_POWER        8
+
+#define EL_M150_KEYS_POLL_INTERVAL    20    /* msecs */
+#define EL_M150_KEYS_DEBOUNCE_INTERVAL (3 * EL_M150_KEYS_POLL_INTERVAL)
+
+static const char *EL_M150_part_probes[] = {
+    "tp-link",
+    NULL,
+};
+
+static struct flash_platform_data EL_M150_flash_data = {
+    .part_probes    = EL_M150_part_probes,
+};
+
+static struct gpio_led EL_M150_leds_gpio[] __initdata = {
+    {
+        .name        = "elink:green:system",
+        .gpio        = EL_M150_GPIO_LED_SYSTEM,
+        .active_low    = 1,
+    },
+};
+
+static struct gpio_keys_button EL_M150_gpio_keys[] __initdata = {
+    {
+        .desc        = "reset",
+        .type        = EV_KEY,
+        .code        = KEY_RESTART,
+        .debounce_interval = EL_M150_KEYS_DEBOUNCE_INTERVAL,
+        .gpio        = EL_M150_GPIO_BTN_RESET,
+        .active_low    = 0,
+    },
+    {
+        .desc        = "BTN_6",
+        .type        = EV_KEY,
+        .code        = BTN_6,
+        .debounce_interval = EL_M150_KEYS_DEBOUNCE_INTERVAL,
+        .gpio        = EL_M150_GPIO_BTN6,
+        .active_low    = 1,
+    },
+    {
+        .desc        = "BTN_7",
+        .type        = EV_KEY,
+        .code        = BTN_7,
+        .debounce_interval = EL_M150_KEYS_DEBOUNCE_INTERVAL,
+        .gpio        = EL_M150_GPIO_BTN7,
+        .active_low    = 1,
+    },
+};
+
+static void ath79_gpio_set_value(unsigned gpio, int value)
+{
+    void __iomem *base = ath79_gpio_base;
+
+    if (value)
+        __raw_writel(1 << gpio, base + AR71XX_GPIO_REG_SET);
+    else
+        __raw_writel(1 << gpio, base + AR71XX_GPIO_REG_CLEAR);
+}
+
+static void __init EL_M150_GPIO_setup(void)
+{
+    ath79_gpio_set_value(0,1);
+    ath79_gpio_set_value(1,1);
+    ath79_gpio_set_value(14,1);
+    ath79_gpio_set_value(16,1);
+    ath79_gpio_set_value(18,1);
+    ath79_gpio_set_value(19,1);
+    ath79_gpio_set_value(20,1);
+    ath79_gpio_set_value(21,1);
+    ath79_gpio_set_value(22,1);
+    ath79_gpio_set_value(26,1);
+}
+
+static void __init EL_M150_setup(void)
+{
+    u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
+    u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+    EL_M150_GPIO_setup();
+
+    /* disable PHY_SWAP and PHY_ADDR_SWAP bits */
+    ath79_setup_ar933x_phy4_switch(false, false);
+
+    ath79_register_leds_gpio(-1, ARRAY_SIZE(EL_M150_leds_gpio),
+                 EL_M150_leds_gpio);
+
+    ath79_register_gpio_keys_polled(-1, EL_M150_KEYS_POLL_INTERVAL,
+                    ARRAY_SIZE(EL_M150_gpio_keys),
+                    EL_M150_gpio_keys);
+
+    gpio_request_one(EL_M150_GPIO_USB_POWER,
+             GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
+             "USB power");
+    ath79_register_usb();
+
+    ath79_register_m25p80(&EL_M150_flash_data);
+    ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
+    ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1);
+
+    ath79_register_mdio(0, 0x0);
+    ath79_register_eth(0);
+    ath79_register_eth(1);
+
+    ath79_register_wmac(ee, mac);
+}
+
+MIPS_MACHINE(ATH79_MACH_EL_M150, "EL-M150",
+         "ELINK EL-M150", EL_M150_setup);
Index: target/linux/ar71xx/files/arch/mips/ath79/mach-el-mini.c
===================================================================
--- /dev/null
+++ target/linux/ar71xx/files/arch/mips/ath79/mach-el-mini.c
@@ -0,0 +1,86 @@
+/*
+ *  ELINK M-mini board support
+ *
+ *  Copyright (C) 2012 HYS <550663898@qq.com>
+ *  Copyright (C) 2012 huangfc <huangfangcheng@163.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 <asm/mach-ath79/ath79.h>
+
+#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 MINI_GPIO_LED_SYSTEM    27
+#define MINI_GPIO_BTN_RESET    11
+
+#define MINI_GPIO_USB_POWER    8
+
+#define MINI_KEYS_POLL_INTERVAL    20    /* msecs */
+#define MINI_KEYS_DEBOUNCE_INTERVAL    (3 * MINI_KEYS_POLL_INTERVAL)
+
+static const char *mini_part_probes[] = {
+    "tp-link",
+    NULL,
+};
+
+static struct flash_platform_data mini_flash_data = {
+    .part_probes    = mini_part_probes,
+};
+
+static struct gpio_led mini_leds_gpio[] __initdata = {
+    {
+        .name        = "elink:green:system",
+        .gpio        = MINI_GPIO_LED_SYSTEM,
+        .active_low    = 1,
+    },
+};
+
+static struct gpio_keys_button mini_gpio_keys[] __initdata = {
+    {
+        .desc        = "reset",
+        .type        = EV_KEY,
+        .code        = KEY_RESTART,
+        .debounce_interval = MINI_KEYS_DEBOUNCE_INTERVAL,
+        .gpio        = MINI_GPIO_BTN_RESET,
+        .active_low    = 0,
+    }
+};
+
+static void __init mini_setup(void)
+{
+    u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
+    u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+    ath79_register_m25p80(&mini_flash_data);
+    ath79_register_leds_gpio(-1, ARRAY_SIZE(mini_leds_gpio),
+                 mini_leds_gpio);
+    ath79_register_gpio_keys_polled(-1, MINI_KEYS_POLL_INTERVAL,
+                    ARRAY_SIZE(mini_gpio_keys),
+                    mini_gpio_keys);
+
+    gpio_request_one(MINI_GPIO_USB_POWER,
+             GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
+             "USB power");
+    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_M_mini, "M-mini", "ELINK M-mini",
+         mini_setup);
Index: target/linux/ar71xx/patches-3.10/635-MIPS-ath79-add-EL-LINK-support.patch
===================================================================
--- /dev/null
+++ target/linux/ar71xx/patches-3.10/635-MIPS-ath79-add-EL-LINK-support.patch
@@ -0,0 +1,51 @@
+--- a/arch/mips/ath79/Kconfig
++++ b/arch/mips/ath79/Kconfig
+@@ -597,6 +597,26 @@
+     select ATH79_DEV_M25P80
+     select ATH79_DEV_WMAC
+
++config ATH79_MACH_EL_M150
++    bool "ELINK EL-M150 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_M_mini
++    bool "ELINK M-mini 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_WA901ND
+     bool "TP-LINK TL-WA901ND/TL-WA7510N support"
+     select SOC_AR724X
+--- a/arch/mips/ath79/Makefile
++++ b/arch/mips/ath79/Makefile
+@@ -89,6 +89,8 @@
+ 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_WAX50RE)     += mach-tl-wax50re.o
++obj-$(CONFIG_ATH79_MACH_EL_M150)    += mach-el-m150.o
++obj-$(CONFIG_ATH79_MACH_M_mini)    += mach-el-mini.o
+ obj-$(CONFIG_ATH79_MACH_TL_WA901ND)    += mach-tl-wa901nd.o
+ obj-$(CONFIG_ATH79_MACH_TL_WA901ND_V2)    += mach-tl-wa901nd-v2.o
+ obj-$(CONFIG_ATH79_MACH_TL_WDR3500)     += mach-tl-wdr3500.o
+--- a/arch/mips/ath79/machtypes.h
++++ b/arch/mips/ath79/machtypes.h
+@@ -116,6 +116,8 @@
+     ATH79_MACH_TL_WR841N_V7,    /* TP-LINK TL-WR841N/ND v7 */
+     ATH79_MACH_TL_WR841N_V8,    /* TP-LINK TL-WR841N/ND v8 */
+     ATH79_MACH_TL_WR842N_V2,    /* TP-LINK TL-WR842N/ND v2 */
++    ATH79_MACH_EL_M150,        /* ELINK EL-M150 */
++    ATH79_MACH_M_mini,        /* ELINK M-mini */
+     ATH79_MACH_TL_WR941ND,        /* TP-LINK TL-WR941ND */
+     ATH79_MACH_UBNT_AIRROUTER,    /* Ubiquiti AirRouter */
+     ATH79_MACH_UBNT_BULLET_M,    /* Ubiquiti Bullet M */

Hi huangfc,

poor man wrote:

Hi,sina:

I am huangfc, EL-m150 has been designed by me.

Did you also designed the ELINK mini ? Awesome piece of hardware … Are these modules RF calibrated ?
If I could breathe a wish I would like to see a AR9341 mini module.
The benefit would be the GPIO multiplexing - the functions (e.g. I2S, 2nd Uart …) could be mapped to any port.

Regards

bertc3p0

(Last edited by bertc3p0 on 20 Jun 2014, 16:06)

The discussion might have continued from here.