summaryrefslogtreecommitdiff
path: root/sound/soc/soc-generic-dmaengine-pcm.c
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2019-02-07 20:00:10 +0300
committerMark Brown <broonie@kernel.org>2019-02-12 19:31:42 +0300
commit10cbf3507bcb9baa82bf3445502e8ccafaa09fc8 (patch)
treec6144e8248120d10a85cc7cfbc80d5cf39db0750 /sound/soc/soc-generic-dmaengine-pcm.c
parent51256d348c9af1bf544a4432abc1d5f2fd3ef34b (diff)
downloadlinux-10cbf3507bcb9baa82bf3445502e8ccafaa09fc8.tar.xz
ASoC: dmaengine: Extend use of chan_names provided in custom DMA config
There are currently two ways to specify custom DMA channel names: - through the SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME flag and snd_dmaengine_dai_dma_data data structure, - through chan_names field of struct snd_dmaengine_pcm_config. In order to replace the DAI DMA data method with the custom DMA config one on non-DT platforms the dmaengine_pcm_new() function is extended to also consider channel names specified in the custom DMA config. If both config->chan_names and dma_data->chan_name are provided the former will be used. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/soc-generic-dmaengine-pcm.c')
-rw-r--r--sound/soc/soc-generic-dmaengine-pcm.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sound/soc/soc-generic-dmaengine-pcm.c b/sound/soc/soc-generic-dmaengine-pcm.c
index 6d7638c1233d..1b44e363c50c 100644
--- a/sound/soc/soc-generic-dmaengine-pcm.c
+++ b/sound/soc/soc-generic-dmaengine-pcm.c
@@ -288,9 +288,16 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd)
dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
if (!pcm->chan[i] &&
- (pcm->flags & SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME))
+ ((pcm->flags & SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME) ||
+ (config && config->chan_names[i]))) {
+ const char *chan_name = dma_data->chan_name;
+
+ if (config && config->chan_names[i])
+ chan_name = config->chan_names[i];
+
pcm->chan[i] = dma_request_slave_channel(dev,
- dma_data->chan_name);
+ chan_name);
+ }
if (!pcm->chan[i] && (pcm->flags & SND_DMAENGINE_PCM_FLAG_COMPAT)) {
pcm->chan[i] = dmaengine_pcm_compat_request_channel(rtd,