diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c
index a53235c..5bdffa4 100644
--- a/sound/soc/sh/rcar/adg.c
+++ b/sound/soc/sh/rcar/adg.c
@@ -30,10 +30,10 @@ struct rsnd_adg {
 	     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);
@@ -91,18 +91,6 @@ find_rate:
 	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);
diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h
index a9c5830..3991455 100644
--- a/sound/soc/sh/rcar/rsnd.h
+++ b/sound/soc/sh/rcar/rsnd.h
@@ -246,10 +246,10 @@ int rsnd_adg_probe(struct platform_device *pdev,
 		   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
diff --git a/sound/soc/sh/rcar/scu.c b/sound/soc/sh/rcar/scu.c
index 2f839f7..e2ffcc4 100644
--- a/sound/soc/sh/rcar/scu.c
+++ b/sound/soc/sh/rcar/scu.c
@@ -172,10 +172,8 @@ static int rsnd_src_set_route_if_gen1(
 		{ 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;
 
 	/*
@@ -197,6 +195,23 @@ static int rsnd_src_set_route_if_gen1(
 
 	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
 	 */
@@ -209,12 +224,23 @@ static int rsnd_src_set_route_if_gen1(
 	 * 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:
@@ -284,7 +310,6 @@ static int rsnd_scu_set_convert_rate(struct rsnd_mod *mod,
 
 	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);
@@ -301,13 +326,6 @@ static int rsnd_scu_set_convert_rate(struct rsnd_mod *mod,
 		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 */
@@ -340,6 +358,10 @@ static int rsnd_scu_init(struct rsnd_mod *mod,
 	if (ret < 0)
 		return ret;
 
+	ret = rsnd_scu_set_convert_timing_gen1(mod, rdai, io);
+	if (ret < 0)
+		return ret;
+
 	return 0;
 }
 
