serial: copy UART properties of UPF_FIXED_TYPE ports provisioned using early_serial_setup
[pandora-kernel.git] / drivers / serial / 8250.c
index e9b15c3..7c4ebe6 100644 (file)
@@ -1217,12 +1217,6 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
        }
 #endif
 
-#ifdef CONFIG_SERIAL_8250_AU1X00
-       /* if access method is AU, it is a 16550 with a quirk */
-       if (up->port.type == PORT_16550A && up->port.iotype == UPIO_AU)
-               up->bugs |= UART_BUG_NOMSR;
-#endif
-
        serial_outp(up, UART_LCR, save_lcr);
 
        if (up->capabilities != uart_config[up->port.type].flags) {
@@ -2428,7 +2422,7 @@ serial8250_pm(struct uart_port *port, unsigned int state,
 static unsigned int serial8250_port_size(struct uart_8250_port *pt)
 {
        if (pt->port.iotype == UPIO_AU)
-               return 0x100000;
+               return 0x1000;
 #ifdef CONFIG_ARCH_OMAP
        if (is_omap_port(pt))
                return 0x16 << pt->port.regshift;
@@ -2585,6 +2579,13 @@ static void serial8250_config_port(struct uart_port *port, int flags)
 
        if (flags & UART_CONFIG_TYPE)
                autoconfig(up, probeflags);
+
+#ifdef CONFIG_SERIAL_8250_AU1X00
+       /* if access method is AU, it is a 16550 with a quirk */
+       if (up->port.type == PORT_16550A && up->port.iotype == UPIO_AU)
+               up->bugs |= UART_BUG_NOMSR;
+#endif
+
        if (up->port.type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ)
                autoconfig_irq(up);
 
@@ -2689,6 +2690,15 @@ static void __init serial8250_isa_init_ports(void)
        }
 }
 
+static void
+serial8250_init_fixed_type_port(struct uart_8250_port *up, unsigned int type)
+{
+       up->port.type = type;
+       up->port.fifosize = uart_config[type].fifo_size;
+       up->capabilities = uart_config[type].flags;
+       up->tx_loadsz = uart_config[type].tx_loadsz;
+}
+
 static void __init
 serial8250_register_ports(struct uart_driver *drv, struct device *dev)
 {
@@ -2705,6 +2715,10 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev)
                struct uart_8250_port *up = &serial8250_ports[i];
 
                up->port.dev = dev;
+
+               if (up->port.flags & UPF_FIXED_TYPE)
+                       serial8250_init_fixed_type_port(up, up->port.type);
+
                uart_add_one_port(drv, &up->port);
        }
 }
@@ -3117,12 +3131,8 @@ int serial8250_register_port(struct uart_port *port)
                if (port->dev)
                        uart->port.dev = port->dev;
 
-               if (port->flags & UPF_FIXED_TYPE) {
-                       uart->port.type = port->type;
-                       uart->port.fifosize = uart_config[port->type].fifo_size;
-                       uart->capabilities = uart_config[port->type].flags;
-                       uart->tx_loadsz = uart_config[port->type].tx_loadsz;
-               }
+               if (port->flags & UPF_FIXED_TYPE)
+                       serial8250_init_fixed_type_port(uart, port->type);
 
                set_io_from_upio(&uart->port);
                /* Possibly override default I/O functions.  */