diff options
| -rw-r--r-- | Documentation/devicetree/bindings/tty/serial/of-serial.txt | 3 | ||||
| -rw-r--r-- | drivers/tty/serial/8250/8250.c | 52 | ||||
| -rw-r--r-- | drivers/tty/serial/8250/8250_pci.c | 21 | ||||
| -rw-r--r-- | drivers/tty/serial/8250/8250_pnp.c | 12 | ||||
| -rw-r--r-- | drivers/tty/serial/Kconfig | 4 | ||||
| -rw-r--r-- | drivers/tty/serial/bcm63xx_uart.c | 8 | ||||
| -rw-r--r-- | drivers/tty/serial/mpc52xx_uart.c | 2 | ||||
| -rw-r--r-- | drivers/tty/serial/of_serial.c | 6 | ||||
| -rw-r--r-- | drivers/tty/serial/vt8500_serial.c | 9 | ||||
| -rw-r--r-- | drivers/tty/tty_buffer.c | 2 | ||||
| -rw-r--r-- | include/uapi/linux/serial_core.h | 5 |
11 files changed, 91 insertions, 33 deletions
diff --git a/Documentation/devicetree/bindings/tty/serial/of-serial.txt b/Documentation/devicetree/bindings/tty/serial/of-serial.txt index 1e1145ca4f3c..8f01cb190f25 100644 --- a/Documentation/devicetree/bindings/tty/serial/of-serial.txt +++ b/Documentation/devicetree/bindings/tty/serial/of-serial.txt | |||
| @@ -11,6 +11,9 @@ Required properties: | |||
| 11 | - "nvidia,tegra20-uart" | 11 | - "nvidia,tegra20-uart" |
| 12 | - "nxp,lpc3220-uart" | 12 | - "nxp,lpc3220-uart" |
| 13 | - "ibm,qpace-nwp-serial" | 13 | - "ibm,qpace-nwp-serial" |
| 14 | - "altr,16550-FIFO32" | ||
| 15 | - "altr,16550-FIFO64" | ||
| 16 | - "altr,16550-FIFO128" | ||
| 14 | - "serial" if the port type is unknown. | 17 | - "serial" if the port type is unknown. |
| 15 | - reg : offset and length of the register set for the device. | 18 | - reg : offset and length of the register set for the device. |
| 16 | - interrupts : should contain uart interrupt. | 19 | - interrupts : should contain uart interrupt. |
diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c index 0efc815a4968..cf6a5383748a 100644 --- a/drivers/tty/serial/8250/8250.c +++ b/drivers/tty/serial/8250/8250.c | |||
| @@ -301,7 +301,28 @@ static const struct serial8250_config uart_config[] = { | |||
| 301 | }, | 301 | }, |
| 302 | [PORT_8250_CIR] = { | 302 | [PORT_8250_CIR] = { |
| 303 | .name = "CIR port" | 303 | .name = "CIR port" |
| 304 | } | 304 | }, |
| 305 | [PORT_ALTR_16550_F32] = { | ||
| 306 | .name = "Altera 16550 FIFO32", | ||
| 307 | .fifo_size = 32, | ||
| 308 | .tx_loadsz = 32, | ||
| 309 | .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, | ||
| 310 | .flags = UART_CAP_FIFO | UART_CAP_AFE, | ||
| 311 | }, | ||
| 312 | [PORT_ALTR_16550_F64] = { | ||
| 313 | .name = "Altera 16550 FIFO64", | ||
| 314 | .fifo_size = 64, | ||
| 315 | .tx_loadsz = 64, | ||
| 316 | .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, | ||
| 317 | .flags = UART_CAP_FIFO | UART_CAP_AFE, | ||
| 318 | }, | ||
| 319 | [PORT_ALTR_16550_F128] = { | ||
| 320 | .name = "Altera 16550 FIFO128", | ||
| 321 | .fifo_size = 128, | ||
| 322 | .tx_loadsz = 128, | ||
| 323 | .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, | ||
| 324 | .flags = UART_CAP_FIFO | UART_CAP_AFE, | ||
| 325 | }, | ||
| 305 | }; | 326 | }; |
| 306 | 327 | ||
| 307 | /* Uart divisor latch read */ | 328 | /* Uart divisor latch read */ |
| @@ -3396,3 +3417,32 @@ module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444); | |||
| 3396 | MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA"); | 3417 | MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA"); |
| 3397 | #endif | 3418 | #endif |
| 3398 | MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR); | 3419 | MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR); |
| 3420 | |||
| 3421 | #ifndef MODULE | ||
| 3422 | /* This module was renamed to 8250_core in 3.7. Keep the old "8250" name | ||
| 3423 | * working as well for the module options so we don't break people. We | ||
| 3424 | * need to keep the names identical and the convenient macros will happily | ||
| 3425 | * refuse to let us do that by failing the build with redefinition errors | ||
| 3426 | * of global variables. So we stick them inside a dummy function to avoid | ||
| 3427 | * those conflicts. The options still get parsed, and the redefined | ||
| 3428 | * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive. | ||
| 3429 | * | ||
| 3430 | * This is hacky. I'm sorry. | ||
| 3431 | */ | ||
| 3432 | static void __used s8250_options(void) | ||
| 3433 | { | ||
| 3434 | #undef MODULE_PARAM_PREFIX | ||
| 3435 | #define MODULE_PARAM_PREFIX "8250." | ||
| 3436 | |||
| 3437 | module_param_cb(share_irqs, ¶m_ops_uint, &share_irqs, 0644); | ||
| 3438 | module_param_cb(nr_uarts, ¶m_ops_uint, &nr_uarts, 0644); | ||
| 3439 | module_param_cb(skip_txen_test, ¶m_ops_uint, &skip_txen_test, 0644); | ||
| 3440 | #ifdef CONFIG_SERIAL_8250_RSA | ||
| 3441 | __module_param_call(MODULE_PARAM_PREFIX, probe_rsa, | ||
| 3442 | ¶m_array_ops, .arr = &__param_arr_probe_rsa, | ||
| 3443 | 0444, -1); | ||
| 3444 | #endif | ||
| 3445 | } | ||
| 3446 | #else | ||
| 3447 | MODULE_ALIAS("8250"); | ||
| 3448 | #endif | ||
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c index 791c5a77ec61..aa76825229dc 100644 --- a/drivers/tty/serial/8250/8250_pci.c +++ b/drivers/tty/serial/8250/8250_pci.c | |||
| @@ -1571,6 +1571,7 @@ pci_wch_ch353_setup(struct serial_private *priv, | |||
| 1571 | 1571 | ||
| 1572 | /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ | 1572 | /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ |
| 1573 | #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 | 1573 | #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 |
| 1574 | #define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588 | ||
| 1574 | 1575 | ||
| 1575 | /* | 1576 | /* |
| 1576 | * Master list of serial port init/setup/exit quirks. | 1577 | * Master list of serial port init/setup/exit quirks. |
| @@ -1852,15 +1853,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | |||
| 1852 | }, | 1853 | }, |
| 1853 | { | 1854 | { |
| 1854 | .vendor = PCI_VENDOR_ID_PLX, | 1855 | .vendor = PCI_VENDOR_ID_PLX, |
| 1855 | .device = PCI_DEVICE_ID_PLX_9050, | ||
| 1856 | .subvendor = PCI_VENDOR_ID_PLX, | ||
| 1857 | .subdevice = PCI_SUBDEVICE_ID_UNKNOWN_0x1584, | ||
| 1858 | .init = pci_plx9050_init, | ||
| 1859 | .setup = pci_default_setup, | ||
| 1860 | .exit = pci_plx9050_exit, | ||
| 1861 | }, | ||
| 1862 | { | ||
| 1863 | .vendor = PCI_VENDOR_ID_PLX, | ||
| 1864 | .device = PCI_DEVICE_ID_PLX_ROMULUS, | 1856 | .device = PCI_DEVICE_ID_PLX_ROMULUS, |
| 1865 | .subvendor = PCI_VENDOR_ID_PLX, | 1857 | .subvendor = PCI_VENDOR_ID_PLX, |
| 1866 | .subdevice = PCI_DEVICE_ID_PLX_ROMULUS, | 1858 | .subdevice = PCI_DEVICE_ID_PLX_ROMULUS, |
| @@ -3733,7 +3725,12 @@ static struct pci_device_id serial_pci_tbl[] = { | |||
| 3733 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | 3725 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, |
| 3734 | PCI_VENDOR_ID_PLX, | 3726 | PCI_VENDOR_ID_PLX, |
| 3735 | PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0, | 3727 | PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0, |
| 3736 | pbn_b0_4_115200 }, | 3728 | pbn_b2_4_115200 }, |
| 3729 | /* Unknown card - subdevice 0x1588 */ | ||
| 3730 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | ||
| 3731 | PCI_VENDOR_ID_PLX, | ||
| 3732 | PCI_SUBDEVICE_ID_UNKNOWN_0x1588, 0, 0, | ||
| 3733 | pbn_b2_8_115200 }, | ||
| 3737 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | 3734 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, |
| 3738 | PCI_SUBVENDOR_ID_KEYSPAN, | 3735 | PCI_SUBVENDOR_ID_KEYSPAN, |
| 3739 | PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0, | 3736 | PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0, |
| @@ -4791,6 +4788,10 @@ static struct pci_device_id serial_pci_tbl[] = { | |||
| 4791 | PCI_VENDOR_ID_IBM, 0x0299, | 4788 | PCI_VENDOR_ID_IBM, 0x0299, |
| 4792 | 0, 0, pbn_b0_bt_2_115200 }, | 4789 | 0, 0, pbn_b0_bt_2_115200 }, |
| 4793 | 4790 | ||
| 4791 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9835, | ||
| 4792 | 0x1000, 0x0012, | ||
| 4793 | 0, 0, pbn_b0_bt_2_115200 }, | ||
| 4794 | |||
| 4794 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901, | 4795 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901, |
| 4795 | 0xA000, 0x1000, | 4796 | 0xA000, 0x1000, |
| 4796 | 0, 0, pbn_b0_1_115200 }, | 4797 | 0, 0, pbn_b0_1_115200 }, |
diff --git a/drivers/tty/serial/8250/8250_pnp.c b/drivers/tty/serial/8250/8250_pnp.c index 35d9ab95c5cb..b3455a970a1d 100644 --- a/drivers/tty/serial/8250/8250_pnp.c +++ b/drivers/tty/serial/8250/8250_pnp.c | |||
| @@ -429,6 +429,7 @@ serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) | |||
| 429 | { | 429 | { |
| 430 | struct uart_8250_port uart; | 430 | struct uart_8250_port uart; |
| 431 | int ret, line, flags = dev_id->driver_data; | 431 | int ret, line, flags = dev_id->driver_data; |
| 432 | struct resource *res = NULL; | ||
| 432 | 433 | ||
| 433 | if (flags & UNKNOWN_DEV) { | 434 | if (flags & UNKNOWN_DEV) { |
| 434 | ret = serial_pnp_guess_board(dev); | 435 | ret = serial_pnp_guess_board(dev); |
| @@ -439,11 +440,12 @@ serial_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) | |||
| 439 | memset(&uart, 0, sizeof(uart)); | 440 | memset(&uart, 0, sizeof(uart)); |
| 440 | if (pnp_irq_valid(dev, 0)) | 441 | if (pnp_irq_valid(dev, 0)) |
| 441 | uart.port.irq = pnp_irq(dev, 0); | 442 | uart.port.irq = pnp_irq(dev, 0); |
| 442 | if ((flags & CIR_PORT) && pnp_port_valid(dev, 2)) { | 443 | if ((flags & CIR_PORT) && pnp_port_valid(dev, 2)) |
| 443 | uart.port.iobase = pnp_port_start(dev, 2); | 444 | res = pnp_get_resource(dev, IORESOURCE_IO, 2); |
| 444 | uart.port.iotype = UPIO_PORT; | 445 | else if (pnp_port_valid(dev, 0)) |
| 445 | } else if (pnp_port_valid(dev, 0)) { | 446 | res = pnp_get_resource(dev, IORESOURCE_IO, 0); |
| 446 | uart.port.iobase = pnp_port_start(dev, 0); | 447 | if (pnp_resource_enabled(res)) { |
| 448 | uart.port.iobase = res->start; | ||
| 447 | uart.port.iotype = UPIO_PORT; | 449 | uart.port.iotype = UPIO_PORT; |
