mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 00:51:02 +07:00
tty/serial: at91: BUG: disable interrupts when !UART_ENABLE_MS()
In set_termios(), interrupts where not disabled if UART_ENABLE_MS() was false. Tested on at91sam9g35. Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Cc: stable <stable@vger.kernel.org> # >= 3.16 Reviewed-by: Peter Hurley <peter@hurleysoftware.com> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f174442ed1
commit
35b675b910
@ -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,
|
|||||||
|
|
||||||
/* 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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user