提交 ccf15184 编写于 作者: D Dmitry Osipenko 提交者: Thierry Reding

soc/tegra: fuse: Explicitly request DMA channel from APB DMA driver

Currently fuse driver requests DMA channel from an arbitrary DMA device,
it is not a problem since there is only one DMA provider for Tegra20 yet,
but it may become troublesome if another provider will appear.
Signed-off-by: NDmitry Osipenko <digetx@gmail.com>
Acked-by: NJon Hunter <jonathanh@nvidia.com>
Signed-off-by: NThierry Reding <treding@nvidia.com>
上级 55a042b3
...@@ -96,6 +96,13 @@ static u32 tegra20_fuse_read(struct tegra_fuse *fuse, unsigned int offset) ...@@ -96,6 +96,13 @@ static u32 tegra20_fuse_read(struct tegra_fuse *fuse, unsigned int offset)
return value; return value;
} }
static bool dma_filter(struct dma_chan *chan, void *filter_param)
{
struct device_node *np = chan->device->dev->of_node;
return of_device_is_compatible(np, "nvidia,tegra20-apbdma");
}
static int tegra20_fuse_probe(struct tegra_fuse *fuse) static int tegra20_fuse_probe(struct tegra_fuse *fuse)
{ {
dma_cap_mask_t mask; dma_cap_mask_t mask;
...@@ -103,7 +110,7 @@ static int tegra20_fuse_probe(struct tegra_fuse *fuse) ...@@ -103,7 +110,7 @@ static int tegra20_fuse_probe(struct tegra_fuse *fuse)
dma_cap_zero(mask); dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask); dma_cap_set(DMA_SLAVE, mask);
fuse->apbdma.chan = dma_request_channel(mask, NULL, NULL); fuse->apbdma.chan = __dma_request_channel(&mask, dma_filter, NULL);
if (!fuse->apbdma.chan) if (!fuse->apbdma.chan)
return -EPROBE_DEFER; return -EPROBE_DEFER;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册