X-Git-Url: http://git.ozo.com/?a=blobdiff_plain;f=target%2Flinux%2Far7%2Ffiles%2Farch%2Fmips%2Far7%2Fplatform.c;h=c2629861e13478137dc718a4600a9afd3480a960;hb=1aaf14ee09dc8242ee644d0320505e0f1bcbfba7;hp=b1122a6b738a25d4fa8a71a5533e54540361e5dd;hpb=4aac3b42a23c57e7e4076ee7805432995025a278;p=openwrt-10.03%2F.git diff --git a/target/linux/ar7/files/arch/mips/ar7/platform.c b/target/linux/ar7/files/arch/mips/ar7/platform.c index b1122a6b7..c2629861e 100644 --- a/target/linux/ar7/files/arch/mips/ar7/platform.c +++ b/target/linux/ar7/files/arch/mips/ar7/platform.c @@ -1,18 +1,16 @@ /* - * $Id$ - * * Copyright (C) 2006, 2007 OpenWrt.org - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -23,17 +21,21 @@ #include #include #include +#include #include #include #include #include #include +#include +#include +#include +#include + #include -#include #include #include #include -#include struct plat_vlynq_data { struct plat_vlynq_ops ops; @@ -58,10 +60,9 @@ static int vlynq_on(struct vlynq_device *dev) if ((result = ar7_gpio_enable(pdata->gpio_bit))) goto out_enabled; - if ((result = gpio_direction_output(pdata->gpio_bit))) + if ((result = gpio_direction_output(pdata->gpio_bit, 0))) goto out_gpio_enabled; - gpio_set_value(pdata->gpio_bit, 0); mdelay(50); gpio_set_value(pdata->gpio_bit, 1); @@ -91,7 +92,7 @@ static struct resource physmap_flash_resource = { .flags = IORESOURCE_MEM, .start = 0x10000000, .end = 0x107fffff, -}; +}; static struct resource cpmac_low_res[] = { { @@ -177,6 +178,27 @@ static struct resource vlynq_high_res[] = { }, }; +static struct resource usb_res[] = { + { + .name = "regs", + .flags = IORESOURCE_MEM, + .start = AR7_REGS_USB, + .end = AR7_REGS_USB + 0xff, + }, + { + .name = "irq", + .flags = IORESOURCE_IRQ, + .start = 32, + .end = 32, + }, + { + .name = "mem", + .flags = IORESOURCE_MEM, + .start = 0x03400000, + .end = 0x034001fff, + }, +}; + static struct physmap_flash_data physmap_flash_data = { .width = 2, }; @@ -215,10 +237,15 @@ static struct platform_device physmap_flash = { .num_resources = 1, }; +static u64 cpmac_dma_mask = DMA_32BIT_MASK; static struct platform_device cpmac_low = { .id = 0, .name = "cpmac", - .dev.platform_data = &cpmac_low_data, + .dev = { + .dma_mask = &cpmac_dma_mask, + .coherent_dma_mask = DMA_32BIT_MASK, + .platform_data = &cpmac_low_data, + }, .resource = cpmac_low_res, .num_resources = ARRAY_SIZE(cpmac_low_res), }; @@ -226,7 +253,11 @@ static struct platform_device cpmac_low = { static struct platform_device cpmac_high = { .id = 1, .name = "cpmac", - .dev.platform_data = &cpmac_high_data, + .dev = { + .dma_mask = &cpmac_dma_mask, + .coherent_dma_mask = DMA_32BIT_MASK, + .platform_data = &cpmac_high_data, + }, .resource = cpmac_high_res, .num_resources = ARRAY_SIZE(cpmac_high_res), }; @@ -253,8 +284,7 @@ static struct platform_device vlynq_high = { */ #if !defined(CONFIG_SERIAL_8250) -static struct plat_serial8250_port uart0_data = -{ +static struct plat_serial8250_port uart0_data = { .mapbase = AR7_REGS_UART0, .irq = AR7_IRQ_UART0, .regshift = 2, @@ -262,8 +292,7 @@ static struct plat_serial8250_port uart0_data = .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, }; -static struct plat_serial8250_port uart1_data = -{ +static struct plat_serial8250_port uart1_data = { .mapbase = UR8_REGS_UART1, .irq = AR7_IRQ_UART1, .regshift = 2, @@ -289,6 +318,43 @@ static struct platform_device uart = { }; #endif +static struct gpio_led default_leds[] = { + { .name = "status", .gpio = 8, .active_low = 1, }, +}; + +static struct gpio_led fb_leds[] = { + { .name = "1", .gpio = 7, }, + { .name = "2", .gpio = 13, .active_low = 1, }, + { .name = "3", .gpio = 10, .active_low = 1, }, + { .name = "4", .gpio = 12, .active_low = 1, }, + { .name = "5", .gpio = 9, .active_low = 1, }, +}; + +static struct gpio_led fb_fon_leds[] = { + { .name = "1", .gpio = 8, }, + { .name = "2", .gpio = 3, .active_low = 1, }, + { .name = "3", .gpio = 5, }, + { .name = "4", .gpio = 4, .active_low = 1, }, + { .name = "5", .gpio = 11, .active_low = 1, }, +}; + +static struct gpio_led_platform_data ar7_led_data; + +static struct platform_device ar7_gpio_leds = { + .name = "leds-gpio", + .id = -1, + .dev = { + .platform_data = &ar7_led_data, + } +}; + +static struct platform_device ar7_udc = { + .id = -1, + .name = "ar7_udc", + .resource = usb_res, + .num_resources = ARRAY_SIZE(usb_res), +}; + static inline unsigned char char2hex(char h) { switch (h) { @@ -346,7 +412,7 @@ static int __init ar7_register_devices(void) return res; - // Only TNETD73xx have a second serial port + /* Only TNETD73xx have a second serial port */ if (ar7_has_second_uart()) { uart_port[1].type = PORT_AR7; uart_port[1].line = 1; @@ -361,21 +427,20 @@ static int __init ar7_register_devices(void) return res; } -#else // !CONFIG_SERIAL_8250 +#else /* !CONFIG_SERIAL_8250 */ uart_data[0].uartclk = ar7_bus_freq() / 2; uart_data[1].uartclk = uart_data[0].uartclk; - // Only TNETD73xx have a second serial port - if (ar7_has_second_uart()) { + /* Only TNETD73xx have a second serial port */ + if (ar7_has_second_uart()) uart.dev.platform_data = uart_data; - } res = platform_device_register(&uart); if (res) return res; -#endif // CONFIG_SERIAL_8250 +#endif /* CONFIG_SERIAL_8250 */ res = platform_device_register(&physmap_flash); if (res) @@ -404,6 +469,17 @@ static int __init ar7_register_devices(void) cpmac_get_mac(0, cpmac_low_data.dev_addr); res = platform_device_register(&cpmac_low); + if (res) + return res; + +#warning FIXME: add model detection + ar7_led_data.num_leds = ARRAY_SIZE(default_leds); + ar7_led_data.leds = default_leds; + res = platform_device_register(&ar7_gpio_leds); + if (res) + return res; + + res = platform_device_register(&ar7_udc); return res; }