return 0;
 }
 
-const struct snd_soc_dai_ops uniphier_aio_i2s_ops = {
-       .set_sysclk  = uniphier_aio_set_sysclk,
-       .set_pll     = uniphier_aio_set_pll,
-       .set_fmt     = uniphier_aio_set_fmt,
-       .startup     = uniphier_aio_startup,
-       .shutdown    = uniphier_aio_shutdown,
-       .hw_params   = uniphier_aio_hw_params,
-       .hw_free     = uniphier_aio_hw_free,
-       .prepare     = uniphier_aio_prepare,
-};
-EXPORT_SYMBOL_GPL(uniphier_aio_i2s_ops);
-
-const struct snd_soc_dai_ops uniphier_aio_spdif_ops = {
-       .set_sysclk  = uniphier_aio_set_sysclk,
-       .set_pll     = uniphier_aio_set_pll,
-       .startup     = uniphier_aio_startup,
-       .shutdown    = uniphier_aio_shutdown,
-       .hw_params   = uniphier_aio_hw_params,
-       .hw_free     = uniphier_aio_hw_free,
-       .prepare     = uniphier_aio_prepare,
-};
-EXPORT_SYMBOL_GPL(uniphier_aio_spdif_ops);
-
-int uniphier_aio_dai_probe(struct snd_soc_dai *dai)
+static int uniphier_aio_dai_probe(struct snd_soc_dai *dai)
 {
        struct uniphier_aio *aio = uniphier_priv(dai);
        int i;
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(uniphier_aio_dai_probe);
 
-int uniphier_aio_dai_remove(struct snd_soc_dai *dai)
+static int uniphier_aio_dai_remove(struct snd_soc_dai *dai)
 {
        struct uniphier_aio *aio = uniphier_priv(dai);
 
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(uniphier_aio_dai_remove);
+
+static int uniphier_aio_ld11_probe(struct snd_soc_dai *dai)
+{
+       int ret;
+
+       ret = uniphier_aio_dai_probe(dai);
+       if (ret < 0)
+               return ret;
+
+       ret = snd_soc_dai_set_pll(dai, AUD_PLL_A1, 0, 0, 36864000);
+       if (ret < 0)
+               return ret;
+       ret = snd_soc_dai_set_pll(dai, AUD_PLL_F1, 0, 0, 36864000);
+       if (ret < 0)
+               return ret;
+
+       ret = snd_soc_dai_set_pll(dai, AUD_PLL_A2, 0, 0, 33868800);
+       if (ret < 0)
+               return ret;
+       ret = snd_soc_dai_set_pll(dai, AUD_PLL_F2, 0, 0, 33868800);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+static int uniphier_aio_pxs2_probe(struct snd_soc_dai *dai)
+{
+       int ret;
+
+       ret = uniphier_aio_dai_probe(dai);
+       if (ret < 0)
+               return ret;
+
+       ret = snd_soc_dai_set_pll(dai, AUD_PLL_A1, 0, 0, 36864000);
+       if (ret < 0)
+               return ret;
+       ret = snd_soc_dai_set_pll(dai, AUD_PLL_F1, 0, 0, 36864000);
+       if (ret < 0)
+               return ret;
+
+       ret = snd_soc_dai_set_pll(dai, AUD_PLL_A2, 0, 0, 33868800);
+       if (ret < 0)
+               return ret;
+       ret = snd_soc_dai_set_pll(dai, AUD_PLL_F2, 0, 0, 33868800);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+const struct snd_soc_dai_ops uniphier_aio_i2s_ld11_ops = {
+       .probe          = uniphier_aio_ld11_probe,
+       .remove         = uniphier_aio_dai_remove,
+       .set_sysclk     = uniphier_aio_set_sysclk,
+       .set_pll        = uniphier_aio_set_pll,
+       .set_fmt        = uniphier_aio_set_fmt,
+       .startup        = uniphier_aio_startup,
+       .shutdown       = uniphier_aio_shutdown,
+       .hw_params      = uniphier_aio_hw_params,
+       .hw_free        = uniphier_aio_hw_free,
+       .prepare        = uniphier_aio_prepare,
+};
+EXPORT_SYMBOL_GPL(uniphier_aio_i2s_ld11_ops);
+
+const struct snd_soc_dai_ops uniphier_aio_spdif_ld11_ops = {
+       .probe          = uniphier_aio_ld11_probe,
+       .remove         = uniphier_aio_dai_remove,
+       .set_sysclk     = uniphier_aio_set_sysclk,
+       .set_pll        = uniphier_aio_set_pll,
+       .startup        = uniphier_aio_startup,
+       .shutdown       = uniphier_aio_shutdown,
+       .hw_params      = uniphier_aio_hw_params,
+       .hw_free        = uniphier_aio_hw_free,
+       .prepare        = uniphier_aio_prepare,
+};
+EXPORT_SYMBOL_GPL(uniphier_aio_spdif_ld11_ops);
+
+const struct snd_soc_dai_ops uniphier_aio_spdif_ld11_ops2 = {
+       .probe          = uniphier_aio_ld11_probe,
+       .remove         = uniphier_aio_dai_remove,
+       .set_sysclk     = uniphier_aio_set_sysclk,
+       .set_pll        = uniphier_aio_set_pll,
+       .startup        = uniphier_aio_startup,
+       .shutdown       = uniphier_aio_shutdown,
+       .hw_params      = uniphier_aio_hw_params,
+       .hw_free        = uniphier_aio_hw_free,
+       .prepare        = uniphier_aio_prepare,
+       .compress_new   = snd_soc_new_compress,
+};
+EXPORT_SYMBOL_GPL(uniphier_aio_spdif_ld11_ops2);
+
+const struct snd_soc_dai_ops uniphier_aio_i2s_pxs2_ops = {
+       .probe          = uniphier_aio_pxs2_probe,
+       .remove         = uniphier_aio_dai_remove,
+       .set_sysclk     = uniphier_aio_set_sysclk,
+       .set_pll        = uniphier_aio_set_pll,
+       .set_fmt        = uniphier_aio_set_fmt,
+       .startup        = uniphier_aio_startup,
+       .shutdown       = uniphier_aio_shutdown,
+       .hw_params      = uniphier_aio_hw_params,
+       .hw_free        = uniphier_aio_hw_free,
+       .prepare        = uniphier_aio_prepare,
+};
+EXPORT_SYMBOL_GPL(uniphier_aio_i2s_pxs2_ops);
+
+const struct snd_soc_dai_ops uniphier_aio_spdif_pxs2_ops = {
+       .probe          = uniphier_aio_pxs2_probe,
+       .remove         = uniphier_aio_dai_remove,
+       .set_sysclk     = uniphier_aio_set_sysclk,
+       .set_pll        = uniphier_aio_set_pll,
+       .startup        = uniphier_aio_startup,
+       .shutdown       = uniphier_aio_shutdown,
+       .hw_params      = uniphier_aio_hw_params,
+       .hw_free        = uniphier_aio_hw_free,
+       .prepare        = uniphier_aio_prepare,
+};
+EXPORT_SYMBOL_GPL(uniphier_aio_spdif_pxs2_ops);
+
+const struct snd_soc_dai_ops uniphier_aio_spdif_pxs2_ops2 = {
+       .probe          = uniphier_aio_pxs2_probe,
+       .remove         = uniphier_aio_dai_remove,
+       .set_sysclk     = uniphier_aio_set_sysclk,
+       .set_pll        = uniphier_aio_set_pll,
+       .startup        = uniphier_aio_startup,
+       .shutdown       = uniphier_aio_shutdown,
+       .hw_params      = uniphier_aio_hw_params,
+       .hw_free        = uniphier_aio_hw_free,
+       .prepare        = uniphier_aio_prepare,
+       .compress_new   = snd_soc_new_compress,
+};
+EXPORT_SYMBOL_GPL(uniphier_aio_spdif_pxs2_ops2);
 
 static void uniphier_aio_dai_suspend(struct snd_soc_dai *dai)
 {
 
        [AUD_PLL_HSC0] = { .enable = true, },
 };
 
-static int uniphier_aio_ld11_probe(struct snd_soc_dai *dai)
-{
-       int ret;
-
-       ret = uniphier_aio_dai_probe(dai);
-       if (ret < 0)
-               return ret;
-
-       ret = snd_soc_dai_set_pll(dai, AUD_PLL_A1, 0, 0, 36864000);
-       if (ret < 0)
-               return ret;
-       ret = snd_soc_dai_set_pll(dai, AUD_PLL_F1, 0, 0, 36864000);
-       if (ret < 0)
-               return ret;
-
-       ret = snd_soc_dai_set_pll(dai, AUD_PLL_A2, 0, 0, 33868800);
-       if (ret < 0)
-               return ret;
-       ret = snd_soc_dai_set_pll(dai, AUD_PLL_F2, 0, 0, 33868800);
-       if (ret < 0)
-               return ret;
-
-       return 0;
-}
-
 static struct snd_soc_dai_driver uniphier_aio_dai_ld11[] = {
        {
                .name    = AUD_GNAME_HDMI,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_PCMOUT1,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_ld11_ops,
        },
        {
                .name    = AUD_NAME_PCMIN2,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
                .capture = {
                        .stream_name = AUD_NAME_PCMIN2,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_ld11_ops,
        },
        {
                .name    = AUD_GNAME_LINE,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_PCMOUT2,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_ld11_ops,
        },
        {
                .name    = AUD_NAME_HPCMOUT1,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_HPCMOUT1,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 8,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_ld11_ops,
        },
        {
                .name    = AUD_NAME_PCMOUT3,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_PCMOUT3,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_ld11_ops,
        },
        {
                .name    = AUD_NAME_HIECOUT1,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_HIECOUT1,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_spdif_ops,
+               .ops = &uniphier_aio_spdif_ld11_ops,
        },
        {
                .name    = AUD_NAME_EPCMOUT2,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_EPCMOUT2,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_ld11_ops,
        },
        {
                .name    = AUD_NAME_EPCMOUT3,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_EPCMOUT3,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_ld11_ops,
        },
        {
                .name    = AUD_NAME_HIECCOMPOUT1,
-               .probe   = uniphier_aio_ld11_probe,
-               .remove  = uniphier_aio_dai_remove,
-               .compress_new = snd_soc_new_compress,
                .playback = {
                        .stream_name = AUD_NAME_HIECCOMPOUT1,
                        .channels_min = 1,
                        .channels_max = 1,
                },
-               .ops = &uniphier_aio_spdif_ops,
+               .ops = &uniphier_aio_spdif_ld11_ops2,
        },
 };
 
 
        [AUD_PLL_HSC0] = { .enable = true, },
 };
 
-static int uniphier_aio_pxs2_probe(struct snd_soc_dai *dai)
-{
-       int ret;
-
-       ret = uniphier_aio_dai_probe(dai);
-       if (ret < 0)
-               return ret;
-
-       ret = snd_soc_dai_set_pll(dai, AUD_PLL_A1, 0, 0, 36864000);
-       if (ret < 0)
-               return ret;
-       ret = snd_soc_dai_set_pll(dai, AUD_PLL_F1, 0, 0, 36864000);
-       if (ret < 0)
-               return ret;
-
-       ret = snd_soc_dai_set_pll(dai, AUD_PLL_A2, 0, 0, 33868800);
-       if (ret < 0)
-               return ret;
-       ret = snd_soc_dai_set_pll(dai, AUD_PLL_F2, 0, 0, 33868800);
-       if (ret < 0)
-               return ret;
-
-       return 0;
-}
-
 static struct snd_soc_dai_driver uniphier_aio_dai_pxs2[] = {
        {
                .name    = AUD_GNAME_HDMI,
-               .probe   = uniphier_aio_pxs2_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_HPCMOUT1,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_pxs2_ops,
        },
        {
                .name    = AUD_GNAME_LINE,
-               .probe   = uniphier_aio_pxs2_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_PCMOUT1,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_pxs2_ops,
        },
        {
                .name    = AUD_GNAME_AUX,
-               .probe   = uniphier_aio_pxs2_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_PCMOUT2,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_i2s_ops,
+               .ops = &uniphier_aio_i2s_pxs2_ops,
        },
        {
                .name    = AUD_NAME_HIECOUT1,
-               .probe   = uniphier_aio_pxs2_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_HIECOUT1,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_spdif_ops,
+               .ops = &uniphier_aio_spdif_pxs2_ops,
        },
        {
                .name    = AUD_NAME_IECOUT1,
-               .probe   = uniphier_aio_pxs2_probe,
-               .remove  = uniphier_aio_dai_remove,
                .playback = {
                        .stream_name = AUD_NAME_IECOUT1,
                        .formats     = SNDRV_PCM_FMTBIT_S32_LE,
                        .channels_min = 2,
                        .channels_max = 2,
                },
-               .ops = &uniphier_aio_spdif_ops,
+               .ops = &uniphier_aio_spdif_pxs2_ops,
        },
        {
                .name    = AUD_NAME_HIECCOMPOUT1,
-               .probe   = uniphier_aio_pxs2_probe,
-               .remove  = uniphier_aio_dai_remove,
-               .compress_new = snd_soc_new_compress,
                .playback = {
                        .stream_name = AUD_NAME_HIECCOMPOUT1,
                        .channels_min = 1,
                        .channels_max = 1,
                },
-               .ops = &uniphier_aio_spdif_ops,
+               .ops = &uniphier_aio_spdif_pxs2_ops2,
        },
        {
                .name    = AUD_NAME_IECCOMPOUT1,
-               .probe   = uniphier_aio_pxs2_probe,
-               .remove  = uniphier_aio_dai_remove,
-               .compress_new = snd_soc_new_compress,
                .playback = {
                        .stream_name = AUD_NAME_IECCOMPOUT1,
                        .channels_min = 1,
                        .channels_max = 1,
                },
-               .ops = &uniphier_aio_spdif_ops,
+               .ops = &uniphier_aio_spdif_pxs2_ops2,
        },
 };
 
 
 int uniphier_aiodma_soc_register_platform(struct platform_device *pdev);
 extern const struct snd_compress_ops uniphier_aio_compress_ops;
 
-int uniphier_aio_dai_probe(struct snd_soc_dai *dai);
-int uniphier_aio_dai_remove(struct snd_soc_dai *dai);
 int uniphier_aio_probe(struct platform_device *pdev);
 int uniphier_aio_remove(struct platform_device *pdev);
-extern const struct snd_soc_dai_ops uniphier_aio_i2s_ops;
-extern const struct snd_soc_dai_ops uniphier_aio_spdif_ops;
+extern const struct snd_soc_dai_ops uniphier_aio_i2s_ld11_ops;
+extern const struct snd_soc_dai_ops uniphier_aio_i2s_pxs2_ops;
+extern const struct snd_soc_dai_ops uniphier_aio_spdif_ld11_ops;
+extern const struct snd_soc_dai_ops uniphier_aio_spdif_ld11_ops2;
+extern const struct snd_soc_dai_ops uniphier_aio_spdif_pxs2_ops;
+extern const struct snd_soc_dai_ops uniphier_aio_spdif_pxs2_ops2;
 
 u64 aio_rb_cnt(struct uniphier_aio_sub *sub);
 u64 aio_rbt_cnt_to_end(struct uniphier_aio_sub *sub);