[COMMON] serial: samsung: Add interrupt masking before enable the channel & remove...
authorKyungwoo Kang <kwoo.kang@samsung.com>
Wed, 25 Apr 2018 08:51:28 +0000 (17:51 +0900)
committerSunyoung Kang <sy0816.kang@samsung.com>
Wed, 30 May 2018 04:35:59 +0000 (13:35 +0900)
1. If the UART channel is located in non-alive block, SFR values go to
the reset value after the system power mode. So the interrupt
should be masked before enabling the channel otherwise Tx interrupt
will be occurred without any purpose.

2. UART channel reset is called twice when resume sequence, so we
decided to remove one of reset function call.

Change-Id: Ie84c51b0c97c572d48d302b43ec3ee64ee5ea597
Signed-off-by: Kyungwoo Kang <kwoo.kang@samsung.com>
drivers/tty/serial/samsung.c

index ead6a9acf9d60be3a0e893996cdbceca96645e68..82068129776ff813f389a170d476f126a9b2d999 100644 (file)
@@ -1377,6 +1377,9 @@ static void s3c24xx_serial_resetport(struct uart_port *port,
                ucon |= S3C2443_UCON_LOOPBACK;
        }
 
+       /* To prevent unexpected Interrupt before enabling the channel */
+       wr_regl(port, S3C64XX_UINTM, 0xf);
+
        /* reset both fifos */
        wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
        wr_regl(port, S3C2410_UFCON, cfg->ufcon);
@@ -1871,10 +1874,6 @@ static int s3c24xx_serial_resume(struct device *dev)
        struct s3c24xx_uart_port *ourport = to_ourport(port);
 
        if (port) {
-               uart_clock_enable(ourport);
-               exynos_usi_init(port);
-               s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port));
-               uart_clock_disable(ourport);
 
                uart_resume_port(&s3c24xx_uart_drv, port);