aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/serial/8250.c9
-rw-r--r--drivers/serial/serial_core.c7
-rw-r--r--include/linux/serial_8250.h1
-rw-r--r--include/linux/serial_core.h2
4 files changed, 17 insertions, 2 deletions
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index 849af9d21feb..3ae497422db5 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -2903,6 +2903,7 @@ static int __devinit serial8250_probe(struct platform_device *dev)
2903 port.mapbase = p->mapbase; 2903 port.mapbase = p->mapbase;
2904 port.hub6 = p->hub6; 2904 port.hub6 = p->hub6;
2905 port.private_data = p->private_data; 2905 port.private_data = p->private_data;
2906 port.type = p->type;
2906 port.serial_in = p->serial_in; 2907 port.serial_in = p->serial_in;
2907 port.serial_out = p->serial_out; 2908 port.serial_out = p->serial_out;
2908 port.dev = &dev->dev; 2909 port.dev = &dev->dev;
@@ -3058,6 +3059,14 @@ int serial8250_register_port(struct uart_port *port)
3058 uart->port.private_data = port->private_data; 3059 uart->port.private_data = port->private_data;
3059 if (port->dev) 3060 if (port->dev)
3060 uart->port.dev = port->dev; 3061 uart->port.dev = port->dev;
3062
3063 if (port->flags & UPF_FIXED_TYPE) {
3064 uart->port.type = port->type;
3065 uart->port.fifosize = uart_config[port->type].fifo_size;
3066 uart->capabilities = uart_config[port->type].flags;
3067 uart->tx_loadsz = uart_config[port->type].tx_loadsz;
3068 }
3069
3061 set_io_from_upio(&uart->port); 3070 set_io_from_upio(&uart->port);
3062 /* Possibly override default I/O functions. */ 3071 /* Possibly override default I/O functions. */
3063 if (port->serial_in) 3072 if (port->serial_in)
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index 9425ed69e0f7..dc68b7e0c930 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -2179,11 +2179,14 @@ uart_configure_port(struct uart_driver *drv, struct uart_state *state,
2179 * Now do the auto configuration stuff. Note that config_port 2179 * Now do the auto configuration stuff. Note that config_port
2180 * is expected to claim the resources and map the port for us. 2180 * is expected to claim the resources and map the port for us.
2181 */ 2181 */
2182 flags = UART_CONFIG_TYPE; 2182 flags = 0;
2183 if (port->flags & UPF_AUTO_IRQ) 2183 if (port->flags & UPF_AUTO_IRQ)
2184 flags |= UART_CONFIG_IRQ; 2184 flags |= UART_CONFIG_IRQ;
2185 if (port->flags & UPF_BOOT_AUTOCONF) { 2185 if (port->flags & UPF_BOOT_AUTOCONF) {
2186 port->type = PORT_UNKNOWN; 2186 if (!(port->flags & UPF_FIXED_TYPE)) {
2187 port->type = PORT_UNKNOWN;
2188 flags |= UART_CONFIG_TYPE;
2189 }
2187 port->ops->config_port(port, flags); 2190 port->ops->config_port(port, flags);
2188 } 2191 }
2189 2192
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h
index 77d83d929f2c..d4d2a78ad43e 100644
--- a/include/linux/serial_8250.h
+++ b/include/linux/serial_8250.h
@@ -28,6 +28,7 @@ struct plat_serial8250_port {
28 unsigned char iotype; /* UPIO_* */ 28 unsigned char iotype; /* UPIO_* */
29 unsigned char hub6; 29 unsigned char hub6;
30 upf_t flags; /* UPF_* flags */ 30 upf_t flags; /* UPF_* flags */
31 unsigned int type; /* If UPF_FIXED_TYPE */
31 unsigned int (*serial_in)(struct uart_port *, int); 32 unsigned int (*serial_in)(struct uart_port *, int);
32 void (*serial_out)(struct uart_port *, int, int); 33 void (*serial_out)(struct uart_port *, int, int);
33}; 34};
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index 60061f44f3d8..f155252f148c 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -295,6 +295,8 @@ struct uart_port {
295#define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16)) 295#define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16))
296#define UPF_CONS_FLOW ((__force upf_t) (1 << 23)) 296#define UPF_CONS_FLOW ((__force upf_t) (1 << 23))
297#define UPF_SHARE_IRQ ((__force upf_t) (1 << 24)) 297#define UPF_SHARE_IRQ ((__force upf_t) (1 << 24))
298/* The exact UART type is known and should not be probed. */
299#define UPF_FIXED_TYPE ((__force upf_t) (1 << 27))
298#define UPF_BOOT_AUTOCONF ((__force upf_t) (1 << 28)) 300#define UPF_BOOT_AUTOCONF ((__force upf_t) (1 << 28))
299#define UPF_FIXED_PORT ((__force upf_t) (1 << 29)) 301#define UPF_FIXED_PORT ((__force upf_t) (1 << 29))
300#define UPF_DEAD ((__force upf_t) (1 << 30)) 302#define UPF_DEAD ((__force upf_t) (1 << 30))