lkml.org 
[lkml]   [2015]   [Sep]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 6/6] tty: serial: msm: Remove 115.2 Kbps maximum baud rate limitation
    Date
    UART controller is capable to perform transfers up to 4 Mbps.
    Remove artificial 115.2 Kbps limitation.

    Signed-off-by: Ivan T. Ivanov <ivan.ivanov@linaro.org>
    ---
    drivers/tty/serial/msm_serial.c | 20 +++++++++++++++++---
    1 file changed, 17 insertions(+), 3 deletions(-)

    diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
    index 3efb80f511db..dcde955475dc 100644
    --- a/drivers/tty/serial/msm_serial.c
    +++ b/drivers/tty/serial/msm_serial.c
    @@ -882,6 +882,7 @@ msm_find_best_baud(struct uart_port *port, unsigned int baud)
    { 3, 0xdd, 8 },
    { 2, 0xee, 16 },
    { 1, 0xff, 31 },
    + { 0, 0xff, 31 },
    };

    divisor = uart_get_divisor(port, baud);
    @@ -893,16 +894,29 @@ msm_find_best_baud(struct uart_port *port, unsigned int baud)
    return entry; /* Default to smallest divider */
    }

    -static int msm_set_baud_rate(struct uart_port *port, unsigned int baud)
    +static int msm_set_baud_rate(struct uart_port *port, unsigned int baud,
    + unsigned long *saved_flags)
    {
    unsigned int rxstale, watermark, mask;
    struct msm_port *msm_port = UART_TO_MSM(port);
    const struct msm_baud_map *entry;
    + unsigned long flags;

    entry = msm_find_best_baud(port, baud);

    msm_write(port, entry->code, UART_CSR);

    + if (baud > 460800)
    + port->uartclk = baud * 16;
    +
    + flags = *saved_flags;
    + spin_unlock_irqrestore(&port->lock, flags);
    +
    + clk_set_rate(msm_port->clk, port->uartclk);
    +
    + spin_lock_irqsave(&port->lock, flags);
    + *saved_flags = flags;
    +
    /* RX stale watermark */
    rxstale = entry->rxstale;
    watermark = UART_IPR_STALE_LSB & rxstale;
    @@ -1026,8 +1040,8 @@ static void msm_set_termios(struct uart_port *port, struct ktermios *termios,
    msm_stop_dma(port, dma);

    /* calculate and set baud rate */
    - baud = uart_get_baud_rate(port, termios, old, 300, 115200);
    - baud = msm_set_baud_rate(port, baud);
    + baud = uart_get_baud_rate(port, termios, old, 300, 4000000);
    + baud = msm_set_baud_rate(port, baud, &flags);
    if (tty_termios_baud_rate(termios))
    tty_termios_encode_baud_rate(termios, baud, baud);

    --
    1.9.1


    \
     
     \ /
      Last update: 2015-09-30 14:41    [W:3.633 / U:0.444 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site