[SERIAL] Factor out the common setup from the per-serial port loop.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
1c7c1fe516
commit
72ce9a8333
|
@ -110,8 +110,9 @@ setup_port(struct pci_dev *dev, struct uart_port *port,
|
||||||
if (bar >= PCI_NUM_BAR_RESOURCES)
|
if (bar >= PCI_NUM_BAR_RESOURCES)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
base = pci_resource_start(dev, bar);
|
||||||
|
|
||||||
if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) {
|
if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) {
|
||||||
base = pci_resource_start(dev, bar);
|
|
||||||
len = pci_resource_len(dev, bar);
|
len = pci_resource_len(dev, bar);
|
||||||
|
|
||||||
if (!priv->remapped_bar[bar])
|
if (!priv->remapped_bar[bar])
|
||||||
|
@ -120,13 +121,16 @@ setup_port(struct pci_dev *dev, struct uart_port *port,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
port->iotype = UPIO_MEM;
|
port->iotype = UPIO_MEM;
|
||||||
|
port->iobase = 0;
|
||||||
port->mapbase = base + offset;
|
port->mapbase = base + offset;
|
||||||
port->membase = priv->remapped_bar[bar] + offset;
|
port->membase = priv->remapped_bar[bar] + offset;
|
||||||
port->regshift = regshift;
|
port->regshift = regshift;
|
||||||
} else {
|
} else {
|
||||||
base = pci_resource_start(dev, bar) + offset;
|
|
||||||
port->iotype = UPIO_PORT;
|
port->iotype = UPIO_PORT;
|
||||||
port->iobase = base;
|
port->iobase = base + offset;
|
||||||
|
port->mapbase = 0;
|
||||||
|
port->membase = NULL;
|
||||||
|
port->regshift = 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -991,7 +995,7 @@ static struct pci_serial_quirk *find_quirk(struct pci_dev *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
static _INLINE_ int
|
static _INLINE_ int
|
||||||
get_pci_irq(struct pci_dev *dev, struct pciserial_board *board, int idx)
|
get_pci_irq(struct pci_dev *dev, struct pciserial_board *board)
|
||||||
{
|
{
|
||||||
if (board->flags & FL_NOIRQ)
|
if (board->flags & FL_NOIRQ)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1649,6 +1653,7 @@ serial_pci_matches(struct pciserial_board *board,
|
||||||
static int __devinit
|
static int __devinit
|
||||||
pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
|
pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
|
||||||
{
|
{
|
||||||
|
struct uart_port serial_port;
|
||||||
struct serial_private *priv;
|
struct serial_private *priv;
|
||||||
struct pciserial_board *board, tmp;
|
struct pciserial_board *board, tmp;
|
||||||
struct pci_serial_quirk *quirk;
|
struct pci_serial_quirk *quirk;
|
||||||
|
@ -1731,17 +1736,16 @@ pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
|
||||||
priv->quirk = quirk;
|
priv->quirk = quirk;
|
||||||
pci_set_drvdata(dev, priv);
|
pci_set_drvdata(dev, priv);
|
||||||
|
|
||||||
for (i = 0; i < nr_ports; i++) {
|
memset(&serial_port, 0, sizeof(struct uart_port));
|
||||||
struct uart_port serial_port;
|
serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
|
||||||
memset(&serial_port, 0, sizeof(struct uart_port));
|
serial_port.uartclk = board->base_baud * 16;
|
||||||
|
serial_port.irq = get_pci_irq(dev, board);
|
||||||
|
serial_port.dev = &dev->dev;
|
||||||
|
|
||||||
serial_port.flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF |
|
for (i = 0; i < nr_ports; i++) {
|
||||||
UPF_SHARE_IRQ;
|
|
||||||
serial_port.uartclk = board->base_baud * 16;
|
|
||||||
serial_port.irq = get_pci_irq(dev, board, i);
|
|
||||||
serial_port.dev = &dev->dev;
|
|
||||||
if (quirk->setup(dev, board, &serial_port, i))
|
if (quirk->setup(dev, board, &serial_port, i))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef SERIAL_DEBUG_PCI
|
#ifdef SERIAL_DEBUG_PCI
|
||||||
printk("Setup PCI port: port %x, irq %d, type %d\n",
|
printk("Setup PCI port: port %x, irq %d, type %d\n",
|
||||||
serial_port.iobase, serial_port.irq, serial_port.iotype);
|
serial_port.iobase, serial_port.irq, serial_port.iotype);
|
||||||
|
|
Loading…
Reference in New Issue