u32                     rts_high;
        u32                     rts_low;
        bool                    ms_irq_enabled;
+       u32                     rtor;   /* address of receiver timeout register if it exists */
        bool                    has_hw_timer;
        struct timer_list       uart_timer;
 
 
        atmel_port->has_hw_timer = false;
 
-       if (name == usart || name == new_uart) {
-               dev_dbg(port->dev, "Usart or uart with hw timer\n");
+       if (name == new_uart) {
+               dev_dbg(port->dev, "Uart with hw timer");
                atmel_port->has_hw_timer = true;
+               atmel_port->rtor = ATMEL_UA_RTOR;
+       } else if (name == usart) {
+               dev_dbg(port->dev, "Usart\n");
+               atmel_port->has_hw_timer = true;
+               atmel_port->rtor = ATMEL_US_RTOR;
        } else if (name == dbgu_uart) {
                dev_dbg(port->dev, "Dbgu or uart without hw timer\n");
-               atmel_port->has_hw_timer = false;
        } else {
                /* fallback for older SoCs: use version field */
                version = atmel_uart_readl(port, ATMEL_US_VERSION);
                case 0x10213:
                        dev_dbg(port->dev, "This version is usart\n");
                        atmel_port->has_hw_timer = true;
+                       atmel_port->rtor = ATMEL_US_RTOR;
                        break;
                case 0x203:
                case 0x10202:
                        dev_dbg(port->dev, "This version is uart\n");
-                       atmel_port->has_hw_timer = false;
                        break;
                default:
                        dev_err(port->dev, "Not supported ip name nor version, set to uart\n");
                                        jiffies + uart_poll_timeout(port));
                /* set USART timeout */
                } else {
-                       atmel_uart_writel(port, ATMEL_US_RTOR, PDC_RX_TIMEOUT);
+                       atmel_uart_writel(port, atmel_port->rtor,
+                                         PDC_RX_TIMEOUT);
                        atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO);
 
                        atmel_uart_writel(port, ATMEL_US_IER,
                                        jiffies + uart_poll_timeout(port));
                /* set USART timeout */
                } else {
-                       atmel_uart_writel(port, ATMEL_US_RTOR, PDC_RX_TIMEOUT);
+                       atmel_uart_writel(port, atmel_port->rtor,
+                                         PDC_RX_TIMEOUT);
                        atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO);
 
                        atmel_uart_writel(port, ATMEL_US_IER,
 
 #define ATMEL_US_BRGR          0x20    /* Baud Rate Generator Register */
 #define        ATMEL_US_CD             GENMASK(15, 0)  /* Clock Divider */
 
-#define ATMEL_US_RTOR          0x24    /* Receiver Time-out Register */
+#define ATMEL_US_RTOR          0x24    /* Receiver Time-out Register for USART */
+#define ATMEL_UA_RTOR          0x28    /* Receiver Time-out Register for UART */
 #define        ATMEL_US_TO             GENMASK(15, 0)  /* Time-out Value */
 
 #define ATMEL_US_TTGR          0x28    /* Transmitter Timeguard Register */