diff --git a/sound/soc/rockchip/rockchip_i2s_tdm.c b/sound/soc/rockchip/rockchip_i2s_tdm.c
index 927b636db3ca6c593874db1bfe94ef23b4816f75..5fac4f4d5e9f61141b03a64d5c412809f9e74b5c 100644
--- a/sound/soc/rockchip/rockchip_i2s_tdm.c
+++ b/sound/soc/rockchip/rockchip_i2s_tdm.c
@@ -51,6 +51,8 @@ struct rk_i2s_tdm_dev {
 	struct clk *hclk;
 	struct clk *mclk_tx;
 	struct clk *mclk_rx;
+	unsigned int mclk_rx_freq;
+	unsigned int mclk_tx_freq;
 	struct regmap *regmap;
 	struct regmap *grf;
 	struct snd_dmaengine_dai_dma_data capture_dma_data;
@@ -656,18 +658,23 @@ static int rockchip_i2s_tdm_hw_params(struct snd_pcm_substream *substream,
 
 	if (i2s_tdm->is_master_mode) {
 		struct clk *mclk;
+		unsigned int freq;
 
 		if (i2s_tdm->clk_trcm == TRCM_TX) {
 			mclk = i2s_tdm->mclk_tx;
+			freq = i2s_tdm->mclk_tx_freq ? i2s_tdm->mclk_tx_freq : DEFAULT_MCLK_FS * params_rate(params);
 		} else if (i2s_tdm->clk_trcm == TRCM_RX) {
 			mclk = i2s_tdm->mclk_rx;
+			freq = i2s_tdm->mclk_rx_freq ? i2s_tdm->mclk_rx_freq : DEFAULT_MCLK_FS * params_rate(params);
 		} else if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
 			mclk = i2s_tdm->mclk_tx;
+			freq = i2s_tdm->mclk_tx_freq ? i2s_tdm->mclk_tx_freq : DEFAULT_MCLK_FS * params_rate(params);
 		} else {
 			mclk = i2s_tdm->mclk_rx;
+			freq = i2s_tdm->mclk_rx_freq ? i2s_tdm->mclk_rx_freq : DEFAULT_MCLK_FS * params_rate(params);
 		}
-
-		err = clk_set_rate(mclk, DEFAULT_MCLK_FS * params_rate(params));
+		
+		err = clk_set_rate(mclk, freq);
 		if (err)
 			return err;
 
@@ -777,7 +784,6 @@ static int rockchip_i2s_tdm_trigger(struct snd_pcm_substream *substream,
 	return 0;
 }
 
-#if 0 // Added in merge conflic, check if needed
 static int rockchip_i2s_tdm_set_sysclk(struct snd_soc_dai *cpu_dai, int stream,
 				       unsigned int freq, int dir)
 {
@@ -794,12 +800,13 @@ static int rockchip_i2s_tdm_set_sysclk(struct snd_soc_dai *cpu_dai, int stream,
 			i2s_tdm->mclk_rx_freq = freq;
 	}
 
-	dev_dbg(i2s_tdm->dev, "The target mclk_%s freq is: %d\n",
+	dev_warn(i2s_tdm->dev, "The target mclk_%s freq is: %d\n",
 		stream ? "rx" : "tx", freq);
 
 	return 0;
 }
 
+#if 0
 static int rockchip_i2s_tdm_clk_compensation_info(struct snd_kcontrol *kcontrol,
 						  struct snd_ctl_elem_info *uinfo)
 {
@@ -1032,6 +1039,7 @@ static const struct snd_soc_dai_ops rockchip_i2s_tdm_dai_ops = {
 	.probe = rockchip_i2s_tdm_dai_probe,
 	.hw_params = rockchip_i2s_tdm_hw_params,
 	.set_bclk_ratio	= rockchip_i2s_tdm_set_bclk_ratio,
+	.set_sysclk = rockchip_i2s_tdm_set_sysclk,
 	.set_fmt = rockchip_i2s_tdm_set_fmt,
 	.set_tdm_slot = rockchip_dai_tdm_slot,
 	.trigger = rockchip_i2s_tdm_trigger,