static void atmel_stop_tx(struct uart_port *port)
 {
        struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
+       bool is_pdc = atmel_use_pdc_tx(port);
 
-       if (atmel_use_pdc_tx(port)) {
+       if (is_pdc) {
                /* disable PDC transmit */
                atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS);
        }
        if (atmel_uart_is_half_duplex(port))
                if (!atomic_read(&atmel_port->tasklet_shutdown))
                        atmel_start_rx(port);
-
 }
 
 /*
 static void atmel_start_tx(struct uart_port *port)
 {
        struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
+       bool is_pdc = atmel_use_pdc_tx(port);
+       bool is_dma = is_pdc || atmel_use_dma_tx(port);
 
-       if (atmel_use_pdc_tx(port) && (atmel_uart_readl(port, ATMEL_PDC_PTSR)
+       if (is_pdc && (atmel_uart_readl(port, ATMEL_PDC_PTSR)
                                       & ATMEL_PDC_TXTEN))
                /* The transmitter is already running.  Yes, we
                   really need this.*/
                return;
 
-       if (atmel_use_pdc_tx(port) || atmel_use_dma_tx(port))
-               if (atmel_uart_is_half_duplex(port))
-                       atmel_stop_rx(port);
+       if (is_dma && atmel_uart_is_half_duplex(port))
+               atmel_stop_rx(port);
 
-       if (atmel_use_pdc_tx(port))
+       if (is_pdc) {
                /* re-enable PDC transmit */
                atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN);
+       }
 
        /* Enable interrupts */
        atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask);