return 0;
 }
 
+static bool snd_soc_component_is_codec_on_rtd(struct snd_soc_pcm_runtime *rtd,
+                                             struct snd_soc_component *component)
+{
+       struct snd_soc_dai *dai;
+       int i;
+
+       for_each_rtd_codec_dais(rtd, i, dai) {
+               if (dai->component == component)
+                       return true;
+       }
+
+       return false;
+}
+
 void snd_soc_pcm_component_delay(struct snd_pcm_substream *substream,
                                 snd_pcm_sframes_t *cpu_delay,
                                 snd_pcm_sframes_t *codec_delay)
 
                delay = component->driver->delay(component, substream);
 
-               if (snd_soc_component_is_codec(component))
+               if (snd_soc_component_is_codec_on_rtd(rtd, component))
                        *codec_delay = max(*codec_delay, delay);
                else
                        *cpu_delay = max(*cpu_delay, delay);