aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ar7-2.6/files/arch/mips
diff options
context:
space:
mode:
authorFlorian Fainelli <florian@openwrt.org>2007-07-31 15:52:06 +0000
committerFlorian Fainelli <florian@openwrt.org>2007-07-31 15:52:06 +0000
commitba3a37436e1a1014dd789dd7f6932f05bfec5cb4 (patch)
treec4a6727a97abe1ce1e8059522eab5d61b731cade /target/linux/ar7-2.6/files/arch/mips
parent51dfaf45b432717a7a1b695f1386dbfeacc3ce05 (diff)
downloadupstream-ba3a37436e1a1014dd789dd7f6932f05bfec5cb4.tar.gz
upstream-ba3a37436e1a1014dd789dd7f6932f05bfec5cb4.tar.bz2
upstream-ba3a37436e1a1014dd789dd7f6932f05bfec5cb4.zip
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/mips')
-rw-r--r--target/linux/ar7-2.6/files/arch/mips/ar7/platform.c89
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 b9f7d0e9f9..622f5d2141 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;