]> err.no Git - linux-2.6/blobdiff - arch/mips/sgi-ip32/ip32-platform.c
[MIPS] IP32: Fix initialization of UART base addresses.
[linux-2.6] / arch / mips / sgi-ip32 / ip32-platform.c
index 120b15932caf035ec813e950a897f63c3fa9df14..7309e48d163d1535facc87aef51ee4608ed3f3fc 100644 (file)
@@ -1,5 +1,53 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org)
+ */
+#include <linux/module.h>
 #include <linux/init.h>
 #include <linux/platform_device.h>
+#include <linux/serial_8250.h>
+
+#include <asm/ip32/mace.h>
+#include <asm/ip32/ip32_ints.h>
+
+/*
+ * .iobase isn't a constant (in the sense of C) so we fill it in at runtime.
+ */
+#define MACE_PORT(int)                                                 \
+{                                                                      \
+       .irq            = int,                                          \
+       .uartclk        = 1843200,                                      \
+       .iotype         = UPIO_MEM,                                     \
+       .flags          = UPF_SKIP_TEST,                                \
+       .regshift       = 8,                                            \
+}
+
+static struct plat_serial8250_port uart8250_data[] = {
+       MACE_PORT(MACEISA_SERIAL1_IRQ),
+       MACE_PORT(MACEISA_SERIAL2_IRQ),
+       { },
+};
+
+static struct platform_device uart8250_device = {
+       .name                   = "serial8250",
+       .id                     = PLAT8250_DEV_PLATFORM,
+       .dev                    = {
+               .platform_data  = uart8250_data,
+       },
+};
+
+static int __init uart8250_init(void)
+{
+       uart8250_data[0].membase = (void __iomem *) &mace->isa.serial1;
+       uart8250_data[1].membase = (void __iomem *) &mace->isa.serial1;
+
+       return platform_device_register(&uart8250_device);
+}
+
+device_initcall(uart8250_init);
 
 static __init int meth_devinit(void)
 {
@@ -18,3 +66,7 @@ static __init int meth_devinit(void)
 }
 
 device_initcall(meth_devinit);
+
+MODULE_AUTHOR("Ralf Baechle <ralf@linux-mips.org>");
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("8250 UART probe driver for SGI IP32 aka O2");