soc: add auido clock init per soc

RT11xx and RT10xx have different audio clock settings
so add them in soc.c

Signed-off-by: Hake Huang <hake.huang@oss.nxp.com>
diff --git a/soc/arm/nxp_imx/rt/soc.h b/soc/arm/nxp_imx/rt/soc.h
index c3d4503..88c539b 100644
--- a/soc/arm/nxp_imx/rt/soc.h
+++ b/soc/arm/nxp_imx/rt/soc.h
@@ -38,6 +38,9 @@
 
 void imxrt_usdhc_dat3_pull(bool pullup);
 
+void imxrt_audio_codec_pll_init(uint32_t clock_name, uint32_t clk_src,
+					uint32_t clk_pre_div, uint32_t clk_src_div);
+
 #endif
 
 #ifdef __cplusplus
diff --git a/soc/arm/nxp_imx/rt/soc_rt10xx.c b/soc/arm/nxp_imx/rt/soc_rt10xx.c
index 0f4f536..84a33e3 100644
--- a/soc/arm/nxp_imx/rt/soc_rt10xx.c
+++ b/soc/arm/nxp_imx/rt/soc_rt10xx.c
@@ -247,6 +247,33 @@
 
 #endif
 
+#if CONFIG_I2S_MCUX_SAI
+void imxrt_audio_codec_pll_init(uint32_t clock_name, uint32_t clk_src,
+					uint32_t clk_pre_div, uint32_t clk_src_div)
+{
+	switch (clock_name) {
+	case IMX_CCM_SAI1_CLK:
+		CLOCK_SetMux(kCLOCK_Sai1Mux, clk_src);
+		CLOCK_SetDiv(kCLOCK_Sai1PreDiv, clk_pre_div);
+		CLOCK_SetDiv(kCLOCK_Sai1Div, clk_src_div);
+		break;
+	case IMX_CCM_SAI2_CLK:
+		CLOCK_SetMux(kCLOCK_Sai2Mux, clk_src);
+		CLOCK_SetDiv(kCLOCK_Sai2PreDiv, clk_pre_div);
+		CLOCK_SetDiv(kCLOCK_Sai2Div, clk_src_div);
+		break;
+	case IMX_CCM_SAI3_CLK:
+		CLOCK_SetMux(kCLOCK_Sai2Mux, clk_src);
+		CLOCK_SetDiv(kCLOCK_Sai2PreDiv, clk_pre_div);
+		CLOCK_SetDiv(kCLOCK_Sai2Div, clk_src_div);
+		break;
+	default:
+		LOG_ERR("wrong clock system configured");
+		return;
+	}
+}
+#endif
+
 /**
  *
  * @brief Perform basic hardware initialization
diff --git a/soc/arm/nxp_imx/rt/soc_rt11xx.c b/soc/arm/nxp_imx/rt/soc_rt11xx.c
index 1a2ac1f..c9825a6 100644
--- a/soc/arm/nxp_imx/rt/soc_rt11xx.c
+++ b/soc/arm/nxp_imx/rt/soc_rt11xx.c
@@ -489,6 +489,37 @@
 
 #endif
 
+
+#if CONFIG_I2S_MCUX_SAI
+void imxrt_audio_codec_pll_init(uint32_t clock_name, uint32_t clk_src,
+					uint32_t clk_pre_div, uint32_t clk_src_div)
+{
+	ARG_UNUSED(clk_pre_div);
+
+	switch (clock_name) {
+	case IMX_CCM_SAI1_CLK:
+		CLOCK_SetRootClockMux(kCLOCK_Root_Sai1, clk_src);
+		CLOCK_SetRootClockDiv(kCLOCK_Root_Sai1, clk_src_div);
+		break;
+	case IMX_CCM_SAI2_CLK:
+		CLOCK_SetRootClockMux(kCLOCK_Root_Sai2, clk_src);
+		CLOCK_SetRootClockDiv(kCLOCK_Root_Sai2, clk_src_div);
+		break;
+	case IMX_CCM_SAI3_CLK:
+		CLOCK_SetRootClockMux(kCLOCK_Root_Sai3, clk_src);
+		CLOCK_SetRootClockDiv(kCLOCK_Root_Sai3, clk_src_div);
+		break;
+	case IMX_CCM_SAI4_CLK:
+		CLOCK_SetRootClockMux(kCLOCK_Root_Sai4, clk_src);
+		CLOCK_SetRootClockDiv(kCLOCK_Root_Sai4, clk_src_div);
+		break;
+	default:
+		LOG_ERR("wrong clock system configured");
+		return;
+	}
+}
+#endif
+
 /**
  *
  * @brief Perform basic hardware initialization