aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-07-12 17:12:35 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-07-12 17:12:35 -0400
commit78b3d1c24deb46a8bed6e1be816dc64d344777f8 (patch)
treeabb70e844263a9c81f02ac83fec116f25caafa80
parent56a50f20eade9a1777375d40e04434788b6ff414 (diff)
parent34c4eda809e1efb16c554c07bb5df4c8ace9424e (diff)
Merge tag 'tty-3.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty/serial fixes from Greg KH: "Here are some small serial fixes that resolve some reported problems that started in 3.15 with some serial drivers. And there's a new dt binding for a serial driver, which was all that was needed for the renesas serial driver" * tag 'tty-3.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: serial: sh-sci: Add device tree support for r8a7{778,740,3a4} and sh73a0 serial: imx: Fix build breakage serial: arc_uart: Use uart_circ_empty() for open-coded comparison serial: Test for no tx data on tx restart
-rw-r--r--Documentation/devicetree/bindings/serial/renesas,sci-serial.txt7
-rw-r--r--drivers/tty/serial/arc_uart.c2
-rw-r--r--drivers/tty/serial/imx.c3
-rw-r--r--drivers/tty/serial/ip22zilog.c2
-rw-r--r--drivers/tty/serial/m32r_sio.c8
-rw-r--r--drivers/tty/serial/pmac_zilog.c3
-rw-r--r--drivers/tty/serial/sunsab.c3
-rw-r--r--drivers/tty/serial/sunzilog.c2
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);