X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/0f85365209e075c6969b4157eb1137be37ccaeeb..8583804fdd09688fed19ad6658e9fe09ca9441b2:/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c diff --git a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c index 4ee0d4f1b..ce6e4d8c7 100644 --- a/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c +++ b/target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c @@ -1,7 +1,7 @@ /* * Ralink RT305x SoC platform device registration * - * Copyright (C) 2009 Gabor Juhos + * Copyright (C) 2009-2010 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 @@ -10,8 +10,11 @@ #include #include +#include +#include #include #include +#include #include @@ -130,10 +133,35 @@ static struct platform_device rt305x_eth_device = { } }; +static struct resource rt305x_esw_resources[] = { + { + .start = RT305X_SWITCH_BASE, + .end = RT305X_SWITCH_BASE + PAGE_SIZE - 1, + .flags = IORESOURCE_MEM, + }, +}; + +struct rt305x_esw_platform_data rt305x_esw_data; +static struct platform_device rt305x_esw_device = { + .name = "rt305x-esw", + .resource = rt305x_esw_resources, + .num_resources = ARRAY_SIZE(rt305x_esw_resources), + .dev = { + .platform_data = &rt305x_esw_data, + } +}; + void __init rt305x_register_ethernet(void) { - ramips_eth_data.sys_freq = rt305x_sys_freq; + struct clk *clk; + clk = clk_get(NULL, "sys"); + if (IS_ERR(clk)) + panic("unable to get SYS clock, err=%ld", PTR_ERR(clk)); + + ramips_eth_data.sys_freq = clk_get_rate(clk); + + platform_device_register(&rt305x_esw_device); platform_device_register(&rt305x_eth_device); } @@ -149,16 +177,46 @@ static struct resource rt305x_wifi_resources[] = { }, }; +static struct rt2x00_platform_data rt305x_wifi_data; static struct platform_device rt305x_wifi_device = { .name = "rt2800_wmac", .resource = rt305x_wifi_resources, .num_resources = ARRAY_SIZE(rt305x_wifi_resources), .dev = { - .platform_data = NULL, + .platform_data = &rt305x_wifi_data, } }; void __init rt305x_register_wifi(void) { + rt305x_wifi_data.eeprom_file_name = "RT305X.eeprom"; platform_device_register(&rt305x_wifi_device); } + +static struct resource rt305x_wdt_resources[] = { + { + .start = RT305X_TIMER_BASE, + .end = RT305X_TIMER_BASE + RT305X_TIMER_SIZE - 1, + .flags = IORESOURCE_MEM, + }, +}; + +static struct platform_device rt305x_wdt_device = { + .name = "ramips-wdt", + .id = -1, + .resource = rt305x_wdt_resources, + .num_resources = ARRAY_SIZE(rt305x_wdt_resources), +}; + +void __init rt305x_register_wdt(void) +{ + u32 t; + + /* enable WDT reset output on pin SRAM_CS_N */ + t = rt305x_sysc_rr(SYSC_REG_SYSTEM_CONFIG); + t |= SYSTEM_CONFIG_SRAM_CS0_MODE_WDT << + SYSTEM_CONFIG_SRAM_CS0_MODE_SHIFT; + rt305x_sysc_wr(t, SYSC_REG_SYSTEM_CONFIG); + + platform_device_register(&rt305x_wdt_device); +}