ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / serial / bast_sio.c
1 #include <linux/module.h>
2 #include <linux/config.h>
3 #include <linux/kernel.h>
4 #include <linux/init.h>
5 #include <linux/tty.h>
6 #include <linux/serial.h>
7 #include <linux/serial_core.h>
8 #include <linux/types.h>
9
10 #include <asm/io.h>
11 #include <asm/serial.h>
12 #include <asm/mach-types.h>
13
14 #include <asm/arch/map.h>
15 #include <asm/arch/irqs.h>
16 #include <asm/arch/bast-map.h>
17 #include <asm/arch/bast-irq.h>
18
19 static int __init serial_bast_register(unsigned long port, unsigned int irq)
20 {
21         struct serial_struct serial_req;
22
23 #if 0
24         printk("BAST: SuperIO serial (%08lx,%d)\n", port, irq);
25 #endif
26
27         serial_req.flags      = UPF_AUTOPROBE | UPF_RESOURCES | UPF_SHARE_IRQ;
28         serial_req.baud_base  = BASE_BAUD;
29         serial_req.irq        = irq;
30         serial_req.io_type    = UPIO_MEM;
31         serial_req.iomap_base = port;
32         serial_req.iomem_base = ioremap(port, 0x10);
33         serial_req.iomem_reg_shift = 0;
34
35         return register_serial(&serial_req);
36 }
37
38 #define SERIAL_BASE (S3C2410_CS2 + BAST_PA_SUPERIO)
39
40 static int __init serial_bast_init(void)
41 {
42         if (machine_is_bast()) {
43                 serial_bast_register(SERIAL_BASE + 0x2f8, IRQ_PCSERIAL1);
44                 serial_bast_register(SERIAL_BASE + 0x3f8, IRQ_PCSERIAL2);
45         }
46
47         return 0;
48 }
49
50 static void __exit serial_bast_exit(void)
51 {
52         /* todo -> remove both our ports */
53 }
54
55
56 module_init(serial_bast_init);
57 module_exit(serial_bast_exit);
58
59 MODULE_LICENSE("GPL");
60 MODULE_AUTHOR("Ben Dooks, ben@simtec.co.uk");
61 MODULE_DESCRIPTION("BAST Onboard Serial setup");
62
63