]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00139274-2 [MX6]Enable suspend/resume
authorAnson Huang <b20788@freescale.com>
Tue, 19 Jul 2011 05:29:54 +0000 (13:29 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:33:01 +0000 (08:33 +0200)
Enable suspend/resume for MX6, using debug
UART as wake up source due to hardware design
limitation.

Signed-off-by: Anson Huang <b20788@freescale.com>
drivers/tty/serial/imx.c

index a54473123e0aad5c02e8e33177007b4b843cbb96..850b6d811418a5ff5b2443bf31f90df22429b03a 100644 (file)
@@ -502,6 +502,10 @@ static irqreturn_t imx_int(int irq, void *dev_id)
        if (sts & USR1_RTSD)
                imx_rtsint(irq, dev_id);
 
+#ifdef CONFIG_ARCH_MX6
+       if (sts & USR1_AWAKE)
+               writel(USR1_AWAKE, sport->port.membase + USR1);
+#endif
        return IRQ_HANDLED;
 }
 
@@ -1206,20 +1210,32 @@ static struct uart_driver imx_reg = {
 static int serial_imx_suspend(struct platform_device *dev, pm_message_t state)
 {
        struct imx_port *sport = platform_get_drvdata(dev);
+       unsigned int val;
 
        if (sport)
                uart_suspend_port(&imx_reg, &sport->port);
-
+#ifdef CONFIG_ARCH_MX6
+       /* enable awake for MX6*/
+       val = readl(sport->port.membase + UCR3);
+       val |= UCR3_AWAKEN;
+       writel(val, sport->port.membase + UCR3);
+#endif
        return 0;
 }
 
 static int serial_imx_resume(struct platform_device *dev)
 {
        struct imx_port *sport = platform_get_drvdata(dev);
+       unsigned int val;
 
        if (sport)
                uart_resume_port(&imx_reg, &sport->port);
 
+#ifdef CONFIG_ARCH_MX6
+       val = readl(sport->port.membase + UCR3);
+       val &= ~UCR3_AWAKEN;
+       writel(val, sport->port.membase + UCR3);
+#endif
        return 0;
 }