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");