struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
        int rfs, ret;
        unsigned long rclk;
 
                                    struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
        unsigned int rfs, rclk;
 
        /* Ensure AIF1CLK is >= 3 MHz for optimal performance */
 
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[DAI_DSP_CODEC]);
-       codec_dai = rtd->codec_dai;
+       codec_dai = asoc_rtd_to_codec(rtd, 0);
        component = codec_dai->component;
 
        if (dapm->dev != codec_dai->dev)
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[DAI_DSP_CODEC]);
-       codec_dai = rtd->codec_dai;
+       codec_dai = asoc_rtd_to_codec(rtd, 0);
        component = codec_dai->component;
 
        if (dapm->dev != codec_dai->dev)
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[DAI_AP_DSP]);
-       wm0010 = rtd->codec_dai->component;
+       wm0010 = asoc_rtd_to_codec(rtd, 0)->component;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[DAI_DSP_CODEC]);
-       component = rtd->codec_dai->component;
-       aif1_dai = rtd->codec_dai;
+       component = asoc_rtd_to_codec(rtd, 0)->component;
+       aif1_dai = asoc_rtd_to_codec(rtd, 0);
 
        ret = snd_soc_component_set_sysclk(component, ARIZONA_CLK_SYSCLK,
                                       ARIZONA_CLK_SRC_FLL1,
        }
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[DAI_CODEC_CP]);
-       aif2_dai = rtd->cpu_dai;
+       aif2_dai = asoc_rtd_to_cpu(rtd, 0);
 
        ret = snd_soc_dai_set_sysclk(aif2_dai, ARIZONA_CLK_ASYNCCLK, 0, 0);
        if (ret != 0) {
                return 0;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[DAI_CODEC_SUB]);
-       aif3_dai = rtd->cpu_dai;
-       wm9081_dai = rtd->codec_dai;
+       aif3_dai = asoc_rtd_to_cpu(rtd, 0);
+       wm9081_dai = asoc_rtd_to_codec(rtd, 0);
 
        ret = snd_soc_dai_set_sysclk(aif3_dai, ARIZONA_CLK_SYSCLK, 0, 0);
        if (ret != 0) {
 
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        int div;
        int ret;
        unsigned int rate = params_rate(params);
 
        struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai);
        int capture = (substream->stream == SNDRV_PCM_STREAM_CAPTURE);
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct i2s_dai *i2s = to_info(rtd->cpu_dai);
+       struct i2s_dai *i2s = to_info(asoc_rtd_to_cpu(rtd, 0));
        unsigned long flags;
 
        switch (cmd) {
 
                          struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        struct s3c_i2sv2_rate_calc div;
        unsigned int clk = 0;
        int ret = 0;
 
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
-       aif1_dai = rtd->codec_dai;
+       aif1_dai = asoc_rtd_to_codec(rtd, 0);
 
        if (dapm->dev != aif1_dai->dev)
                return 0;
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
-       aif1_dai = rtd->codec_dai;
+       aif1_dai = asoc_rtd_to_codec(rtd, 0);
 
        if (dapm->dev != aif1_dai->dev)
                return 0;
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
        int ret;
 
        sample_rate = params_rate(params);
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[1]);
-       aif2_dai = rtd->cpu_dai;
+       aif2_dai = asoc_rtd_to_cpu(rtd, 0);
 
        switch (event) {
        case SND_SOC_DAPM_PRE_PMU:
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
-       component = rtd->codec_dai->component;
-       aif1_dai = rtd->codec_dai;
+       component = asoc_rtd_to_codec(rtd, 0)->component;
+       aif1_dai = asoc_rtd_to_codec(rtd, 0);
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[1]);
-       aif2_dai = rtd->cpu_dai;
+       aif2_dai = asoc_rtd_to_cpu(rtd, 0);
 
        ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2,
                                     32768, SND_SOC_CLOCK_IN);
 
 
 static int lowland_wm5100_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct snd_soc_component *component = rtd->codec_dai->component;
+       struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
        int ret;
 
        ret = snd_soc_component_set_sysclk(component, WM5100_CLK_SYSCLK,
 
 static int lowland_wm9081_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct snd_soc_component *component = rtd->codec_dai->component;
+       struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
 
        snd_soc_dapm_nc_pin(&rtd->card->dapm, "LINEOUT");
 
 
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        unsigned int pll_out = 0, bclk = 0;
        int ret = 0;
        unsigned long iis_clkrate;
 static int neo1973_hifi_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
 
        /* disable the PLL */
        return snd_soc_dai_set_pll(codec_dai, WM8753_PLL1, 0, 0, 0);
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
        unsigned int pcmdiv = 0;
        int ret = 0;
        unsigned long iis_clkrate;
 static int neo1973_voice_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
 
        /* disable the PLL */
        return snd_soc_dai_set_pll(codec_dai, WM8753_PLL2, 0, 0, 0);
 
                return ret;
 
        if (rtd->num_codecs > 1) {
-               struct snd_soc_dai *codec_dai = rtd->codec_dais[1];
+               struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 1);
 
                ret = snd_soc_dai_set_sysclk(codec_dai, 0, rclk_freq,
                                             SND_SOC_CLOCK_IN);
 
                               struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(rtd->cpu_dai);
+       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
        unsigned long flags;
 
        dev_dbg(pcm->dev, "Entered %s\n", __func__);
                                 struct snd_soc_dai *socdai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(rtd->cpu_dai);
+       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0));
        void __iomem *regs = pcm->regs;
        struct clk *clk;
        int sclk_div, sync_div;
 
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        int div;
        int ret;
        unsigned int rate = params_rate(params);
 
                               struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct s3c_i2sv2_info *i2s = to_info(rtd->cpu_dai);
+       struct s3c_i2sv2_info *i2s = to_info(asoc_rtd_to_cpu(rtd, 0));
        int capture = (substream->stream == SNDRV_PCM_STREAM_CAPTURE);
        unsigned long irqs;
        int ret = 0;
 
                            struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        int ret;
 
        ret = snd_soc_dai_set_sysclk(codec_dai, 0,
 
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct s3c24xx_uda134x *priv = snd_soc_card_get_drvdata(rtd->card);
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        int ret = 0;
 
        mutex_lock(&priv->clk_lock);
                                        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        unsigned int clk = 0;
        int ret = 0;
        int clk_source, fs_mode;
 
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        unsigned int clk = 0;
        int ret;
 
 
                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        unsigned long pll_out, rclk_rate;
        int ret, ratio;
 
 
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
        unsigned int pll_out;
        int rfs, ret;
 
 
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
        unsigned int pll_out;
        int ret;
 
 
                              struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        unsigned long mclk_freq;
        int rfs, ret;
 
 
 
        /* In the multi-codec case codec_dais 0 is MAX98095 and 1 is HDMI. */
        if (rtd->num_codecs > 1)
-               codec_dai = rtd->codec_dais[0];
+               codec_dai = asoc_rtd_to_codec(rtd, 0);
        else
-               codec_dai = rtd->codec_dai;
+               codec_dai = asoc_rtd_to_codec(rtd, 0);
 
        /* Set the MCLK rate for the codec */
        return snd_soc_dai_set_sysclk(codec_dai, 0,
 
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct samsung_spdif_info *spdif = to_info(rtd->cpu_dai);
+       struct samsung_spdif_info *spdif = to_info(asoc_rtd_to_cpu(rtd, 0));
        unsigned long flags;
 
        dev_dbg(spdif->dev, "Entered %s\n", __func__);
                                struct snd_soc_dai *socdai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct samsung_spdif_info *spdif = to_info(rtd->cpu_dai);
+       struct samsung_spdif_info *spdif = to_info(asoc_rtd_to_cpu(rtd, 0));
        void __iomem *regs = spdif->regs;
        struct snd_dmaengine_dai_dma_data *dma_data;
        u32 con, clkcon, cstas;
                return -EINVAL;
        }
 
-       snd_soc_dai_set_dma_data(rtd->cpu_dai, substream, dma_data);
+       snd_soc_dai_set_dma_data(asoc_rtd_to_cpu(rtd, 0), substream, dma_data);
 
        spin_lock_irqsave(&spdif->lock, flags);
 
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct samsung_spdif_info *spdif = to_info(rtd->cpu_dai);
+       struct samsung_spdif_info *spdif = to_info(asoc_rtd_to_cpu(rtd, 0));
        void __iomem *regs = spdif->regs;
        u32 con, clkcon;
 
 
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[1]);
-       codec_dai = rtd->codec_dai;
+       codec_dai = asoc_rtd_to_codec(rtd, 0);
 
        if (dapm->dev != codec_dai->dev)
                return 0;
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[1]);
-       codec_dai = rtd->codec_dai;
+       codec_dai = asoc_rtd_to_codec(rtd, 0);
 
        if (dapm->dev != codec_dai->dev)
                return 0;
 
 static int speyside_wm0010_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct snd_soc_dai *dai = rtd->codec_dai;
+       struct snd_soc_dai *dai = asoc_rtd_to_codec(rtd, 0);
        int ret;
 
        ret = snd_soc_dai_set_sysclk(dai, 0, MCLK_AUDIO_RATE, 0);
 
 static int speyside_wm8996_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct snd_soc_dai *dai = rtd->codec_dai;
+       struct snd_soc_dai *dai = asoc_rtd_to_codec(rtd, 0);
        struct snd_soc_component *component = dai->component;
        int ret;
 
 
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_component *component = rtd->codec_dai->component;
+       struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
        struct tm2_machine_priv *priv = snd_soc_card_get_drvdata(rtd->card);
 
        switch (params_rate(params)) {
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_component *component = rtd->codec_dai->component;
+       struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
        unsigned int asyncclk_rate;
        int ret;
 
 static int tm2_aif2_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_component *component = rtd->codec_dai->component;
+       struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
        int ret;
 
        /* disable FLL2 */
                              struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0);
        unsigned int bfs;
        int bitwidth, ret;
 
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
 
-       if (dapm->dev != rtd->codec_dai->dev)
+       if (dapm->dev != asoc_rtd_to_codec(rtd, 0)->dev)
                return 0;
 
        switch (level) {
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[TM2_DAI_AIF1]);
-       aif1_dai = rtd->codec_dai;
-       priv->component = rtd->codec_dai->component;
+       aif1_dai = asoc_rtd_to_codec(rtd, 0);
+       priv->component = asoc_rtd_to_codec(rtd, 0)->component;
 
        ret = snd_soc_dai_set_sysclk(aif1_dai, ARIZONA_CLK_SYSCLK, 0, 0);
        if (ret < 0) {
        }
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[TM2_DAI_AIF2]);
-       aif2_dai = rtd->codec_dai;
+       aif2_dai = asoc_rtd_to_codec(rtd, 0);
 
        ret = snd_soc_dai_set_sysclk(aif2_dai, ARIZONA_CLK_ASYNCCLK, 0, 0);
        if (ret < 0) {
 
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
-       codec_dai = rtd->codec_dai;
+       codec_dai = asoc_rtd_to_codec(rtd, 0);
 
        if (dapm->dev != codec_dai->dev)
                return 0;
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
-       codec_dai = rtd->codec_dai;
+       codec_dai = asoc_rtd_to_codec(rtd, 0);
 
        if (dapm->dev != codec_dai->dev)
                return 0;
        int ret;
 
        rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
-       component = rtd->codec_dai->component;
-       codec_dai = rtd->codec_dai;
+       component = asoc_rtd_to_codec(rtd, 0)->component;
+       codec_dai = asoc_rtd_to_codec(rtd, 0);
 
        ret = snd_soc_dai_set_sysclk(codec_dai, WM8962_SYSCLK_MCLK,
                                     32768, SND_SOC_CLOCK_IN);