Merge tag 'tty-4.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty and serial driver updates from Greg KH: "Here's the large TTY and Serial driver update for 4.7-rc1. A few new serial drivers are added here, and Peter has fixed a bunch of long-standing bugs in the tty layer and serial drivers as normal. Full details in the shortlog. All of these have been in linux-next for a while with no reported issues" * tag 'tty-4.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (88 commits) MAINTAINERS: 8250: remove website reference serial: core: Fix port mutex assert if lockdep disabled serial: 8250_dw: fix wrong logic in dw8250_check_lcr() tty: vt, finish looping on duplicate tty: vt, return error when con_startup fails QE-UART: add "fsl,t1040-ucc-uart" to of_device_id serial: mctrl_gpio: Drop support for out1-gpios and out2-gpios serial: 8250dw: Add device HID for future AMD UART controller Fix OpenSSH pty regression on close serial: mctrl_gpio: add IRQ locking serial: 8250: Integrate Fintek into 8250_base serial: mps2-uart: add support for early console serial: mps2-uart: add MPS2 UART driver dt-bindings: document the MPS2 UART bindings serial: sirf: Use generic uart-has-rtscts DT property serial: sirf: Introduce helper variable struct device_node *np serial: mxs-auart: Use generic uart-has-rtscts DT property serial: imx: Use generic uart-has-rtscts DT property doc: DT: Add Generic Serial Device Tree Bindings serial: 8250: of: Make tegra_serial_handle_break() static ...
此提交包含在:
@@ -1043,17 +1043,13 @@ isdn_tty_change_speed(modem_info *info)
|
||||
if (!(cflag & PARODD))
|
||||
cval |= UART_LCR_EPAR;
|
||||
|
||||
if (cflag & CLOCAL)
|
||||
port->flags &= ~ASYNC_CHECK_CD;
|
||||
else {
|
||||
port->flags |= ASYNC_CHECK_CD;
|
||||
}
|
||||
tty_port_set_check_carrier(port, ~cflag & CLOCAL);
|
||||
}
|
||||
|
||||
static int
|
||||
isdn_tty_startup(modem_info *info)
|
||||
{
|
||||
if (info->port.flags & ASYNC_INITIALIZED)
|
||||
if (tty_port_initialized(&info->port))
|
||||
return 0;
|
||||
isdn_lock_drivers();
|
||||
#ifdef ISDN_DEBUG_MODEM_OPEN
|
||||
@@ -1070,7 +1066,7 @@ isdn_tty_startup(modem_info *info)
|
||||
*/
|
||||
isdn_tty_change_speed(info);
|
||||
|
||||
info->port.flags |= ASYNC_INITIALIZED;
|
||||
tty_port_set_initialized(&info->port, 1);
|
||||
info->msr |= (UART_MSR_DSR | UART_MSR_CTS);
|
||||
info->send_outstanding = 0;
|
||||
return 0;
|
||||
@@ -1083,7 +1079,7 @@ isdn_tty_startup(modem_info *info)
|
||||
static void
|
||||
isdn_tty_shutdown(modem_info *info)
|
||||
{
|
||||
if (!(info->port.flags & ASYNC_INITIALIZED))
|
||||
if (!tty_port_initialized(&info->port))
|
||||
return;
|
||||
#ifdef ISDN_DEBUG_MODEM_OPEN
|
||||
printk(KERN_DEBUG "Shutting down isdnmodem port %d ....\n", info->line);
|
||||
@@ -1103,7 +1099,7 @@ isdn_tty_shutdown(modem_info *info)
|
||||
if (info->port.tty)
|
||||
set_bit(TTY_IO_ERROR, &info->port.tty->flags);
|
||||
|
||||
info->port.flags &= ~ASYNC_INITIALIZED;
|
||||
tty_port_set_initialized(&info->port, 0);
|
||||
}
|
||||
|
||||
/* isdn_tty_write() is the main send-routine. It is called from the upper
|
||||
@@ -1351,7 +1347,7 @@ isdn_tty_tiocmget(struct tty_struct *tty)
|
||||
|
||||
if (isdn_tty_paranoia_check(info, tty->name, __func__))
|
||||
return -ENODEV;
|
||||
if (tty->flags & (1 << TTY_IO_ERROR))
|
||||
if (tty_io_error(tty))
|
||||
return -EIO;
|
||||
|
||||
mutex_lock(&modem_info_mutex);
|
||||
@@ -1378,7 +1374,7 @@ isdn_tty_tiocmset(struct tty_struct *tty,
|
||||
|
||||
if (isdn_tty_paranoia_check(info, tty->name, __func__))
|
||||
return -ENODEV;
|
||||
if (tty->flags & (1 << TTY_IO_ERROR))
|
||||
if (tty_io_error(tty))
|
||||
return -EIO;
|
||||
|
||||
#ifdef ISDN_DEBUG_MODEM_IOCTL
|
||||
@@ -1419,7 +1415,7 @@ isdn_tty_ioctl(struct tty_struct *tty, uint cmd, ulong arg)
|
||||
|
||||
if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_ioctl"))
|
||||
return -ENODEV;
|
||||
if (tty->flags & (1 << TTY_IO_ERROR))
|
||||
if (tty_io_error(tty))
|
||||
return -EIO;
|
||||
switch (cmd) {
|
||||
case TCSBRK: /* SVID version: non-zero arg --> no break */
|
||||
@@ -1581,7 +1577,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
|
||||
* interrupt driver to stop checking the data ready bit in the
|
||||
* line status register.
|
||||
*/
|
||||
if (port->flags & ASYNC_INITIALIZED) {
|
||||
if (tty_port_initialized(port)) {
|
||||
tty_wait_until_sent(tty, 3000); /* 30 seconds timeout */
|
||||
/*
|
||||
* Before we drop DTR, make sure the UART transmitter
|
||||
@@ -1622,7 +1618,7 @@ isdn_tty_hangup(struct tty_struct *tty)
|
||||
return;
|
||||
isdn_tty_shutdown(info);
|
||||
port->count = 0;
|
||||
port->flags &= ~ASYNC_NORMAL_ACTIVE;
|
||||
tty_port_set_active(port, 0);
|
||||
port->tty = NULL;
|
||||
wake_up_interruptible(&port->open_wait);
|
||||
}
|
||||
@@ -1979,7 +1975,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup)
|
||||
#endif
|
||||
if (
|
||||
#ifndef FIX_FILE_TRANSFER
|
||||
(info->port.flags & ASYNC_NORMAL_ACTIVE) &&
|
||||
tty_port_active(&info->port) &&
|
||||
#endif
|
||||
(info->isdn_driver == -1) &&
|
||||
(info->isdn_channel == -1) &&
|
||||
@@ -2018,8 +2014,6 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup)
|
||||
return (wret == 2) ? 3 : 0;
|
||||
}
|
||||
|
||||
#define TTY_IS_ACTIVE(info) (info->port.flags & ASYNC_NORMAL_ACTIVE)
|
||||
|
||||
int
|
||||
isdn_tty_stat_callback(int i, isdn_ctrl *c)
|
||||
{
|
||||
@@ -2077,7 +2071,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
|
||||
#ifdef ISDN_TTY_STAT_DEBUG
|
||||
printk(KERN_DEBUG "tty_STAT_DCONN ttyI%d\n", info->line);
|
||||
#endif
|
||||
if (TTY_IS_ACTIVE(info)) {
|
||||
if (tty_port_active(&info->port)) {
|
||||
if (info->dialing == 1) {
|
||||
info->dialing = 2;
|
||||
return 1;
|
||||
@@ -2088,7 +2082,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
|
||||
#ifdef ISDN_TTY_STAT_DEBUG
|
||||
printk(KERN_DEBUG "tty_STAT_DHUP ttyI%d\n", info->line);
|
||||
#endif
|
||||
if (TTY_IS_ACTIVE(info)) {
|
||||
if (tty_port_active(&info->port)) {
|
||||
if (info->dialing == 1)
|
||||
isdn_tty_modem_result(RESULT_BUSY, info);
|
||||
if (info->dialing > 1)
|
||||
@@ -2118,7 +2112,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
|
||||
* waiting for it and
|
||||
* set DCD-bit of its modem-status.
|
||||
*/
|
||||
if (TTY_IS_ACTIVE(info) ||
|
||||
if (tty_port_active(&info->port) ||
|
||||
(info->port.blocked_open &&
|
||||
(info->emu.mdmreg[REG_DCD] & BIT_DCD))) {
|
||||
info->msr |= UART_MSR_DCD;
|
||||
@@ -2145,7 +2139,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
|
||||
#ifdef ISDN_TTY_STAT_DEBUG
|
||||
printk(KERN_DEBUG "tty_STAT_BHUP ttyI%d\n", info->line);
|
||||
#endif
|
||||
if (TTY_IS_ACTIVE(info)) {
|
||||
if (tty_port_active(&info->port)) {
|
||||
#ifdef ISDN_DEBUG_MODEM_HUP
|
||||
printk(KERN_DEBUG "Mhup in ISDN_STAT_BHUP\n");
|
||||
#endif
|
||||
@@ -2157,7 +2151,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
|
||||
#ifdef ISDN_TTY_STAT_DEBUG
|
||||
printk(KERN_DEBUG "tty_STAT_NODCH ttyI%d\n", info->line);
|
||||
#endif
|
||||
if (TTY_IS_ACTIVE(info)) {
|
||||
if (tty_port_active(&info->port)) {
|
||||
if (info->dialing) {
|
||||
info->dialing = 0;
|
||||
info->last_l2 = -1;
|
||||
@@ -2183,14 +2177,14 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
|
||||
return 1;
|
||||
#ifdef CONFIG_ISDN_TTY_FAX
|
||||
case ISDN_STAT_FAXIND:
|
||||
if (TTY_IS_ACTIVE(info)) {
|
||||
if (tty_port_active(&info->port)) {
|
||||
isdn_tty_fax_command(info, c);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_ISDN_AUDIO
|
||||
case ISDN_STAT_AUDIO:
|
||||
if (TTY_IS_ACTIVE(info)) {
|
||||
if (tty_port_active(&info->port)) {
|
||||
switch (c->parm.num[0]) {
|
||||
case ISDN_AUDIO_DTMF:
|
||||
if (info->vonline) {
|
||||
@@ -2528,7 +2522,7 @@ isdn_tty_modem_result(int code, modem_info *info)
|
||||
if (info->closing || (!info->port.tty))
|
||||
return;
|
||||
|
||||
if (info->port.flags & ASYNC_CHECK_CD)
|
||||
if (tty_port_check_carrier(&info->port))
|
||||
tty_hangup(info->port.tty);
|
||||
}
|
||||
}
|
||||
|
新增問題並參考
封鎖使用者