|
@@ -183,6 +183,8 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
|
|
{
|
|
|
struct dmaengine_pcm *pcm = soc_platform_to_pcm(rtd->platform);
|
|
|
const struct snd_dmaengine_pcm_config *config = pcm->config;
|
|
|
+ struct device *dev = rtd->platform->dev;
|
|
|
+ struct snd_dmaengine_dai_dma_data *dma_data;
|
|
|
struct snd_pcm_substream *substream;
|
|
|
size_t prealloc_buffer_size;
|
|
|
size_t max_buffer_size;
|
|
@@ -203,6 +205,13 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
|
|
if (!substream)
|
|
|
continue;
|
|
|
|
|
|
+ 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->chan[i] = dma_request_slave_channel(dev,
|
|
|
+ dma_data->chan_name);
|
|
|
+
|
|
|
if (!pcm->chan[i] && (pcm->flags & SND_DMAENGINE_PCM_FLAG_COMPAT)) {
|
|
|
pcm->chan[i] = dmaengine_pcm_compat_request_channel(rtd,
|
|
|
substream);
|
|
@@ -275,7 +284,9 @@ static void dmaengine_pcm_request_chan_of(struct dmaengine_pcm *pcm,
|
|
|
{
|
|
|
unsigned int i;
|
|
|
|
|
|
- if ((pcm->flags & SND_DMAENGINE_PCM_FLAG_NO_DT) || !dev->of_node)
|
|
|
+ if ((pcm->flags & (SND_DMAENGINE_PCM_FLAG_NO_DT |
|
|
|
+ SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME)) ||
|
|
|
+ !dev->of_node)
|
|
|
return;
|
|
|
|
|
|
if (pcm->flags & SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX) {
|