}
 
 static const struct snd_soc_dai_ops aiu_acodec_ctrl_input_ops = {
+       .probe          = meson_codec_glue_input_dai_probe,
+       .remove         = meson_codec_glue_input_dai_remove,
        .hw_params      = aiu_acodec_ctrl_input_hw_params,
        .set_fmt        = meson_codec_glue_input_set_fmt,
 };
        .name = "ACODEC CTRL " xname,                           \
        .playback = AIU_ACODEC_STREAM(xname, "Playback", 8),    \
        .ops = &aiu_acodec_ctrl_input_ops,                      \
-       .probe = meson_codec_glue_input_dai_probe,              \
-       .remove = meson_codec_glue_input_dai_remove,            \
 }
 
 #define AIU_ACODEC_OUTPUT(xname) {                             \
 
 };
 
 static const struct snd_soc_dai_ops aiu_codec_ctrl_input_ops = {
+       .probe          = meson_codec_glue_input_dai_probe,
+       .remove         = meson_codec_glue_input_dai_remove,
        .hw_params      = meson_codec_glue_input_hw_params,
        .set_fmt        = meson_codec_glue_input_set_fmt,
 };
        .name = "CODEC CTRL " xname,                            \
        .playback = AIU_CODEC_CTRL_STREAM(xname, "Playback"),   \
        .ops = &aiu_codec_ctrl_input_ops,                       \
-       .probe = meson_codec_glue_input_dai_probe,              \
-       .remove = meson_codec_glue_input_dai_remove,            \
 }
 
 #define AIU_CODEC_CTRL_OUTPUT(xname) {                         \
 
 }
 
 const struct snd_soc_dai_ops aiu_fifo_i2s_dai_ops = {
+       .pcm_new        = aiu_fifo_pcm_new,
+       .probe          = aiu_fifo_i2s_dai_probe,
+       .remove         = aiu_fifo_dai_remove,
        .trigger        = aiu_fifo_i2s_trigger,
        .prepare        = aiu_fifo_i2s_prepare,
        .hw_params      = aiu_fifo_i2s_hw_params,
 
 }
 
 const struct snd_soc_dai_ops aiu_fifo_spdif_dai_ops = {
+       .pcm_new        = aiu_fifo_pcm_new,
+       .probe          = aiu_fifo_spdif_dai_probe,
+       .remove         = aiu_fifo_dai_remove,
        .trigger        = fifo_spdif_trigger,
        .prepare        = fifo_spdif_prepare,
        .hw_params      = fifo_spdif_hw_params,
 
                        .formats        = AIU_FORMATS,
                },
                .ops            = &aiu_fifo_i2s_dai_ops,
-               .pcm_new        = aiu_fifo_pcm_new,
-               .probe          = aiu_fifo_i2s_dai_probe,
-               .remove         = aiu_fifo_dai_remove,
        },
        [CPU_SPDIF_FIFO] = {
                .name = "SPDIF FIFO",
                        .formats        = AIU_FORMATS,
                },
                .ops            = &aiu_fifo_spdif_dai_ops,
-               .pcm_new        = aiu_fifo_pcm_new,
-               .probe          = aiu_fifo_spdif_dai_probe,
-               .remove         = aiu_fifo_dai_remove,
        },
        [CPU_I2S_ENCODER] = {
                .name = "I2S Encoder",
 
        .hw_params      = axg_frddr_dai_hw_params,
        .startup        = axg_frddr_dai_startup,
        .shutdown       = axg_frddr_dai_shutdown,
+       .pcm_new        = axg_frddr_pcm_new,
 };
 
 static struct snd_soc_dai_driver axg_frddr_dai_drv = {
                .formats        = AXG_FIFO_FORMATS,
        },
        .ops            = &axg_frddr_ops,
-       .pcm_new        = axg_frddr_pcm_new,
 };
 
 static const char * const axg_frddr_sel_texts[] = {
        .hw_params      = axg_frddr_dai_hw_params,
        .startup        = axg_frddr_dai_startup,
        .shutdown       = axg_frddr_dai_shutdown,
+       .pcm_new        = axg_frddr_pcm_new,
 };
 
 static struct snd_soc_dai_driver g12a_frddr_dai_drv = {
                .formats        = AXG_FIFO_FORMATS,
        },
        .ops            = &g12a_frddr_ops,
-       .pcm_new        = axg_frddr_pcm_new,
 };
 
 static SOC_ENUM_SINGLE_DECL(g12a_frddr_sel1_enum, FIFO_CTRL0, CTRL0_SEL_SHIFT,
 
        clk_disable_unprepare(priv->dclk);
 }
 
-static const struct snd_soc_dai_ops axg_pdm_dai_ops = {
-       .trigger        = axg_pdm_trigger,
-       .hw_params      = axg_pdm_hw_params,
-       .startup        = axg_pdm_startup,
-       .shutdown       = axg_pdm_shutdown,
-};
-
 static void axg_pdm_set_hcic_ctrl(struct axg_pdm *priv)
 {
        const struct axg_pdm_hcic *hcic = &priv->cfg->filters->hcic;
        return 0;
 }
 
+static const struct snd_soc_dai_ops axg_pdm_dai_ops = {
+       .probe          = axg_pdm_dai_probe,
+       .remove         = axg_pdm_dai_remove,
+       .trigger        = axg_pdm_trigger,
+       .hw_params      = axg_pdm_hw_params,
+       .startup        = axg_pdm_startup,
+       .shutdown       = axg_pdm_shutdown,
+};
+
 static struct snd_soc_dai_driver axg_pdm_dai_drv = {
        .name = "PDM",
        .capture = {
                                   SNDRV_PCM_FMTBIT_S32_LE),
        },
        .ops            = &axg_pdm_dai_ops,
-       .probe          = axg_pdm_dai_probe,
-       .remove         = axg_pdm_dai_remove,
 };
 
 static const struct snd_soc_component_driver axg_pdm_component_drv = {
 
 }
 
 static const struct snd_soc_dai_ops axg_spdifin_ops = {
+       .probe          = axg_spdifin_dai_probe,
+       .remove         = axg_spdifin_dai_remove,
        .prepare        = axg_spdifin_prepare,
        .startup        = axg_spdifin_startup,
        .shutdown       = axg_spdifin_shutdown,
 
        drv->name = "SPDIF Input";
        drv->ops = &axg_spdifin_ops;
-       drv->probe = axg_spdifin_dai_probe;
-       drv->remove = axg_spdifin_dai_remove;
        drv->capture.stream_name = "Capture";
        drv->capture.channels_min = 1;
        drv->capture.channels_max = 2;
 
 }
 
 static const struct snd_soc_dai_ops axg_tdm_iface_ops = {
+       .probe          = axg_tdm_iface_probe_dai,
+       .remove         = axg_tdm_iface_remove_dai,
        .set_sysclk     = axg_tdm_iface_set_sysclk,
        .set_fmt        = axg_tdm_iface_set_fmt,
        .startup        = axg_tdm_iface_startup,
                },
                .id = TDM_IFACE_PAD,
                .ops = &axg_tdm_iface_ops,
-               .probe = axg_tdm_iface_probe_dai,
-               .remove = axg_tdm_iface_remove_dai,
        },
        [TDM_IFACE_LOOPBACK] = {
                .name = "TDM Loopback",
                },
                .id = TDM_IFACE_LOOPBACK,
                .ops = &axg_tdm_iface_ops,
-               .probe = axg_tdm_iface_probe_dai,
-               .remove = axg_tdm_iface_remove_dai,
        },
 };
 
 
        .hw_params      = axg_toddr_dai_hw_params,
        .startup        = axg_toddr_dai_startup,
        .shutdown       = axg_toddr_dai_shutdown,
+       .pcm_new        = axg_toddr_pcm_new,
 };
 
 static struct snd_soc_dai_driver axg_toddr_dai_drv = {
                .formats        = AXG_FIFO_FORMATS,
        },
        .ops            = &axg_toddr_ops,
-       .pcm_new        = axg_toddr_pcm_new,
 };
 
 static const char * const axg_toddr_sel_texts[] = {
        .hw_params      = axg_toddr_dai_hw_params,
        .startup        = g12a_toddr_dai_startup,
        .shutdown       = axg_toddr_dai_shutdown,
+       .pcm_new        = axg_toddr_pcm_new,
 };
 
 static struct snd_soc_dai_driver g12a_toddr_dai_drv = {
                .formats        = AXG_FIFO_FORMATS,
        },
        .ops            = &g12a_toddr_ops,
-       .pcm_new        = axg_toddr_pcm_new,
 };
 
 static const struct snd_soc_component_driver g12a_toddr_component_drv = {
 
 }
 
 static const struct snd_soc_dai_ops g12a_toacodec_input_ops = {
+       .probe          = meson_codec_glue_input_dai_probe,
+       .remove         = meson_codec_glue_input_dai_remove,
        .hw_params      = g12a_toacodec_input_hw_params,
        .set_fmt        = meson_codec_glue_input_set_fmt,
 };
        .id = (xid),                                                    \
        .playback = TOACODEC_STREAM(xname, "Playback", 8),              \
        .ops = &g12a_toacodec_input_ops,                                \
-       .probe = meson_codec_glue_input_dai_probe,                      \
-       .remove = meson_codec_glue_input_dai_remove,                    \
 }
 
 #define TOACODEC_OUTPUT(xname, xid) {                                  \
 
 };
 
 static const struct snd_soc_dai_ops g12a_tohdmitx_input_ops = {
+       .probe          = meson_codec_glue_input_dai_probe,
+       .remove         = meson_codec_glue_input_dai_remove,
        .hw_params      = meson_codec_glue_input_hw_params,
        .set_fmt        = meson_codec_glue_input_set_fmt,
 };
        .id = (xid),                                                    \
        .playback = TOHDMITX_STREAM(xname, "Playback", xfmt, xchmax),   \
        .ops = &g12a_tohdmitx_input_ops,                                \
-       .probe = meson_codec_glue_input_dai_probe,                      \
-       .remove = meson_codec_glue_input_dai_remove,                    \
 }
 
 #define TOHDMITX_OUT(xname, xid, xfmt, xchmax) {                       \