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