summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2013-01-19 17:05:03 +0000
committerGabor Juhos <juhosg@openwrt.org>2013-01-19 17:05:03 +0000
commit7eff5d2df0d21f3a54db650e7883548a59183841 (patch)
tree9bedd750488a7a768cefe945e51492b67d99ab0a
parentf7a943694ff5e370303b27f7093abcc5079385b4 (diff)
downloadmaster-31e0f0ae-7eff5d2df0d21f3a54db650e7883548a59183841.tar.gz
master-31e0f0ae-7eff5d2df0d21f3a54db650e7883548a59183841.tar.bz2
master-31e0f0ae-7eff5d2df0d21f3a54db650e7883548a59183841.zip
ramips: add kernel support for the Tenda 3G300M
Ralink RT3052F, 4MB flash, 32MB ram, one USB 2.0, two buttons and seven leds. Factory image should be used to flash from original firmware. Signed-off-by: Cezary Jackiewicz <cezary.jackiewicz@gmail.com> Signed-off-by: Gabor Juhos <juhosg@openwrt.org> SVN-Revision: 35244
-rw-r--r--target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h1
-rw-r--r--target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig5
-rw-r--r--target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile1
-rw-r--r--target/linux/ramips/files/arch/mips/ralink/rt305x/mach-3g300m.c126
-rw-r--r--target/linux/ramips/rt305x/config-3.71
5 files changed, 134 insertions, 0 deletions
diff --git a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
index bc183ab6ab..384a4662ef 100644
--- a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
+++ b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/machine.h
@@ -37,6 +37,7 @@ enum ramips_mach_type {
RAMIPS_MACH_WL_330N3G, /* Asus WL-330N3G */
/* RT3052 based machines */
+ RAMIPS_MACH_3G300M, /* Tenda 3G300M */
RAMIPS_MACH_ALL0239_3G, /* ALL0239-3G */
RAMIPS_MACH_ARGUS_ATP52B, /* Argus ATP-52B */
RAMIPS_MACH_BC2, /* NexAira BC2 */
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig b/target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
index 4eb946ee43..97258de47a 100644
--- a/target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
+++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig
@@ -12,6 +12,11 @@ config RT305X_MACH_3G_6200N
select RALINK_DEV_GPIO_BUTTONS
select RALINK_DEV_GPIO_LEDS
+config RT305X_MACH_3G300M
+ bool "Tenda 3G300M board support"
+ select RALINK_DEV_GPIO_BUTTONS
+ select RALINK_DEV_GPIO_LEDS
+
config RT305X_MACH_WR6202
bool "Accton WR6202"
select RALINK_DEV_GPIO_BUTTONS
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile b/target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
index 8fa75352b1..d38765cba8 100644
--- a/target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
+++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/Makefile
@@ -12,6 +12,7 @@ obj-y := irq.o setup.o devices.o rt305x.o clock.o
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-$(CONFIG_RT305X_MACH_3G_6200N) += mach-3g-6200n.o
+obj-$(CONFIG_RT305X_MACH_3G300M) += mach-3g300m.o
obj-$(CONFIG_RT305X_MACH_ARGUS_ATP52B) += mach-argus-atp52b.o
obj-$(CONFIG_RT305X_MACH_BC2) += mach-bc2.o
obj-$(CONFIG_RT305X_MACH_AIR3GII) += mach-air3gii.o
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-3g300m.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-3g300m.c
new file mode 100644
index 0000000000..e4993b303e
--- /dev/null
+++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/mach-3g300m.c
@@ -0,0 +1,126 @@
+/*
+ * Tenda 3G300M board support
+ *
+ * Copyright (C) 2013 Cezary Jackiewicz <cezary.jackiewicz@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/init.h>
+#include <linux/platform_device.h>
+#include <linux/spi/spi.h>
+#include <linux/spi/flash.h>
+#include <linux/gpio.h>
+
+#include <asm/mach-ralink/machine.h>
+#include <asm/mach-ralink/dev-gpio-buttons.h>
+#include <asm/mach-ralink/dev-gpio-leds.h>
+#include <asm/mach-ralink/rt305x.h>
+#include <asm/mach-ralink/rt305x_regs.h>
+
+#include "devices.h"
+
+#define TENDA_3G300M_GPIO_BUTTON_RESET 0
+#define TENDA_3G300M_GPIO_BUTTON_MODE 10
+
+#define TENDA_3G300M_GPIO_LED_3GROUTER 11
+#define TENDA_3G300M_GPIO_LED_AP 12
+#define TENDA_3G300M_GPIO_LED_WISPROUTER 9
+#define TENDA_3G300M_GPIO_LED_WIRELESSROUTER 13
+#define TENDA_3G300M_GPIO_LED_3G 7
+#define TENDA_3G300M_GPIO_LED_WPSRESET 14
+
+#define TENDA_3G300M_KEYS_POLL_INTERVAL 20
+#define TENDA_3G300M_KEYS_DEBOUNCE_INTERVAL (3 * TENDA_3G300M_KEYS_POLL_INTERVAL)
+
+const struct flash_platform_data tenda_3g300m_flash = {
+ .type = "mx25l3205d",
+};
+
+struct spi_board_info tenda_3g300m_spi_slave_info[] __initdata = {
+ {
+ .modalias = "m25p80",
+ .platform_data = &tenda_3g300m_flash,
+ .irq = -1,
+ .max_speed_hz = 10000000,
+ .bus_num = 0,
+ .chip_select = 0,
+ }
+};
+
+static struct gpio_led tenda_3g300m_leds_gpio[] __initdata = {
+ {
+ .name = "tenda:blue:3grouter",
+ .gpio = TENDA_3G300M_GPIO_LED_3GROUTER,
+ .active_low = 1,
+ },{
+ .name = "tenda:blue:ap",
+ .gpio = TENDA_3G300M_GPIO_LED_AP,
+ .active_low = 1,
+ },{
+ .name = "tenda:blue:wisprouter",
+ .gpio = TENDA_3G300M_GPIO_LED_WISPROUTER,
+ .active_low = 1,
+ },{
+ .name = "tenda:blue:wirelessrouter",
+ .gpio = TENDA_3G300M_GPIO_LED_WIRELESSROUTER,
+ .active_low = 1,
+ },{
+ .name = "tenda:blue:3g",
+ .gpio = TENDA_3G300M_GPIO_LED_3G,
+ .active_low = 1,
+ },{
+ .name = "tenda:blue:wpsreset",
+ .gpio = TENDA_3G300M_GPIO_LED_WPSRESET,
+ .active_low = 1,
+ }
+};
+
+static struct gpio_keys_button tenda_3g300m_gpio_buttons[] __initdata = {
+ {
+ .desc = "reset",
+ .type = EV_KEY,
+ .code = KEY_RESTART,
+ .debounce_interval = TENDA_3G300M_KEYS_DEBOUNCE_INTERVAL,
+ .gpio = TENDA_3G300M_GPIO_BUTTON_RESET,
+ .active_low = 1,
+ },{
+ .desc = "mode",
+ .type = EV_KEY,
+ .code = BTN_0,
+ .debounce_interval = TENDA_3G300M_KEYS_DEBOUNCE_INTERVAL,
+ .gpio = TENDA_3G300M_GPIO_BUTTON_MODE,
+ .active_low = 1,
+ }
+};
+
+static void __init tenda_3g300m_init(void)
+{
+ rt305x_gpio_init((RT305X_GPIO_MODE_GPIO <<
+ RT305X_GPIO_MODE_UART0_SHIFT) |
+ RT305X_GPIO_MODE_JTAG);
+
+ rt305x_register_spi(tenda_3g300m_spi_slave_info,
+ ARRAY_SIZE(tenda_3g300m_spi_slave_info));
+
+ ramips_register_gpio_leds(-1, ARRAY_SIZE(tenda_3g300m_leds_gpio),
+ tenda_3g300m_leds_gpio);
+
+ ramips_register_gpio_buttons(-1, TENDA_3G300M_KEYS_POLL_INTERVAL,
+ ARRAY_SIZE(tenda_3g300m_gpio_buttons),
+ tenda_3g300m_gpio_buttons);
+
+ rt305x_esw_data.vlan_config = RT305X_ESW_VLAN_CONFIG_LLLLW;
+ rt305x_register_ethernet();
+
+ rt305x_register_wifi();
+
+ rt305x_register_wdt();
+
+ rt305x_register_usb();
+}
+
+MIPS_MACHINE(RAMIPS_MACH_3G300M, "3G300M", "Tenda 3G300M",
+ tenda_3g300m_init);
diff --git a/target/linux/ramips/rt305x/config-3.7 b/target/linux/ramips/rt305x/config-3.7
index 1170b8fb7b..d26a419142 100644
--- a/target/linux/ramips/rt305x/config-3.7
+++ b/target/linux/ramips/rt305x/config-3.7
@@ -103,6 +103,7 @@ CONFIG_RALINK_RT305X=y
# CONFIG_RALINK_RT3883 is not set
CONFIG_RAMIPS_WDT=y
CONFIG_RT305X_MACH_3G_6200N=y
+CONFIG_RT305X_MACH_3G300M=y
CONFIG_RT305X_MACH_AIR3GII=y
CONFIG_RT305X_MACH_ALL0256N=y
CONFIG_RT305X_MACH_ALL5002=y