diff options
author | Florian Fainelli <florian@openwrt.org> | 2007-07-31 15:52:06 +0000 |
---|---|---|
committer | Florian Fainelli <florian@openwrt.org> | 2007-07-31 15:52:06 +0000 |
commit | ba3a37436e1a1014dd789dd7f6932f05bfec5cb4 (patch) | |
tree | c4a6727a97abe1ce1e8059522eab5d61b731cade /target/linux/ar7-2.6/files/arch | |
parent | 51dfaf45b432717a7a1b695f1386dbfeacc3ce05 (diff) | |
download | mtk-20170518-ba3a37436e1a1014dd789dd7f6932f05bfec5cb4.zip mtk-20170518-ba3a37436e1a1014dd789dd7f6932f05bfec5cb4.tar.gz mtk-20170518-ba3a37436e1a1014dd789dd7f6932f05bfec5cb4.tar.bz2 |
Register the second uart on tnetd7300 and fix the watchdog register for 7200/7300, thanks to DerAgo (#2149)
SVN-Revision: 8280
Diffstat (limited to 'target/linux/ar7-2.6/files/arch')
-rw-r--r-- | target/linux/ar7-2.6/files/arch/mips/ar7/platform.c | 89 |
1 files changed, 57 insertions, 32 deletions
diff --git a/target/linux/ar7-2.6/files/arch/mips/ar7/platform.c b/target/linux/ar7-2.6/files/arch/mips/ar7/platform.c index b9f7d0e..622f5d2 100644 --- a/target/linux/ar7-2.6/files/arch/mips/ar7/platform.c +++ b/target/linux/ar7-2.6/files/arch/mips/ar7/platform.c @@ -252,30 +252,40 @@ static struct platform_device vlynq_high = { * as xscale and, obviously, don't work... */ #if !defined(CONFIG_SERIAL_8250) + +static struct plat_serial8250_port uart0_data = +{ + .mapbase = AR7_REGS_UART0, + .irq = AR7_IRQ_UART0, + .regshift = 2, + .iotype = UPIO_MEM, + .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, +}; + +static struct plat_serial8250_port uart1_data = +{ + .mapbase = UR8_REGS_UART1, + .irq = AR7_IRQ_UART1, + .regshift = 2, + .iotype = UPIO_MEM, + .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, +}; + static struct plat_serial8250_port uart_data[] = { - { - .mapbase = AR7_REGS_UART0, - .irq = AR7_IRQ_UART0, - .regshift = 2, - .iotype = UPIO_MEM, - .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, - }, - { - .mapbase = AR7_REGS_UART1, - .irq = AR7_IRQ_UART1, - .regshift = 2, - .iotype = UPIO_MEM, - .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, - }, - { - .flags = 0, - }, + uart0_data, + uart1_data, + { .flags = 0 } +}; + +static struct plat_serial8250_port uart_data_single[] = { + uart0_data, + { .flags = 0 } }; static struct platform_device uart = { .id = 0, .name = "serial8250", - .dev.platform_data = uart_data, + .dev.platform_data = uart_data_single }; #endif @@ -317,7 +327,8 @@ static int __init ar7_register_devices(void) { int res; -#if defined(CONFIG_SERIAL_8250) +#ifdef CONFIG_SERIAL_8250 + static struct uart_port uart_port[2]; memset(uart_port, 0, sizeof(struct uart_port) * 2); @@ -334,24 +345,38 @@ static int __init ar7_register_devices(void) if (res) return res; - uart_port[1].type = PORT_AR7; - uart_port[1].line = 1; - uart_port[1].irq = AR7_IRQ_UART1; - uart_port[1].uartclk = ar7_bus_freq() / 2; - uart_port[1].iotype = UPIO_MEM; - uart_port[1].mapbase = AR7_REGS_UART1; - uart_port[1].membase = ioremap(uart_port[1].mapbase, 256); - uart_port[1].regshift = 2; - res = early_serial_setup(&uart_port[1]); - if (res) - return res; -#else + + // Only TNETD73xx have a second serial port + if (ar7_has_second_uart()) { + uart_port[1].type = PORT_AR7; + uart_port[1].line = 1; + uart_port[1].irq = AR7_IRQ_UART1; + uart_port[1].uartclk = ar7_bus_freq() / 2; + uart_port[1].iotype = UPIO_MEM; + uart_port[1].mapbase = UR8_REGS_UART1; + uart_port[1].membase = ioremap(uart_port[1].mapbase, 256); + uart_port[1].regshift = 2; + res = early_serial_setup(&uart_port[1]); + if (res) + return res; + } + +#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()) { + uart.dev.platform_data = uart_data; + } + res = platform_device_register(&uart); if (res) return res; -#endif + +#endif // CONFIG_SERIAL_8250 + res = platform_device_register(&physmap_flash); if (res) return res; |