#define AUART_CTRL2_TXE                                (1 << 8)
 #define AUART_CTRL2_UARTEN                     (1 << 0)
 
+#define AUART_LINECTRL_BAUD_DIV_MAX            0x003fffc0
+#define AUART_LINECTRL_BAUD_DIV_MIN            0x000000ec
 #define AUART_LINECTRL_BAUD_DIVINT_SHIFT       16
 #define AUART_LINECTRL_BAUD_DIVINT_MASK                0xffff0000
 #define AUART_LINECTRL_BAUD_DIVINT(v)          (((v) & 0xffff) << 16)
 {
        struct mxs_auart_port *s = to_auart_port(u);
        u32 bm, ctrl, ctrl2, div;
-       unsigned int cflag, baud;
+       unsigned int cflag, baud, baud_min, baud_max;
 
        cflag = termios->c_cflag;
 
        }
 
        /* set baud rate */
-       baud = uart_get_baud_rate(u, termios, old, 0, u->uartclk);
+       baud_min = DIV_ROUND_UP(u->uartclk * 32, AUART_LINECTRL_BAUD_DIV_MAX);
+       baud_max = u->uartclk * 32 / AUART_LINECTRL_BAUD_DIV_MIN;
+       baud = uart_get_baud_rate(u, termios, old, baud_min, baud_max);
        div = u->uartclk * 32 / baud;
        ctrl |= AUART_LINECTRL_BAUD_DIVFRAC(div & 0x3F);
        ctrl |= AUART_LINECTRL_BAUD_DIVINT(div >> 6);