summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorChaitanya Bandi <bandik@nvidia.com>2014-04-11 12:30:20 +0530
committerGerrit Code Review <gerrit2@nvidia.com>2014-04-11 06:04:33 -0700
commitf8b38e58c22e27866f54b1cdc66e03b540c711fa (patch)
treea9d757b9d08c35afd635ac0246c934e52aa80910 /drivers
parent550580cee6c703e2f8a84e2a8e4c12928b2d3a12 (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.c15
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;