Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'tty-3.19-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty

Pull tty/serial driver fixes from Greg KH:
"Here are some tty and serial driver fixes for 3.19-rc5 that resolve
some reported issues, and add a new device id to the 8250 serial port
driver.

All have been in linux-next with no reported problems"

* tag 'tty-3.19-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
serial: samsung: Add the support for Exynos5433 SoC
Revert "tty: Fix pty master poll() after slave closes v2"
tty: Prevent hw state corruption in exclusive mode reopen
tty: Add support for the WCH384 4S multi-IO card
serial: fix parisc boot hang

+70 -35
+2 -7
drivers/tty/n_tty.c
··· 2399 2399 2400 2400 poll_wait(file, &tty->read_wait, wait); 2401 2401 poll_wait(file, &tty->write_wait, wait); 2402 - if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) 2403 - mask |= POLLHUP; 2404 2402 if (input_available_p(tty, 1)) 2405 2403 mask |= POLLIN | POLLRDNORM; 2406 - else if (mask & POLLHUP) { 2407 - tty_flush_to_ldisc(tty); 2408 - if (input_available_p(tty, 1)) 2409 - mask |= POLLIN | POLLRDNORM; 2410 - } 2411 2404 if (tty->packet && tty->link->ctrl_status) 2412 2405 mask |= POLLPRI | POLLIN | POLLRDNORM; 2406 + if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) 2407 + mask |= POLLHUP; 2413 2408 if (tty_hung_up_p(file)) 2414 2409 mask |= POLLHUP; 2415 2410 if (!(mask & (POLLHUP | POLLIN | POLLRDNORM))) {
+26 -3
drivers/tty/serial/8250/8250_pci.c
··· 1815 1815 } 1816 1816 1817 1817 static int 1818 - pci_wch_ch382_setup(struct serial_private *priv, 1818 + pci_wch_ch38x_setup(struct serial_private *priv, 1819 1819 const struct pciserial_board *board, 1820 1820 struct uart_8250_port *port, int idx) 1821 1821 { ··· 1880 1880 1881 1881 #define PCIE_VENDOR_ID_WCH 0x1c00 1882 1882 #define PCIE_DEVICE_ID_WCH_CH382_2S1P 0x3250 1883 + #define PCIE_DEVICE_ID_WCH_CH384_4S 0x3470 1883 1884 1884 1885 /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ 1885 1886 #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 ··· 2572 2571 .subdevice = PCI_ANY_ID, 2573 2572 .setup = pci_wch_ch353_setup, 2574 2573 }, 2575 - /* WCH CH382 2S1P card (16750 clone) */ 2574 + /* WCH CH382 2S1P card (16850 clone) */ 2576 2575 { 2577 2576 .vendor = PCIE_VENDOR_ID_WCH, 2578 2577 .device = PCIE_DEVICE_ID_WCH_CH382_2S1P, 2579 2578 .subvendor = PCI_ANY_ID, 2580 2579 .subdevice = PCI_ANY_ID, 2581 - .setup = pci_wch_ch382_setup, 2580 + .setup = pci_wch_ch38x_setup, 2581 + }, 2582 + /* WCH CH384 4S card (16850 clone) */ 2583 + { 2584 + .vendor = PCIE_VENDOR_ID_WCH, 2585 + .device = PCIE_DEVICE_ID_WCH_CH384_4S, 2586 + .subvendor = PCI_ANY_ID, 2587 + .subdevice = PCI_ANY_ID, 2588 + .setup = pci_wch_ch38x_setup, 2582 2589 }, 2583 2590 /* 2584 2591 * ASIX devices with FIFO bug ··· 2885 2876 pbn_fintek_4, 2886 2877 pbn_fintek_8, 2887 2878 pbn_fintek_12, 2879 + pbn_wch384_4, 2888 2880 }; 2889 2881 2890 2882 /* ··· 3685 3675 .base_baud = 115200, 3686 3676 .first_offset = 0x40, 3687 3677 }, 3678 + 3679 + [pbn_wch384_4] = { 3680 + .flags = FL_BASE0, 3681 + .num_ports = 4, 3682 + .base_baud = 115200, 3683 + .uart_offset = 8, 3684 + .first_offset = 0xC0, 3685 + }, 3688 3686 }; 3689 3687 3690 3688 static const struct pci_device_id blacklist[] = { ··· 3705 3687 { PCI_DEVICE(0x4348, 0x7053), }, /* WCH CH353 2S1P */ 3706 3688 { PCI_DEVICE(0x4348, 0x5053), }, /* WCH CH353 1S1P */ 3707 3689 { PCI_DEVICE(0x1c00, 0x3250), }, /* WCH CH382 2S1P */ 3690 + { PCI_DEVICE(0x1c00, 0x3470), }, /* WCH CH384 4S */ 3708 3691 }; 3709 3692 3710 3693 /* ··· 5418 5399 { PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH352_2S, 5419 5400 PCI_ANY_ID, PCI_ANY_ID, 5420 5401 0, 0, pbn_b0_bt_2_115200 }, 5402 + 5403 + { PCIE_VENDOR_ID_WCH, PCIE_DEVICE_ID_WCH_CH384_4S, 5404 + PCI_ANY_ID, PCI_ANY_ID, 5405 + 0, 0, pbn_wch384_4 }, 5421 5406 5422 5407 /* 5423 5408 * Commtech, Inc. Fastcom adapters
+36 -20
drivers/tty/serial/samsung.c
··· 1757 1757 #endif 1758 1758 1759 1759 #if defined(CONFIG_ARCH_EXYNOS) 1760 + #define EXYNOS_COMMON_SERIAL_DRV_DATA \ 1761 + .info = &(struct s3c24xx_uart_info) { \ 1762 + .name = "Samsung Exynos UART", \ 1763 + .type = PORT_S3C6400, \ 1764 + .has_divslot = 1, \ 1765 + .rx_fifomask = S5PV210_UFSTAT_RXMASK, \ 1766 + .rx_fifoshift = S5PV210_UFSTAT_RXSHIFT, \ 1767 + .rx_fifofull = S5PV210_UFSTAT_RXFULL, \ 1768 + .tx_fifofull = S5PV210_UFSTAT_TXFULL, \ 1769 + .tx_fifomask = S5PV210_UFSTAT_TXMASK, \ 1770 + .tx_fifoshift = S5PV210_UFSTAT_TXSHIFT, \ 1771 + .def_clk_sel = S3C2410_UCON_CLKSEL0, \ 1772 + .num_clks = 1, \ 1773 + .clksel_mask = 0, \ 1774 + .clksel_shift = 0, \ 1775 + }, \ 1776 + .def_cfg = &(struct s3c2410_uartcfg) { \ 1777 + .ucon = S5PV210_UCON_DEFAULT, \ 1778 + .ufcon = S5PV210_UFCON_DEFAULT, \ 1779 + .has_fracval = 1, \ 1780 + } \ 1781 + 1760 1782 static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = { 1761 - .info = &(struct s3c24xx_uart_info) { 1762 - .name = "Samsung Exynos4 UART", 1763 - .type = PORT_S3C6400, 1764 - .has_divslot = 1, 1765 - .rx_fifomask = S5PV210_UFSTAT_RXMASK, 1766 - .rx_fifoshift = S5PV210_UFSTAT_RXSHIFT, 1767 - .rx_fifofull = S5PV210_UFSTAT_RXFULL, 1768 - .tx_fifofull = S5PV210_UFSTAT_TXFULL, 1769 - .tx_fifomask = S5PV210_UFSTAT_TXMASK, 1770 - .tx_fifoshift = S5PV210_UFSTAT_TXSHIFT, 1771 - .def_clk_sel = S3C2410_UCON_CLKSEL0, 1772 - .num_clks = 1, 1773 - .clksel_mask = 0, 1774 - .clksel_shift = 0, 1775 - }, 1776 - .def_cfg = &(struct s3c2410_uartcfg) { 1777 - .ucon = S5PV210_UCON_DEFAULT, 1778 - .ufcon = S5PV210_UFCON_DEFAULT, 1779 - .has_fracval = 1, 1780 - }, 1783 + EXYNOS_COMMON_SERIAL_DRV_DATA, 1781 1784 .fifosize = { 256, 64, 16, 16 }, 1782 1785 }; 1786 + 1787 + static struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = { 1788 + EXYNOS_COMMON_SERIAL_DRV_DATA, 1789 + .fifosize = { 64, 256, 16, 256 }, 1790 + }; 1791 + 1783 1792 #define EXYNOS4210_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos4210_serial_drv_data) 1793 + #define EXYNOS5433_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos5433_serial_drv_data) 1784 1794 #else 1785 1795 #define EXYNOS4210_SERIAL_DRV_DATA (kernel_ulong_t)NULL 1796 + #define EXYNOS5433_SERIAL_DRV_DATA (kernel_ulong_t)NULL 1786 1797 #endif 1787 1798 1788 1799 static struct platform_device_id s3c24xx_serial_driver_ids[] = { ··· 1815 1804 }, { 1816 1805 .name = "exynos4210-uart", 1817 1806 .driver_data = EXYNOS4210_SERIAL_DRV_DATA, 1807 + }, { 1808 + .name = "exynos5433-uart", 1809 + .driver_data = EXYNOS5433_SERIAL_DRV_DATA, 1818 1810 }, 1819 1811 { }, 1820 1812 }; ··· 1837 1823 .data = (void *)S5PV210_SERIAL_DRV_DATA }, 1838 1824 { .compatible = "samsung,exynos4210-uart", 1839 1825 .data = (void *)EXYNOS4210_SERIAL_DRV_DATA }, 1826 + { .compatible = "samsung,exynos5433-uart", 1827 + .data = (void *)EXYNOS5433_SERIAL_DRV_DATA }, 1840 1828 {}, 1841 1829 }; 1842 1830 MODULE_DEVICE_TABLE(of, s3c24xx_uart_dt_match);
+3 -1
drivers/tty/serial/serial_core.c
··· 2164 2164 break; 2165 2165 } 2166 2166 2167 - dev_info(port->dev, "%s%d at %s (irq = %d, base_baud = %d) is a %s\n", 2167 + printk(KERN_INFO "%s%s%s%d at %s (irq = %d, base_baud = %d) is a %s\n", 2168 + port->dev ? dev_name(port->dev) : "", 2169 + port->dev ? ": " : "", 2168 2170 drv->dev_name, 2169 2171 drv->tty_driver->name_base + port->line, 2170 2172 address, port->irq, port->uartclk / 16, uart_type(port));
+3 -4
drivers/tty/tty_io.c
··· 1464 1464 driver->subtype == PTY_TYPE_MASTER) 1465 1465 return -EIO; 1466 1466 1467 + if (test_bit(TTY_EXCLUSIVE, &tty->flags) && !capable(CAP_SYS_ADMIN)) 1468 + return -EBUSY; 1469 + 1467 1470 tty->count++; 1468 1471 1469 1472 WARN_ON(!tty->ldisc); ··· 2108 2105 else 2109 2106 retval = -ENODEV; 2110 2107 filp->f_flags = saved_flags; 2111 - 2112 - if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) && 2113 - !capable(CAP_SYS_ADMIN)) 2114 - retval = -EBUSY; 2115 2108 2116 2109 if (retval) { 2117 2110 #ifdef TTY_DEBUG_HANGUP