|
@@ -196,11 +196,14 @@ static void serial_omap_stop_rx(struct uart_port *port)
|
|
|
pm_runtime_put_autosuspend(up->dev);
|
|
|
}
|
|
|
|
|
|
-static void transmit_chars(struct uart_omap_port *up)
|
|
|
+static void transmit_chars(struct uart_omap_port *up, unsigned int lsr)
|
|
|
{
|
|
|
struct circ_buf *xmit = &up->port.state->xmit;
|
|
|
int count;
|
|
|
|
|
|
+ if (!(lsr & UART_LSR_THRE))
|
|
|
+ return;
|
|
|
+
|
|
|
if (up->port.x_char) {
|
|
|
serial_out(up, UART_TX, up->port.x_char);
|
|
|
up->port.icount.tx++;
|
|
@@ -370,8 +373,7 @@ static inline irqreturn_t serial_omap_irq(int irq, void *dev_id)
|
|
|
check_modem_status(up);
|
|
|
break;
|
|
|
case UART_IIR_THRI:
|
|
|
- if (lsr & UART_LSR_THRE)
|
|
|
- transmit_chars(up);
|
|
|
+ transmit_chars(up, lsr);
|
|
|
break;
|
|
|
case UART_IIR_RX_TIMEOUT:
|
|
|
/* FALLTHROUGH */
|