aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/soc-generic-dmaengine-pcm.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/sound/soc/soc-generic-dmaengine-pcm.c b/sound/soc/soc-generic-dmaengine-pcm.c
index 87e86357124e..fbc28a799e06 100644
--- a/sound/soc/soc-generic-dmaengine-pcm.c
+++ b/sound/soc/soc-generic-dmaengine-pcm.c
@@ -291,21 +291,26 @@ static void dmaengine_pcm_request_chan_of(struct dmaengine_pcm *pcm,
291 struct device *dev) 291 struct device *dev)
292{ 292{
293 unsigned int i; 293 unsigned int i;
294 const char *name;
294 295
295 if ((pcm->flags & (SND_DMAENGINE_PCM_FLAG_NO_DT | 296 if ((pcm->flags & (SND_DMAENGINE_PCM_FLAG_NO_DT |
296 SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME)) || 297 SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME)) ||
297 !dev->of_node) 298 !dev->of_node)
298 return; 299 return;
299 300
300 if (pcm->flags & SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX) { 301 for (i = SNDRV_PCM_STREAM_PLAYBACK; i <= SNDRV_PCM_STREAM_CAPTURE;
301 pcm->chan[0] = dma_request_slave_channel(dev, "rx-tx"); 302 i++) {
302 pcm->chan[1] = pcm->chan[0]; 303 if (pcm->flags & SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX)
303 } else { 304 name = "rx-tx";
304 for (i = SNDRV_PCM_STREAM_PLAYBACK; i <= SNDRV_PCM_STREAM_CAPTURE; i++) { 305 else
305 pcm->chan[i] = dma_request_slave_channel(dev, 306 name = dmaengine_pcm_dma_channel_names[i];
306 dmaengine_pcm_dma_channel_names[i]); 307 pcm->chan[i] = dma_request_slave_channel(dev, name);
307 } 308 if (pcm->flags & SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX)
309 break;
308 } 310 }
311
312 if (pcm->flags & SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX)
313 pcm->chan[1] = pcm->chan[0];
309} 314}
310 315
311/** 316/**