From 73c22f800643c0309235562f8d08d65c3dbe307a Mon Sep 17 00:00:00 2001 From: David Daney Date: Fri, 2 Jan 2009 13:49:54 +0000 Subject: [PATCH] --- yaml --- r: 125087 b: refs/heads/master c: 8e23fcc89c8091790903927449f8efb9b4e23960 h: refs/heads/master i: 125085: 57f968f7e29889a745f8c2dc5614c43a4c746f40 125083: 1f346726ea2d9e1151a0f7c72f5732118bb973df 125079: 5d95a2fc98a618cc4c041effafc488c1dbe026a2 125071: 42c9b0e0c2e064c7db422efe1722d75232735f66 125055: 776edea0fa6e1ddebdc2dafcf8a416fb8b7ad55c v: v3 --- [refs] | 2 +- trunk/drivers/serial/8250.c | 9 +++++++++ trunk/drivers/serial/serial_core.c | 7 +++++-- trunk/include/linux/serial_8250.h | 1 + trunk/include/linux/serial_core.h | 2 ++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 10a108fabf3d..f1bc72c83957 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7d6a07d123b62bf4fa71867420c23da3ca36c995 +refs/heads/master: 8e23fcc89c8091790903927449f8efb9b4e23960 diff --git a/trunk/drivers/serial/8250.c b/trunk/drivers/serial/8250.c index 849af9d21feb..3ae497422db5 100644 --- a/trunk/drivers/serial/8250.c +++ b/trunk/drivers/serial/8250.c @@ -2903,6 +2903,7 @@ static int __devinit serial8250_probe(struct platform_device *dev) port.mapbase = p->mapbase; port.hub6 = p->hub6; port.private_data = p->private_data; + port.type = p->type; port.serial_in = p->serial_in; port.serial_out = p->serial_out; port.dev = &dev->dev; @@ -3058,6 +3059,14 @@ int serial8250_register_port(struct uart_port *port) uart->port.private_data = port->private_data; 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; + } + set_io_from_upio(&uart->port); /* Possibly override default I/O functions. */ if (port->serial_in) diff --git a/trunk/drivers/serial/serial_core.c b/trunk/drivers/serial/serial_core.c index 9425ed69e0f7..dc68b7e0c930 100644 --- a/trunk/drivers/serial/serial_core.c +++ b/trunk/drivers/serial/serial_core.c @@ -2179,11 +2179,14 @@ uart_configure_port(struct uart_driver *drv, struct uart_state *state, * Now do the auto configuration stuff. Note that config_port * is expected to claim the resources and map the port for us. */ - flags = UART_CONFIG_TYPE; + flags = 0; if (port->flags & UPF_AUTO_IRQ) flags |= UART_CONFIG_IRQ; if (port->flags & UPF_BOOT_AUTOCONF) { - port->type = PORT_UNKNOWN; + if (!(port->flags & UPF_FIXED_TYPE)) { + port->type = PORT_UNKNOWN; + flags |= UART_CONFIG_TYPE; + } port->ops->config_port(port, flags); } diff --git a/trunk/include/linux/serial_8250.h b/trunk/include/linux/serial_8250.h index 77d83d929f2c..d4d2a78ad43e 100644 --- a/trunk/include/linux/serial_8250.h +++ b/trunk/include/linux/serial_8250.h @@ -28,6 +28,7 @@ struct plat_serial8250_port { unsigned char iotype; /* UPIO_* */ unsigned char hub6; upf_t flags; /* UPF_* flags */ + unsigned int type; /* If UPF_FIXED_TYPE */ unsigned int (*serial_in)(struct uart_port *, int); void (*serial_out)(struct uart_port *, int, int); }; diff --git a/trunk/include/linux/serial_core.h b/trunk/include/linux/serial_core.h index 60061f44f3d8..f155252f148c 100644 --- a/trunk/include/linux/serial_core.h +++ b/trunk/include/linux/serial_core.h @@ -295,6 +295,8 @@ struct uart_port { #define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16)) #define UPF_CONS_FLOW ((__force upf_t) (1 << 23)) #define UPF_SHARE_IRQ ((__force upf_t) (1 << 24)) +/* The exact UART type is known and should not be probed. */ +#define UPF_FIXED_TYPE ((__force upf_t) (1 << 27)) #define UPF_BOOT_AUTOCONF ((__force upf_t) (1 << 28)) #define UPF_FIXED_PORT ((__force upf_t) (1 << 29)) #define UPF_DEAD ((__force upf_t) (1 << 30))