summaryrefslogtreecommitdiff
path: root/target/linux
diff options
context:
space:
mode:
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-07-15 19:45:43 +0000
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-07-15 19:45:43 +0000
commit4c2865ecebb5e6975d8cbbeaf37b478b7cd75604 (patch)
tree0047cceb5f2690e2ffa1293e384a2dfb0d8a56e7 /target/linux
parent12e2f4aadfc594929beef0e5bfb5fa472440b7b2 (diff)
ramips: add generic ethernet device for the RT288x
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22212 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c41
-rw-r--r--target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h3
2 files changed, 44 insertions, 0 deletions
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c b/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c
index 086d9a999f..3b575f6208 100644
--- a/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c
+++ b/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.c
@@ -13,11 +13,13 @@
#include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/physmap.h>
+#include <linux/etherdevice.h>
#include <asm/addrspace.h>
#include <asm/mach-ralink/rt288x.h>
#include <asm/mach-ralink/rt288x_regs.h>
+#include <asm/mach-ralink/ramips_eth_platform.h>
#include "devices.h"
@@ -122,3 +124,42 @@ void __init rt288x_register_wifi(void)
{
platform_device_register(&rt288x_wifi_device);
}
+
+static void rt288x_fe_reset(void)
+{
+ rt288x_sysc_wr(RT2880_RESET_FE, SYSC_REG_RESET_CTRL);
+}
+
+static struct resource rt288x_eth_resources[] = {
+ {
+ .start = RT2880_FE_BASE,
+ .end = RT2880_FE_BASE + PAGE_SIZE - 1,
+ .flags = IORESOURCE_MEM,
+ }, {
+ .start = RT288X_CPU_IRQ_FE,
+ .end = RT288X_CPU_IRQ_FE,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+struct ramips_eth_platform_data rt288x_eth_data;
+static struct platform_device rt288x_eth_device = {
+ .name = "ramips_eth",
+ .resource = rt288x_eth_resources,
+ .num_resources = ARRAY_SIZE(rt288x_eth_resources),
+ .dev = {
+ .platform_data = &rt288x_eth_data,
+ }
+};
+
+void __init rt288x_register_ethernet(void)
+{
+ rt288x_eth_data.sys_freq = rt288x_sys_freq;
+ rt288x_eth_data.reset_fe = rt288x_fe_reset;
+ rt288x_eth_data.min_pkt_len = 64;
+
+ if (!is_valid_ether_addr(rt288x_eth_data.mac))
+ random_ether_addr(rt288x_eth_data.mac);
+
+ platform_device_register(&rt288x_eth_device);
+}
diff --git a/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h b/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h
index 78daf3ad07..6bd2d3f90c 100644
--- a/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h
+++ b/target/linux/ramips/files/arch/mips/ralink/rt288x/devices.h
@@ -18,4 +18,7 @@ extern void rt288x_register_flash(unsigned int id,
struct physmap_flash_data *pdata) __init;
void rt288x_register_wifi(void) __init;
+extern struct ramips_eth_platform_data rt288x_eth_data;
+void rt288x_register_ethernet(void) __init;
+
#endif /* __ASM_MACH_RT288X_PLATFORM_H */