[RAMEN9610-11497][COMMMON] serial: samsung: Set default Baud rate as 115200
authormyung-su.cha <myung-su.cha@samsung.com>
Mon, 28 Jan 2019 12:59:09 +0000 (21:59 +0900)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:23:14 +0000 (20:23 +0300)
Abnormal resume latency issue in user binary is because Baud
rate is set 9600. To resolve this issue, this patch makes Baud
rate as 115200 when requested Baud rate is 0.

Change-Id: I71b54f2adc63f96032b9c628a5afb7e5e5377fc8
Signed-off-by: myung-su.cha <myung-su.cha@samsung.com>
drivers/tty/serial/samsung.c
drivers/tty/serial/samsung.h

index 7728eafbfc2d0d7cf50db0f7ef53801301e99c69..3fe28ec62f018c49fd3fb249bd752b6738137ff7 100644 (file)
@@ -962,6 +962,8 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
         */
 
        baud = uart_get_baud_rate(port, termios, old, MIN_BAUD, MAX_BAUD);
+       if (ourport->dbg_uart_ch && (baud == 9600))
+               baud = ourport->dbg_uart_baud;
        quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel);
        if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
                quot = port->custom_divisor;
@@ -1027,6 +1029,24 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
                break;
        }
 
+       if (ourport->dbg_uart_ch) {
+               switch (ourport->dbg_word_len) {
+                       case 5:
+                               ulcon = S3C2410_LCON_CS5;
+                               break;
+                       case 6:
+                               ulcon = S3C2410_LCON_CS6;
+                               break;
+                       case 7:
+                               ulcon = S3C2410_LCON_CS7;
+                               break;
+                       case 8:
+                       default:
+                               ulcon = S3C2410_LCON_CS8;
+                               break;
+               }
+       }
+
        /* preserve original lcon IR settings */
        if (!ourport->usi_v2)
                ulcon |= (cfg->ulcon & S3C2410_LCON_IRM);
@@ -1716,6 +1736,22 @@ static int s3c24xx_serial_probe(struct platform_device *pdev)
        else
                ourport->usi_v2 = 0;
 
+       if (of_get_property(pdev->dev.of_node, "samsung,dbg-uart-ch", NULL))
+               ourport->dbg_uart_ch = 1;
+       else
+               ourport->dbg_uart_ch = 0;
+
+       if (ourport->dbg_uart_ch == 1) {
+               if (of_property_read_u32(pdev->dev.of_node, "samsung,dbg-uart-baud", &ourport->dbg_uart_baud)) {
+                       ourport->dbg_uart_baud = 115200;
+                       dev_err(&pdev->dev, "No DBG baud rate value. Use 115200 Baud rate\n");
+               }
+               if (of_property_read_u32(pdev->dev.of_node, "samsung,dbg-word-len", &ourport->dbg_word_len)) {
+                       ourport->dbg_word_len = 8;
+                       dev_err(&pdev->dev, "No DBG word length value. Use 8 word length\n");
+               }
+       }
+
        if (of_get_property(pdev->dev.of_node, "samsung,rts-gpio-control", NULL)) {
                ourport->rts_control = 1;
                ourport->default_uart_pinctrl = devm_pinctrl_get(&pdev->dev);
index ccc6220224fdddda6ad14488a854f392df1a3013..a12348e569443f693060d95b195b88cf746d3b6b 100644 (file)
@@ -91,6 +91,9 @@ struct s3c24xx_uart_port {
        unsigned int                    in_band_wakeup;
        unsigned int dbg_mode;
 
+       unsigned int dbg_uart_ch;
+       unsigned int dbg_uart_baud;
+       unsigned int dbg_word_len;
 };
 
 /* conversion functions */