On 08/05/14 12:22, Stephen Boyd wrote:
>
> I tried it and it doesn't work either. Typing lots of characters finally
> unjams it like you see on 1.4 hardware.
>

Can you try this? It seems to work for me on both 1.3 and 1.4 hardware

diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
index 72000a6d5af0..fbcb0c657d5f 100644
--- a/drivers/tty/serial/msm_serial.c
+++ b/drivers/tty/serial/msm_serial.c
@@ -680,17 +680,6 @@ static void msm_power(struct uart_port *port, unsigned int 
state,
 }
 
 #ifdef CONFIG_CONSOLE_POLL
-static int msm_poll_init(struct uart_port *port)
-{
-       struct msm_port *msm_port = UART_TO_MSM(port);
-
-       /* Enable single character mode on RX FIFO */
-       if (msm_port->is_uartdm >= UARTDM_1P4)
-               msm_write(port, UARTDM_DMEN_RX_SC_ENABLE, UARTDM_DMEN);
-
-       return 0;
-}
-
 static int msm_poll_get_char_single(struct uart_port *port)
 {
        struct msm_port *msm_port = UART_TO_MSM(port);
@@ -702,7 +691,7 @@ static int msm_poll_get_char_single(struct uart_port *port)
                return msm_read(port, rf_reg) & 0xff;
 }
 
-static int msm_poll_get_char_dm_1p3(struct uart_port *port)
+static int msm_poll_get_char_dm(struct uart_port *port)
 {
        int c;
        static u32 slop;
@@ -726,6 +715,9 @@ static int msm_poll_get_char_dm_1p3(struct uart_port *port)
                        slop = msm_read(port, UARTDM_RF);
                        c = sp[0];
                        count--;
+                       msm_write(port, UART_CR_CMD_RESET_STALE_INT, UART_CR);
+                       msm_write(port, 0xFFFFFF, UARTDM_DMRX);
+                       msm_write(port, UART_CR_CMD_STALE_EVENT_ENABLE, 
UART_CR);
                } else {
                        c = NO_POLL_CHAR;
                }
@@ -749,8 +741,8 @@ static int msm_poll_get_char(struct uart_port *port)
        imr = msm_read(port, UART_IMR);
        msm_write(port, 0, UART_IMR);
 
-       if (msm_port->is_uartdm == UARTDM_1P3)
-               c = msm_poll_get_char_dm_1p3(port);
+       if (msm_port->is_uartdm)
+               c = msm_poll_get_char_dm(port);
        else
                c = msm_poll_get_char_single(port);
 
@@ -809,7 +801,6 @@ static struct uart_ops msm_uart_pops = {
        .verify_port = msm_verify_port,
        .pm = msm_power,
 #ifdef CONFIG_CONSOLE_POLL
-       .poll_init = msm_poll_init,
        .poll_get_char  = msm_poll_get_char,
        .poll_put_char  = msm_poll_put_char,
 #endif


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to