diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 42f72c9b78ba..5ace871caeb5 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -2823,6 +2823,9 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) { struct snd_soc_dai *codec_dai; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; +#ifdef CONFIG_AUDIO_QGKI + struct snd_soc_component *component; +#endif struct snd_soc_rtdcom_list *rtdcom; struct snd_pcm *pcm; char new_name[64]; @@ -2911,6 +2914,22 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream->private_data = rtd; if (capture) pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream->private_data = rtd; +#ifdef CONFIG_AUDIO_QGKI + for_each_rtdcom(rtd, rtdcom) { + component = rtdcom->component; + + if (!component->driver->pcm_new) + continue; + + ret = component->driver->pcm_new(rtd); + if (ret < 0) { + dev_err(component->dev, + "ASoC: pcm constructor failed: %d\n", + ret); + return ret; + } + } +#endif goto out; }