]> err.no Git - linux-2.6/blobdiff - drivers/serial/mpsc.c
Merge branch 'master'
[linux-2.6] / drivers / serial / mpsc.c
index a2a643318002892201db6c0e2b478401e4d93cdc..ba8838b234da7b89cfa2575a8689034b5b2cb3e9 100644 (file)
@@ -52,6 +52,8 @@
  * 4) AFAICT, hardware flow control isn't supported by the controller --MAG.
  */
 
+#include <linux/platform_device.h>
+
 #include "mpsc.h"
 
 /*
@@ -1058,12 +1060,9 @@ mpsc_get_mctrl(struct uart_port *port)
 {
        struct mpsc_port_info *pi = (struct mpsc_port_info *)port;
        u32 mflags, status;
-       ulong iflags;
 
-       spin_lock_irqsave(&pi->port.lock, iflags);
        status = (pi->mirror_regs) ? pi->MPSC_CHR_10_m :
                readl(pi->mpsc_base + MPSC_CHR_10);
-       spin_unlock_irqrestore(&pi->port.lock, iflags);
 
        mflags = 0;
        if (status & 0x1)
@@ -1075,18 +1074,18 @@ mpsc_get_mctrl(struct uart_port *port)
 }
 
 static void
-mpsc_stop_tx(struct uart_port *port, uint tty_start)
+mpsc_stop_tx(struct uart_port *port)
 {
        struct mpsc_port_info *pi = (struct mpsc_port_info *)port;
 
-       pr_debug("mpsc_stop_tx[%d]: tty_start: %d\n", port->line, tty_start);
+       pr_debug("mpsc_stop_tx[%d]\n", port->line);
 
        mpsc_freeze(pi);
        return;
 }
 
 static void
-mpsc_start_tx(struct uart_port *port, uint tty_start)
+mpsc_start_tx(struct uart_port *port)
 {
        struct mpsc_port_info *pi = (struct mpsc_port_info *)port;
 
@@ -1094,7 +1093,7 @@ mpsc_start_tx(struct uart_port *port, uint tty_start)
        mpsc_copy_tx_data(pi);
        mpsc_sdma_start_tx(pi);
 
-       pr_debug("mpsc_start_tx[%d]: tty_start: %d\n", port->line, tty_start);
+       pr_debug("mpsc_start_tx[%d]\n", port->line);
        return;
 }
 
@@ -1103,6 +1102,8 @@ mpsc_start_rx(struct mpsc_port_info *pi)
 {
        pr_debug("mpsc_start_rx[%d]: Starting...\n", pi->port.line);
 
+       /* Issue a Receive Abort to clear any receive errors */
+       writel(MPSC_CHR_2_RA, pi->mpsc_base + MPSC_CHR_2);
        if (pi->rcv_data) {
                mpsc_enter_hunt(pi);
                mpsc_sdma_cmd(pi, SDMA_SDCM_ERD);