[COMMON] serial: samsung: Add suspend clock stop fucntion.
authorKyungwoo Kang <kwoo.kang@samsung.com>
Tue, 11 Jul 2017 06:31:55 +0000 (15:31 +0900)
committermyung-su.cha <myung-su.cha@samsung.com>
Wed, 9 May 2018 12:14:45 +0000 (21:14 +0900)
This patch is for USI_v2 UART port.
When the system goes into suspend mode, CLKSTOP_ON register
must be set by 1 not to get disturbed by any signal which
is not supposed to be.

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

index f3db0e139ce30724453cf42afa348878dc31514d..3df8070c37a07b19bf1a7541f752caada38c5f22 100644 (file)
@@ -203,6 +203,7 @@ uart_dbg_store(struct device *dev, struct device_attribute *attr,
 static DEVICE_ATTR(uart_dbg, 0640, uart_dbg_show, uart_dbg_store);
 
 static void exynos_usi_init(struct uart_port *port);
+static void exynos_usi_stop(struct uart_port *port);
 static void s3c24xx_serial_resetport(struct uart_port *port,
                                   struct s3c2410_uartcfg *cfg);
 static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level,
@@ -1266,6 +1267,15 @@ static void exynos_usi_init(struct uart_port *port)
        wr_regl(port, USI_OPTION, USI_HWACG_CLKREQ_ON);
 }
 
+static void exynos_usi_stop(struct uart_port *port)
+{
+       /* when USI CLKSTOP_ON is set high, this makes the
+        * Q-ch state enter into STOP state by driving both the
+        * IP_CLKREQ and IP_BUSACTREQ as low
+        */
+       wr_regl(port, USI_OPTION, USI_HWACG_CLKSTOP_ON);
+}
+
 /* s3c24xx_serial_resetport
  *
  * reset the fifos and other the settings.
@@ -1731,6 +1741,7 @@ static int s3c24xx_serial_suspend(struct device *dev)
                ucon = rd_regl(port, S3C2410_UCON);
                ucon &= ~(S3C2410_UCON_RXIRQMODE | S3C2410_UCON_TXIRQMODE) ;
                wr_regl(port, S3C2410_UCON, ucon);
+               exynos_usi_stop(port);
                uart_clock_disable(ourport);
 
                rx_enabled(port) = 0;