serial: fsl_lpuart: Avoid using irq_wake flag
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Sun, 13 Aug 2017 14:47:39 +0000 (17:47 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Aug 2017 18:51:19 +0000 (20:51 +0200)
There is no need to duplicate a flag which IRQ core takes care of.

Replace custom flag by IRQ core API that retrieves its state.

Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com>
Cc: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/fsl_lpuart.c

index d24270fe3cbeb94904ca354d180679cd168d0f0b..849c1f9991cec8e0102719a90fe3325e90f2d72f 100644 (file)
@@ -2264,6 +2264,7 @@ static int lpuart_suspend(struct device *dev)
 {
        struct lpuart_port *sport = dev_get_drvdata(dev);
        unsigned long temp;
+       bool irq_wake;
 
        if (lpuart_is_32(sport)) {
                /* disable Rx/Tx and interrupts */
@@ -2279,6 +2280,9 @@ static int lpuart_suspend(struct device *dev)
 
        uart_suspend_port(&lpuart_reg, &sport->port);
 
+       /* uart_suspend_port() might set wakeup flag */
+       irq_wake = irqd_is_wakeup_set(irq_get_irq_data(sport->port.irq));
+
        if (sport->lpuart_dma_rx_use) {
                /*
                 * EDMA driver during suspend will forcefully release any
@@ -2287,7 +2291,7 @@ static int lpuart_suspend(struct device *dev)
                 * cannot resume as as expected, hence gracefully release the
                 * Rx DMA path before suspend and start Rx DMA path on resume.
                 */
-               if (sport->port.irq_wake) {
+               if (irq_wake) {
                        del_timer_sync(&sport->lpuart_timer);
                        lpuart_dma_rx_free(&sport->port);
                }
@@ -2302,7 +2306,7 @@ static int lpuart_suspend(struct device *dev)
                dmaengine_terminate_all(sport->dma_tx_chan);
        }
 
-       if (sport->port.suspended && !sport->port.irq_wake)
+       if (sport->port.suspended && !irq_wake)
                clk_disable_unprepare(sport->clk);
 
        return 0;
@@ -2311,9 +2315,10 @@ static int lpuart_suspend(struct device *dev)
 static int lpuart_resume(struct device *dev)
 {
        struct lpuart_port *sport = dev_get_drvdata(dev);
+       bool irq_wake = irqd_is_wakeup_set(irq_get_irq_data(sport->port.irq));
        unsigned long temp;
 
-       if (sport->port.suspended && !sport->port.irq_wake)
+       if (sport->port.suspended && !irq_wake)
                clk_prepare_enable(sport->clk);
 
        if (lpuart_is_32(sport)) {
@@ -2330,7 +2335,7 @@ static int lpuart_resume(struct device *dev)
        }
 
        if (sport->lpuart_dma_rx_use) {
-               if (sport->port.irq_wake) {
+               if (irq_wake) {
                        if (!lpuart_start_rx_dma(sport))
                                rx_dma_timer_init(sport);
                        else