serial: rk: fix for rk30
author黄涛 <huangtao@rock-chips.com>
Mon, 26 Mar 2012 06:38:33 +0000 (14:38 +0800)
committer黄涛 <huangtao@rock-chips.com>
Mon, 26 Mar 2012 06:38:33 +0000 (14:38 +0800)
drivers/tty/serial/rk_serial.c

index 57cd93ea136975dfda2bf102feee559fe0ff5d90..84e40f8aa0904f04fbdbeea29c6cf407cdd12ee0 100644 (file)
@@ -238,7 +238,8 @@ static inline void serial_out(struct uart_rk_port *up, int offset, unsigned char
 {\r
        dwapb_save_out_value(up, offset, value);\r
        __raw_writeb(value, up->port.membase + (offset << 2));\r
-       dsb();\r
+       if (offset != UART_TX)\r
+               dsb();\r
        dwapb_check_clear_ier(up, offset);\r
 }\r
 \r
@@ -1108,6 +1109,7 @@ static void serial_rk_break_ctl(struct uart_port *port, int break_state)
        dev_dbg(port->dev, "-%s lcr: 0x%02x\n", __func__, up->lcr);\r
 }\r
 \r
+#if defined(CONFIG_SERIAL_RK_CONSOLE) || defined(CONFIG_CONSOLE_POLL)\r
 /*\r
  *     Wait for transmitter & holding register to empty\r
  */\r
@@ -1128,6 +1130,7 @@ static void wait_for_xmitr(struct uart_rk_port *up, int bits)
                udelay(1);\r
        }\r
 }\r
+#endif\r
 \r
 #ifdef CONFIG_CONSOLE_POLL\r
 /*\r
@@ -1313,6 +1316,7 @@ static void serial_rk_shutdown(struct uart_port *port)
        (void) serial_in(up, UART_RX);\r
 \r
        free_irq(up->port.irq, up);\r
+       clk_disable(up->clk);\r
 }\r
 \r
 static void\r
@@ -1759,13 +1763,11 @@ static int __devinit serial_rk_probe(struct platform_device *pdev)
 \r
        sprintf(up->name, "rk29_serial.%d", pdev->id);\r
        up->pdev = pdev;\r
-#ifdef CONFIG_ARCH_RK29\r
        up->clk = clk_get(&pdev->dev, "uart");\r
        if (unlikely(IS_ERR(up->clk))) {\r
                ret = PTR_ERR(up->clk);\r
                goto do_free;\r
        }\r
-#endif\r
        up->tx_loadsz = 30;\r
 #if USE_DMA\r
        up->prk29_uart_dma_t = &rk29_uart_ports_dma_t[pdev->id];\r