static void tegra_shutdown(struct uart_port *u) { struct tegra_uart_port *t; t = container_of(u, struct tegra_uart_port, uport); dev_vdbg(u->dev, "+tegra_shutdown\n"); if (t->is_irda && t->irda_shutdown) t->irda_shutdown(); tegra_uart_hw_deinit(t); t->rx_in_progress = 0; t->tx_in_progress = 0; tegra_uart_free_rx_dma(t); if (t->use_tx_dma) { tegra_dma_free_channel(t->tx_dma); t->tx_dma = NULL; t->use_tx_dma = false; dma_unmap_single(t->uport.dev, t->xmit_dma_addr, UART_XMIT_SIZE, DMA_TO_DEVICE); t->xmit_dma_addr = 0; } free_irq(u->irq, t); tasklet_kill(&t->tlet); dev_vdbg(u->dev, "-tegra_shutdown\n"); }
static void tegra_uart_shutdown(struct uart_port *u) { struct tegra_uart_port *tup = to_tegra_uport(u); tegra_uart_hw_deinit(tup); tup->rx_in_progress = 0; tup->tx_in_progress = 0; tegra_uart_dma_channel_free(tup, true); tegra_uart_dma_channel_free(tup, false); free_irq(u->irq, tup); }