提交 09db9d63 编写于 作者: L Linus Torvalds

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

Pull tty/serial fixes from Greg KH:
 "Here are 3 patches for 3.17-rc5.  Two serial driver fixes that resolve
  some reported issues, and one new device id.

  All have been in linux-next just fine"

* tag 'tty-3.17-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
  tty: xuartps: Fix tx_emtpy() callback
  tty/serial: at91: BUG: disable interrupts when !UART_ENABLE_MS()
  serial: 8250_dw: Add ACPI ID for Intel Braswell
...@@ -540,6 +540,7 @@ static const struct acpi_device_id dw8250_acpi_match[] = { ...@@ -540,6 +540,7 @@ static const struct acpi_device_id dw8250_acpi_match[] = {
{ "INT3434", 0 }, { "INT3434", 0 },
{ "INT3435", 0 }, { "INT3435", 0 },
{ "80860F0A", 0 }, { "80860F0A", 0 },
{ "8086228A", 0 },
{ }, { },
}; };
MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match); MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
......
...@@ -526,6 +526,45 @@ static void atmel_enable_ms(struct uart_port *port) ...@@ -526,6 +526,45 @@ static void atmel_enable_ms(struct uart_port *port)
UART_PUT_IER(port, ier); UART_PUT_IER(port, ier);
} }
/*
* Disable modem status interrupts
*/
static void atmel_disable_ms(struct uart_port *port)
{
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
uint32_t idr = 0;
/*
* Interrupt should not be disabled twice
*/
if (!atmel_port->ms_irq_enabled)
return;
atmel_port->ms_irq_enabled = false;
if (atmel_port->gpio_irq[UART_GPIO_CTS] >= 0)
disable_irq(atmel_port->gpio_irq[UART_GPIO_CTS]);
else
idr |= ATMEL_US_CTSIC;
if (atmel_port->gpio_irq[UART_GPIO_DSR] >= 0)
disable_irq(atmel_port->gpio_irq[UART_GPIO_DSR]);
else
idr |= ATMEL_US_DSRIC;
if (atmel_port->gpio_irq[UART_GPIO_RI] >= 0)
disable_irq(atmel_port->gpio_irq[UART_GPIO_RI]);
else
idr |= ATMEL_US_RIIC;
if (atmel_port->gpio_irq[UART_GPIO_DCD] >= 0)
disable_irq(atmel_port->gpio_irq[UART_GPIO_DCD]);
else
idr |= ATMEL_US_DCDIC;
UART_PUT_IDR(port, idr);
}
/* /*
* Control the transmission of a break signal * Control the transmission of a break signal
*/ */
...@@ -1993,7 +2032,9 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, ...@@ -1993,7 +2032,9 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
/* CTS flow-control and modem-status interrupts */ /* CTS flow-control and modem-status interrupts */
if (UART_ENABLE_MS(port, termios->c_cflag)) if (UART_ENABLE_MS(port, termios->c_cflag))
port->ops->enable_ms(port); atmel_enable_ms(port);
else
atmel_disable_ms(port);
spin_unlock_irqrestore(&port->lock, flags); spin_unlock_irqrestore(&port->lock, flags);
} }
......
...@@ -581,7 +581,7 @@ static unsigned int cdns_uart_tx_empty(struct uart_port *port) ...@@ -581,7 +581,7 @@ static unsigned int cdns_uart_tx_empty(struct uart_port *port)
{ {
unsigned int status; unsigned int status;
status = cdns_uart_readl(CDNS_UART_ISR_OFFSET) & CDNS_UART_IXR_TXEMPTY; status = cdns_uart_readl(CDNS_UART_SR_OFFSET) & CDNS_UART_SR_TXEMPTY;
return status ? TIOCSER_TEMT : 0; return status ? TIOCSER_TEMT : 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册