diff options
-rw-r--r-- | drivers/serial/8250.c | 9 | ||||
-rw-r--r-- | drivers/serial/serial_core.c | 7 | ||||
-rw-r--r-- | include/linux/serial_8250.h | 1 | ||||
-rw-r--r-- | include/linux/serial_core.h | 2 |
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)) |