diff options
author | Chaitanya Bandi <bandik@nvidia.com> | 2014-04-11 12:30:20 +0530 |
---|---|---|
committer | Gerrit Code Review <gerrit2@nvidia.com> | 2014-04-11 06:04:33 -0700 |
commit | f8b38e58c22e27866f54b1cdc66e03b540c711fa (patch) | |
tree | a9d757b9d08c35afd635ac0246c934e52aa80910 /drivers | |
parent | 550580cee6c703e2f8a84e2a8e4c12928b2d3a12 (diff) |
serial: tegra: support DMA channel request for non-DT instances
dma_request_slave_channel_reason would only work in case
the device nodes are registered from DT. Added support
for DMA channel request for non-DT instances as well.
Bug 1497862
Change-Id: I1f8c1a1902cf3615a85061901348840213251fe3
Signed-off-by: Chaitanya Bandi <bandik@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/tty/serial/serial-tegra.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/tty/serial/serial-tegra.c b/drivers/tty/serial/serial-tegra.c index 270c22841abc..8d93cfc2b46c 100644 --- a/drivers/tty/serial/serial-tegra.c +++ b/drivers/tty/serial/serial-tegra.c @@ -120,6 +120,7 @@ struct tegra_uart_port { bool rx_timeout; int rx_in_progress; int symb_bit; + int dma_req_sel; struct dma_chan *rx_dma_chan; struct dma_chan *tx_dma_chan; @@ -908,8 +909,19 @@ static int tegra_uart_dma_channel_allocate(struct tegra_uart_port *tup, int ret; struct dma_slave_config dma_sconfig; - dma_chan = dma_request_slave_channel_reason(tup->uport.dev, + if (!tup->uport.dev->of_node) { + dma_cap_mask_t mask; + dma_sconfig.slave_id = tup->dma_req_sel; + dma_cap_zero(mask); + dma_cap_set(DMA_SLAVE, mask); + dma_chan = dma_request_channel(mask, NULL, NULL); + if (!dma_chan) + dma_chan = ERR_PTR(-EINVAL); + } else { + dma_chan = dma_request_slave_channel_reason(tup->uport.dev, dma_to_memory ? "rx" : "tx"); + } + if (IS_ERR(dma_chan)) { ret = PTR_ERR(dma_chan); dev_err(tup->uport.dev, @@ -1308,6 +1320,7 @@ board_file: } else { tup->uport.line = pdev->id; tup->enable_modem_interrupt = pdata->modem_interrupt; + tup->dma_req_sel = pdata->dma_req_selector; } u = &tup->uport; |