diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index c6ea7580525b..722160f78009 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -3118,6 +3118,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]; @@ -3206,6 +3209,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; }