|
@@ -1034,6 +1034,20 @@ fail_rx_dma:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Flush any TX data submitted for DMA and PIO. Called when the
|
|
|
+ * TX circular buffer is reset.
|
|
|
+ */
|
|
|
+static void tegra_uart_flush_buffer(struct uart_port *u)
|
|
|
+{
|
|
|
+ struct tegra_uart_port *tup = to_tegra_uport(u);
|
|
|
+
|
|
|
+ tup->tx_bytes = 0;
|
|
|
+ if (tup->tx_dma_chan)
|
|
|
+ dmaengine_terminate_all(tup->tx_dma_chan);
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
static void tegra_uart_shutdown(struct uart_port *u)
|
|
|
{
|
|
|
struct tegra_uart_port *tup = to_tegra_uport(u);
|
|
@@ -1046,6 +1060,8 @@ static void tegra_uart_shutdown(struct uart_port *u)
|
|
|
tegra_uart_dma_channel_free(tup, true);
|
|
|
tegra_uart_dma_channel_free(tup, false);
|
|
|
free_irq(u->irq, tup);
|
|
|
+
|
|
|
+ tegra_uart_flush_buffer(u);
|
|
|
}
|
|
|
|
|
|
static void tegra_uart_enable_ms(struct uart_port *u)
|
|
@@ -1174,20 +1190,6 @@ static void tegra_uart_set_termios(struct uart_port *u,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Flush any TX data submitted for DMA and PIO. Called when the
|
|
|
- * TX circular buffer is reset.
|
|
|
- */
|
|
|
-static void tegra_uart_flush_buffer(struct uart_port *u)
|
|
|
-{
|
|
|
- struct tegra_uart_port *tup = to_tegra_uport(u);
|
|
|
-
|
|
|
- tup->tx_bytes = 0;
|
|
|
- if (tup->tx_dma_chan)
|
|
|
- dmaengine_terminate_all(tup->tx_dma_chan);
|
|
|
- return;
|
|
|
-}
|
|
|
-
|
|
|
static const char *tegra_uart_type(struct uart_port *u)
|
|
|
{
|
|
|
return TEGRA_UART_TYPE;
|