Merge ../linus
[firefly-linux-kernel-4.4.55.git] / drivers / serial / pmac_zilog.c
index 5f52883e64d2ade773b968edd967e395121a58bd..513ff8597707bf5c642f0dd1d02aad97356fdf7f 100644 (file)
@@ -69,7 +69,6 @@
 #include <asm/pmac_feature.h>
 #include <asm/dbdma.h>
 #include <asm/macio.h>
-#include <asm/semaphore.h>
 
 #if defined (CONFIG_SERIAL_PMACZILOG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
 #define SUPPORT_SYSRQ
@@ -1493,7 +1492,7 @@ no_dma:
        /*
         * Init remaining bits of "port" structure
         */
-       uap->port.iotype = SERIAL_IO_MEM;
+       uap->port.iotype = UPIO_MEM;
        uap->port.irq = np->intrs[0].line;
        uap->port.uartclk = ZS_CLOCK;
        uap->port.fifosize = 1;
@@ -1593,7 +1592,7 @@ static int pmz_suspend(struct macio_dev *mdev, pm_message_t pm_state)
        state = pmz_uart_reg.state + uap->port.line;
 
        mutex_lock(&pmz_irq_mutex);
-       down(&state->sem);
+       mutex_lock(&state->mutex);
 
        spin_lock_irqsave(&uap->port.lock, flags);
 
@@ -1624,7 +1623,7 @@ static int pmz_suspend(struct macio_dev *mdev, pm_message_t pm_state)
        /* Shut the chip down */
        pmz_set_scc_power(uap, 0);
 
-       up(&state->sem);
+       mutex_unlock(&state->mutex);
        mutex_unlock(&pmz_irq_mutex);
 
        pmz_debug("suspend, switching complete\n");
@@ -1653,7 +1652,7 @@ static int pmz_resume(struct macio_dev *mdev)
        state = pmz_uart_reg.state + uap->port.line;
 
        mutex_lock(&pmz_irq_mutex);
-       down(&state->sem);
+       mutex_lock(&state->mutex);
 
        spin_lock_irqsave(&uap->port.lock, flags);
        if (!ZS_IS_OPEN(uap) && !ZS_IS_CONS(uap)) {
@@ -1685,7 +1684,7 @@ static int pmz_resume(struct macio_dev *mdev)
        }
 
  bail:
-       up(&state->sem);
+       mutex_unlock(&state->mutex);
        mutex_unlock(&pmz_irq_mutex);
 
        /* Right now, we deal with delay by blocking here, I'll be
@@ -1917,6 +1916,16 @@ static void __exit exit_pmz(void)
 
 #ifdef CONFIG_SERIAL_PMACZILOG_CONSOLE
 
+static void pmz_console_putchar(struct uart_port *port, int ch)
+{
+       struct uart_pmac_port *uap = (struct uart_pmac_port *)port;
+
+       /* Wait for the transmit buffer to empty. */
+       while ((read_zsreg(uap, R0) & Tx_BUF_EMP) == 0)
+               udelay(5);
+       write_zsdata(uap, ch);
+}
+
 /*
  * Print a string to the serial port trying not to disturb
  * any possible real use of the port...
@@ -1925,7 +1934,6 @@ static void pmz_console_write(struct console *con, const char *s, unsigned int c
 {
        struct uart_pmac_port *uap = &pmz_ports[con->index];
        unsigned long flags;
-       int i;
 
        if (ZS_IS_ASLEEP(uap))
                return;
@@ -1935,17 +1943,7 @@ static void pmz_console_write(struct console *con, const char *s, unsigned int c
        write_zsreg(uap, R1, uap->curregs[1] & ~TxINT_ENAB);
        write_zsreg(uap, R5, uap->curregs[5] | TxENABLE | RTS | DTR);
 
-       for (i = 0; i < count; i++) {
-               /* Wait for the transmit buffer to empty. */
-               while ((read_zsreg(uap, R0) & Tx_BUF_EMP) == 0)
-                       udelay(5);
-               write_zsdata(uap, s[i]);
-               if (s[i] == 10) {
-                       while ((read_zsreg(uap, R0) & Tx_BUF_EMP) == 0)
-                               udelay(5);
-                       write_zsdata(uap, R13);
-               }
-       }
+       uart_console_write(&uap->port, s, count, pmz_console_putchar);
 
        /* Restore the values in the registers. */
        write_zsreg(uap, R1, uap->curregs[1]);