i++, (pos) = adg->clk[i])
 #define rsnd_priv_to_adg(priv) ((struct rsnd_adg *)(priv)->adg)
 
-static int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv,
-                                        struct rsnd_mod *mod,
-                                        unsigned int src_rate,
-                                        unsigned int dst_rate)
+int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv,
+                                 struct rsnd_mod *mod,
+                                 unsigned int src_rate,
+                                 unsigned int dst_rate)
 {
        struct rsnd_adg *adg = rsnd_priv_to_adg(priv);
        struct device *dev = rsnd_priv_to_dev(priv);
        return 0;
 }
 
-int rsnd_adg_set_convert_clk(struct rsnd_priv *priv,
-                            struct rsnd_mod *mod,
-                            unsigned int src_rate,
-                            unsigned int dst_rate)
-{
-       if (rsnd_is_gen1(priv))
-               return rsnd_adg_set_convert_clk_gen1(priv, mod,
-                                                    src_rate, dst_rate);
-
-       return -EINVAL;
-}
-
 static void rsnd_adg_set_ssi_clk(struct rsnd_mod *mod, u32 val)
 {
        int id = rsnd_mod_id(mod);
 
                   struct rsnd_priv *priv);
 void rsnd_adg_remove(struct platform_device *pdev,
                   struct rsnd_priv *priv);
-int rsnd_adg_set_convert_clk(struct rsnd_priv *priv,
-                            struct rsnd_mod *mod,
-                            unsigned int src_rate,
-                            unsigned int dst_rate);
+int rsnd_adg_set_convert_clk_gen1(struct rsnd_priv *priv,
+                                 struct rsnd_mod *mod,
+                                 unsigned int src_rate,
+                                 unsigned int dst_rate);
 
 /*
  *     R-Car sound priv
 
                { 0x3, 30, }, /* 8 */
        };
        struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
-       struct rsnd_scu *scu = rsnd_mod_to_scu(mod);
        u32 mask;
        u32 val;
-       int shift;
        int id;
 
        /*
 
        rsnd_mod_bset(mod, SRC_ROUTE_SEL, mask, val);
 
+       return 0;
+}
+
+static int rsnd_scu_set_convert_timing_gen1(struct rsnd_mod *mod,
+                                           struct rsnd_dai *rdai,
+                                           struct rsnd_dai_stream *io)
+{
+       struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
+       struct rsnd_scu *scu = rsnd_mod_to_scu(mod);
+       struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
+       u32 convert_rate = rsnd_scu_convert_rate(scu);
+       u32 mask;
+       u32 val;
+       int shift;
+       int id = rsnd_mod_id(mod);
+       int ret;
+
        /*
         * SRC_TIMING_SELECT
         */
         * SSI WS is used as source clock if SRC is not used
         * (when playback, source/destination become reverse when capture)
         */
-       if (rsnd_scu_convert_rate(scu)) /* use ADG */
+       ret = 0;
+       if (convert_rate) {
+               /* use ADG */
                val = 0;
-       else if (8 == id)               /* use SSI WS, but SRU8 is special */
+               ret = rsnd_adg_set_convert_clk_gen1(priv, mod,
+                                                   runtime->rate,
+                                                   convert_rate);
+       } else if (8 == id) {
+               /* use SSI WS, but SRU8 is special */
                val = id << shift;
-       else                            /* use SSI WS */
+       } else {
+               /* use SSI WS */
                val = (id + 1) << shift;
+       }
+
+       if (ret < 0)
+               return ret;
 
        switch (id / 4) {
        case 0:
 
        if (convert_rate) {
                u32 fsrate = 0x0400000 / convert_rate * runtime->rate;
-               int ret;
 
                /* Enable the initial value of IFS */
                rsnd_mod_write(mod, SRC_IFSCR, 1);
                if (rsnd_is_gen1(priv)) {
                        /* no SRC_BFSSR settings, since SRC_SRCCR::BUFMD is 0 */
                }
-
-               /* set convert clock */
-               ret = rsnd_adg_set_convert_clk(priv, mod,
-                                              runtime->rate,
-                                              convert_rate);
-               if (ret < 0)
-                       return ret;
        }
 
        /* Cancel the initialization and operate the SRC function */
        if (ret < 0)
                return ret;
 
+       ret = rsnd_scu_set_convert_timing_gen1(mod, rdai, io);
+       if (ret < 0)
+               return ret;
+
        return 0;
 }