diff options
| -rw-r--r-- | Documentation/devicetree/bindings/serial/renesas,sci-serial.txt | 7 | ||||
| -rw-r--r-- | drivers/tty/serial/arc_uart.c | 2 | ||||
| -rw-r--r-- | drivers/tty/serial/imx.c | 3 | ||||
| -rw-r--r-- | drivers/tty/serial/ip22zilog.c | 2 | ||||
| -rw-r--r-- | drivers/tty/serial/m32r_sio.c | 8 | ||||
| -rw-r--r-- | drivers/tty/serial/pmac_zilog.c | 3 | ||||
| -rw-r--r-- | drivers/tty/serial/sunsab.c | 3 | ||||
| -rw-r--r-- | drivers/tty/serial/sunzilog.c | 2 |
8 files changed, 26 insertions, 4 deletions
diff --git a/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt b/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt index 64fd7dec1bbc..b3556609a06f 100644 --- a/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt +++ b/Documentation/devicetree/bindings/serial/renesas,sci-serial.txt | |||
| @@ -4,6 +4,13 @@ Required properties: | |||
| 4 | 4 | ||
| 5 | - compatible: Must contain one of the following: | 5 | - compatible: Must contain one of the following: |
| 6 | 6 | ||
| 7 | - "renesas,scifa-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFA compatible UART. | ||
| 8 | - "renesas,scifb-sh73a0" for SH73A0 (SH-Mobile AG5) SCIFB compatible UART. | ||
| 9 | - "renesas,scifa-r8a73a4" for R8A73A4 (R-Mobile APE6) SCIFA compatible UART. | ||
| 10 | - "renesas,scifb-r8a73a4" for R8A73A4 (R-Mobile APE6) SCIFB compatible UART. | ||
| 11 | - "renesas,scifa-r8a7740" for R8A7740 (R-Mobile A1) SCIFA compatible UART. | ||
| 12 | - "renesas,scifb-r8a7740" for R8A7740 (R-Mobile A1) SCIFB compatible UART. | ||
| 13 | - "renesas,scif-r8a7778" for R8A7778 (R-Car M1) SCIF compatible UART. | ||
| 7 | - "renesas,scif-r8a7779" for R8A7779 (R-Car H1) SCIF compatible UART. | 14 | - "renesas,scif-r8a7779" for R8A7779 (R-Car H1) SCIF compatible UART. |
| 8 | - "renesas,scif-r8a7790" for R8A7790 (R-Car H2) SCIF compatible UART. | 15 | - "renesas,scif-r8a7790" for R8A7790 (R-Car H2) SCIF compatible UART. |
| 9 | - "renesas,scifa-r8a7790" for R8A7790 (R-Car H2) SCIFA compatible UART. | 16 | - "renesas,scifa-r8a7790" for R8A7790 (R-Car H2) SCIFA compatible UART. |
diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c index c9f5c9dcc15c..008c223eaf26 100644 --- a/drivers/tty/serial/arc_uart.c +++ b/drivers/tty/serial/arc_uart.c | |||
| @@ -177,7 +177,7 @@ static void arc_serial_tx_chars(struct arc_uart_port *uart) | |||
| 177 | uart->port.icount.tx++; | 177 | uart->port.icount.tx++; |
| 178 | uart->port.x_char = 0; | 178 | uart->port.x_char = 0; |
| 179 | sent = 1; | 179 | sent = 1; |
| 180 | } else if (xmit->tail != xmit->head) { /* TODO: uart_circ_empty */ | 180 | } else if (!uart_circ_empty(xmit)) { |
| 181 | ch = xmit->buf[xmit->tail]; | 181 | ch = xmit->buf[xmit->tail]; |
| 182 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); | 182 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); |
| 183 | uart->port.icount.tx++; | 183 | uart->port.icount.tx++; |
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index e2f93874989b..044e86d528ae 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c | |||
| @@ -567,6 +567,9 @@ static void imx_start_tx(struct uart_port *port) | |||
| 567 | struct imx_port *sport = (struct imx_port *)port; | 567 | struct imx_port *sport = (struct imx_port *)port; |
| 568 | unsigned long temp; | 568 | unsigned long temp; |
| 569 | 569 | ||
| 570 | if (uart_circ_empty(&port->state->xmit)) | ||
| 571 | return; | ||
| 572 | |||
| 570 | if (USE_IRDA(sport)) { | 573 | if (USE_IRDA(sport)) { |
| 571 | /* half duplex in IrDA mode; have to disable receive mode */ | 574 | /* half duplex in IrDA mode; have to disable receive mode */ |
| 572 | temp = readl(sport->port.membase + UCR4); | 575 | temp = readl(sport->port.membase + UCR4); |
diff --git a/drivers/tty/serial/ip22zilog.c b/drivers/tty/serial/ip22zilog.c index 1efd4c36ba0c..99b7b8697861 100644 --- a/drivers/tty/serial/ip22zilog.c +++ b/drivers/tty/serial/ip22zilog.c | |||
| @@ -603,6 +603,8 @@ static void ip22zilog_start_tx(struct uart_port *port) | |||
| 603 | } else { | 603 | } else { |
| 604 | struct circ_buf *xmit = &port->state->xmit; | 604 | struct circ_buf *xmit = &port->state->xmit; |
| 605 | 605 | ||
| 606 | if (uart_circ_empty(xmit)) | ||
| 607 | return; | ||
| 606 | writeb(xmit->buf[xmit->tail], &channel->data); | 608 | writeb(xmit->buf[xmit->tail], &channel->data); |
| 607 | ZSDELAY(); | 609 | ZSDELAY(); |
| 608 | ZS_WSYNC(channel); | 610 | ZS_WSYNC(channel); |
diff --git a/drivers/tty/serial/m32r_sio.c b/drivers/tty/serial/m32r_sio.c index 68f2c53e0b54..5702828fb62e 100644 --- a/drivers/tty/serial/m32r_sio.c +++ b/drivers/tty/serial/m32r_sio.c | |||
| @@ -266,9 +266,11 @@ static void m32r_sio_start_tx(struct uart_port *port) | |||
| 266 | if (!(up->ier & UART_IER_THRI)) { | 266 | if (!(up->ier & UART_IER_THRI)) { |
| 267 | up->ier |= UART_IER_THRI; | 267 | up->ier |= UART_IER_THRI; |
| 268 | serial_out(up, UART_IER, up->ier); | 268 | serial_out(up, UART_IER, up->ier); |
| 269 | serial_out(up, UART_TX, xmit->buf[xmit->tail]); | 269 | if (!uart_circ_empty(xmit)) { |
| 270 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); | 270 | serial_out(up, UART_TX, xmit->buf[xmit->tail]); |
| 271 | up->port.icount.tx++; | 271 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); |
| 272 | up->port.icount.tx++; | ||
| 273 | } | ||
| 272 | } | 274 | } |
| 273 | while((serial_in(up, UART_LSR) & UART_EMPTY) != UART_EMPTY); | 275 | while((serial_in(up, UART_LSR) & UART_EMPTY) != UART_EMPTY); |
| 274 | #else | 276 | #else |
diff --git a/drivers/tty/serial/pmac_zilog.c b/drivers/tty/serial/pmac_zilog.c index 8193635103ee..f7ad5b903055 100644 --- a/drivers/tty/serial/pmac_zilog.c +++ b/drivers/tty/serial/pmac_zilog.c | |||
| @@ -653,6 +653,8 @@ static void pmz_start_tx(struct uart_port *port) | |||
| 653 | } else { | 653 | } else { |
| 654 | struct circ_buf *xmit = &port->state->xmit; | 654 | struct circ_buf *xmit = &port->state->xmit; |
| 655 | 655 | ||
| 656 | if (uart_circ_empty(xmit)) | ||
| 657 | goto out; | ||
| 656 | write_zsdata(uap, xmit->buf[xmit->tail]); | 658 | write_zsdata(uap, xmit->buf[xmit->tail]); |
| 657 | zssync(uap); | 659 | zssync(uap); |
| 658 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); | 660 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); |
| @@ -661,6 +663,7 @@ static void pmz_start_tx(struct uart_port *port) | |||
| 661 | if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) | 663 | if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) |
| 662 | uart_write_wakeup(&uap->port); | 664 | uart_write_wakeup(&uap->port); |
| 663 | } | 665 | } |
| 666 | out: | ||
| 664 | pmz_debug("pmz: start_tx() done.\n"); | 667 | pmz_debug("pmz: start_tx() done.\n"); |
| 665 | } | 668 | } |
| 666 | 669 | ||
diff --git a/drivers/tty/serial/sunsab.c b/drivers/tty/serial/sunsab.c index 80a58eca785b..2f57df9a71d9 100644 --- a/drivers/tty/serial/sunsab.c +++ b/drivers/tty/serial/sunsab.c | |||
| @@ -427,6 +427,9 @@ static void sunsab_start_tx(struct uart_port *port) | |||
| 427 | struct circ_buf *xmit = &up->port.state->xmit; | 427 | struct circ_buf *xmit = &up->port.state->xmit; |
| 428 | int i; | 428 | int i; |
| 429 | 429 | ||
| 430 | if (uart_circ_empty(xmit)) | ||
| 431 | return; | ||
| 432 | |||
| 430 | up->interrupt_mask1 &= ~(SAB82532_IMR1_ALLS|SAB82532_IMR1_XPR); | 433 | up->interrupt_mask1 &= ~(SAB82532_IMR1_ALLS|SAB82532_IMR1_XPR); |
| 431 | writeb(up->interrupt_mask1, &up->regs->w.imr1); | 434 | writeb(up->interrupt_mask1, &up->regs->w.imr1); |
| 432 | 435 | ||
diff --git a/drivers/tty/serial/sunzilog.c b/drivers/tty/serial/sunzilog.c index a85db8b87156..02df3940b95e 100644 --- a/drivers/tty/serial/sunzilog.c +++ b/drivers/tty/serial/sunzilog.c | |||
| @@ -703,6 +703,8 @@ static void sunzilog_start_tx(struct uart_port *port) | |||
| 703 | } else { | 703 | } else { |
| 704 | struct circ_buf *xmit = &port->state->xmit; | 704 | struct circ_buf *xmit = &port->state->xmit; |
| 705 | 705 | ||
| 706 | if (uart_circ_empty(xmit)) | ||
| 707 | return; | ||
| 706 | writeb(xmit->buf[xmit->tail], &channel->data); | 708 | writeb(xmit->buf[xmit->tail], &channel->data); |
| 707 | ZSDELAY(); | 709 | ZSDELAY(); |
| 708 | ZS_WSYNC(channel); | 710 | ZS_WSYNC(channel); |
