2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
6 * Copyright (C) 2007 Aurelien Jarno <aurelien@aurel32.net>
9 #include <linux/module.h>
10 #include <linux/init.h>
11 #include <linux/serial.h>
12 #include <linux/serial_8250.h>
13 #include <linux/ssb/ssb.h>
16 static struct plat_serial8250_port uart8250_data
[5];
18 static struct platform_device uart8250_device
= {
20 .id
= PLAT8250_DEV_PLATFORM
,
22 .platform_data
= uart8250_data
,
26 #ifdef CONFIG_BCM47XX_SSB
27 static int __init
uart8250_init_ssb(void)
30 struct ssb_mipscore
*mcore
= &(bcm47xx_bus
.ssb
.mipscore
);
32 memset(&uart8250_data
, 0, sizeof(uart8250_data
));
34 for (i
= 0; i
< mcore
->nr_serial_ports
; i
++) {
35 struct plat_serial8250_port
*p
= &(uart8250_data
[i
]);
36 struct ssb_serial_port
*ssb_port
= &(mcore
->serial_ports
[i
]);
38 p
->mapbase
= (unsigned int) ssb_port
->regs
;
39 p
->membase
= (void *) ssb_port
->regs
;
40 p
->irq
= ssb_port
->irq
+ 2;
41 p
->uartclk
= ssb_port
->baud_base
;
42 p
->regshift
= ssb_port
->reg_shift
;
44 p
->flags
= UPF_BOOT_AUTOCONF
| UPF_SHARE_IRQ
;
46 return platform_device_register(&uart8250_device
);
50 #ifdef CONFIG_BCM47XX_BCMA
51 static int __init
uart8250_init_bcma(void)
54 struct bcma_drv_cc
*cc
= &(bcm47xx_bus
.bcma
.bus
.drv_cc
);
56 memset(&uart8250_data
, 0, sizeof(uart8250_data
));
58 for (i
= 0; i
< cc
->nr_serial_ports
; i
++) {
59 struct plat_serial8250_port
*p
= &(uart8250_data
[i
]);
60 struct bcma_serial_port
*bcma_port
;
61 bcma_port
= &(cc
->serial_ports
[i
]);
63 p
->mapbase
= (unsigned int) bcma_port
->regs
;
64 p
->membase
= (void *) bcma_port
->regs
;
65 p
->irq
= bcma_port
->irq
+ 2;
66 p
->uartclk
= bcma_port
->baud_base
;
67 p
->regshift
= bcma_port
->reg_shift
;
69 p
->flags
= UPF_BOOT_AUTOCONF
| UPF_SHARE_IRQ
;
71 return platform_device_register(&uart8250_device
);
75 static int __init
uart8250_init(void)
77 switch (bcm47xx_bus_type
) {
78 #ifdef CONFIG_BCM47XX_SSB
79 case BCM47XX_BUS_TYPE_SSB
:
80 return uart8250_init_ssb();
82 #ifdef CONFIG_BCM47XX_BCMA
83 case BCM47XX_BUS_TYPE_BCMA
:
84 return uart8250_init_bcma();
90 module_init(uart8250_init
);
92 MODULE_AUTHOR("Aurelien Jarno <aurelien@aurel32.net>");
93 MODULE_LICENSE("GPL");
94 MODULE_DESCRIPTION("8250 UART probe driver for the BCM47XX platforms");