Merge tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / drivers / tty / serial / fsl_lpuart.c
index fd503c35defb42bf51f305abd7f866012805eb7e..e7cde3a9566d988963532bc2daecd1cbd06940dd 100644 (file)
@@ -1786,15 +1786,13 @@ static int lpuart_probe(struct platform_device *pdev)
        }
        sport->port.line = ret;
        sport->lpuart32 = of_device_is_compatible(np, "fsl,ls1021a-lpuart");
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res)
-               return -ENODEV;
 
-       sport->port.mapbase = res->start;
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        sport->port.membase = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(sport->port.membase))
                return PTR_ERR(sport->port.membase);
 
+       sport->port.mapbase = res->start;
        sport->port.dev = &pdev->dev;
        sport->port.type = PORT_LPUART;
        sport->port.iotype = UPIO_MEM;
@@ -1862,6 +1860,20 @@ static int lpuart_suspend(struct device *dev)
 static int lpuart_resume(struct device *dev)
 {
        struct lpuart_port *sport = dev_get_drvdata(dev);
+       unsigned long temp;
+
+       if (sport->lpuart32) {
+               lpuart32_setup_watermark(sport);
+               temp = lpuart32_read(sport->port.membase + UARTCTRL);
+               temp |= (UARTCTRL_RIE | UARTCTRL_TIE | UARTCTRL_RE |
+                        UARTCTRL_TE | UARTCTRL_ILIE);
+               lpuart32_write(temp, sport->port.membase + UARTCTRL);
+       } else {
+               lpuart_setup_watermark(sport);
+               temp = readb(sport->port.membase + UARTCR2);
+               temp |= (UARTCR2_RIE | UARTCR2_TIE | UARTCR2_RE | UARTCR2_TE);
+               writeb(temp, sport->port.membase + UARTCR2);
+       }
 
        uart_resume_port(&lpuart_reg, &sport->port);
 
@@ -1883,11 +1895,8 @@ static struct platform_driver lpuart_driver = {
 
 static int __init lpuart_serial_init(void)
 {
-       int ret;
-
-       pr_info("serial: Freescale lpuart driver\n");
+       int ret = uart_register_driver(&lpuart_reg);
 
-       ret = uart_register_driver(&lpuart_reg);
        if (ret)
                return ret;