ASoC: fsl_asrc_dma: request dma channel from specific controller
authorRobin Gong <yibin.gong@nxp.com>
Fri, 5 Mar 2021 09:19:37 +0000 (17:19 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 12 Mar 2021 20:48:05 +0000 (20:48 +0000)
Request dma channel from specific dma controller instead of generic
dma controller list, otherwise, may get the wrong dma controller
if there are multi dma controllers such as i.MX8MP.

Signed-off-by: Robin Gong <yibin.gong@nxp.com>
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://lore.kernel.org/r/1614935977-21638-1-git-send-email-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/fsl/fsl_asrc_dma.c

index 29f91cdecbc33142ca1a0b7f8b1c132601c9a166..c313a26c8f95547173704e226ee27d363e156651 100644 (file)
@@ -141,6 +141,7 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
        struct dma_slave_config config_fe, config_be;
        enum asrc_pair_index index = pair->index;
        struct device *dev = component->dev;
+       struct device_node *of_dma_node;
        int stream = substream->stream;
        struct imx_dma_data *tmp_data;
        struct snd_soc_dpcm *dpcm;
@@ -231,8 +232,10 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
                pair->dma_data.priority = tmp_data->priority;
                dma_release_channel(tmp_chan);
 
+               of_dma_node = pair->dma_chan[!dir]->device->dev->of_node;
                pair->dma_chan[dir] =
-                       dma_request_channel(mask, filter, &pair->dma_data);
+                       __dma_request_channel(&mask, filter, &pair->dma_data,
+                                             of_dma_node);
                pair->req_dma_chan = true;
        } else {
                pair->dma_chan[dir] = tmp_chan;