X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/d9c2b6a237f6481353e98dcdace3b14a3c9ca3de..3b5a6363a0cebe502193f0af8954caf8db8c52f5:/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 4ad93b580..60e571179 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,12 @@ #include #include +#include +#include #include #include +#include +#include #include @@ -20,6 +24,7 @@ #include "devices.h" #include +#include static struct resource rt305x_flash0_resources[] = { { @@ -30,10 +35,14 @@ static struct resource rt305x_flash0_resources[] = { }, }; +struct physmap_flash_data rt305x_flash0_data; static struct platform_device rt305x_flash0_device = { .name = "physmap-flash", .resource = rt305x_flash0_resources, .num_resources = ARRAY_SIZE(rt305x_flash0_resources), + .dev = { + .platform_data = &rt305x_flash0_data, + }, }; static struct resource rt305x_flash1_resources[] = { @@ -45,17 +54,21 @@ static struct resource rt305x_flash1_resources[] = { }, }; +struct physmap_flash_data rt305x_flash1_data; static struct platform_device rt305x_flash1_device = { .name = "physmap-flash", .resource = rt305x_flash1_resources, .num_resources = ARRAY_SIZE(rt305x_flash1_resources), + .dev = { + .platform_data = &rt305x_flash1_data, + }, }; static int rt305x_flash_instance __initdata; -void __init rt305x_register_flash(unsigned int id, - struct physmap_flash_data *pdata) +void __init rt305x_register_flash(unsigned int id) { struct platform_device *pdev; + struct physmap_flash_data *pdata; u32 t; int reg; @@ -75,6 +88,7 @@ void __init rt305x_register_flash(unsigned int id, t = rt305x_memc_rr(reg); t = (t >> FLASH_CFG_WIDTH_SHIFT) & FLASH_CFG_WIDTH_MASK; + pdata = pdev->dev.platform_data; switch (t) { case FLASH_CFG_WIDTH_8BIT: pdata->width = 1; @@ -90,7 +104,6 @@ void __init rt305x_register_flash(unsigned int id, return; } - pdev->dev.platform_data = pdata; pdev->id = rt305x_flash_instance; platform_device_register(pdev); @@ -118,7 +131,7 @@ static struct resource rt305x_eth_resources[] = { static struct ramips_eth_platform_data ramips_eth_data = { .mac = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }, .reset_fe = rt305x_fe_reset, - .min_pkt_len = 64 + .min_pkt_len = 64, }; static struct platform_device rt305x_eth_device = { @@ -130,7 +143,142 @@ 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 = { + .vlan_config = RT305X_ESW_VLAN_CONFIG_NONE, + .reg_initval_fct2 = 0x00d6500c, + .reg_initval_fpa2 = 0x3f502b28, +}; + +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) { + 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); } + +static struct resource rt305x_wifi_resources[] = { + { + .start = RT305X_WMAC_BASE, + .end = RT305X_WMAC_BASE + 0x3FFFF, + .flags = IORESOURCE_MEM, + }, { + .start = RT305X_CPU_IRQ_WNIC, + .end = RT305X_CPU_IRQ_WNIC, + .flags = IORESOURCE_IRQ, + }, +}; + +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 = &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 |= RT305X_SYSCFG_SRAM_CS0_MODE_WDT << + RT305X_SYSCFG_SRAM_CS0_MODE_SHIFT; + rt305x_sysc_wr(t, SYSC_REG_SYSTEM_CONFIG); + + platform_device_register(&rt305x_wdt_device); +} + +static struct resource rt305x_spi_resources[] = { + { + .flags = IORESOURCE_MEM, + .start = RT305X_SPI_BASE, + .end = RT305X_SPI_BASE + RT305X_SPI_SIZE - 1, + }, +}; + +static struct platform_device rt305x_spi_device = { + .name = "ramips-spi", + .id = 0, + .resource = rt305x_spi_resources, + .num_resources = ARRAY_SIZE(rt305x_spi_resources), +}; + +void __init rt305x_register_spi(struct spi_board_info *info, int n) +{ + spi_register_board_info(info, n); + platform_device_register(&rt305x_spi_device); +} + +static struct resource rt305x_usb_resources[] = { + { + .start = RT305X_OTG_BASE, + .end = RT305X_OTG_BASE + 0x3FFFF, + .flags = IORESOURCE_MEM, + }, { + .start = RT305X_INTC_IRQ_OTG, + .end = RT305X_INTC_IRQ_OTG, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device rt305x_usb_device = { + .name = "dwc_otg", + .resource = rt305x_usb_resources, + .num_resources = ARRAY_SIZE(rt305x_usb_resources), + .dev = { + .platform_data = NULL, + } +}; + +void __init rt305x_register_usb(void) +{ + platform_device_register(&rt305x_usb_device); +}