Browse Source

soc: imxrt: mimxrt1011 i2s clock fix

Fix for compiling i2s drivers on the NXP mimxrt1010_evk board.
For mimxrt1011, the defines kCLOCK_Sai2... are not defined as the sai2
peripheral does not exist. Trying to compile gives error. Fixed by adding
check for device tree node around code that uses the defines. Also added
same for sai1 and sai3. Thanks @lucien-nxp, @ZhaoxiangJin from NXP.

Signed-off-by: Imran Sajjad <imran.sajjad@iconfitness.com>
pull/92460/head
Imran Sajjad 2 weeks ago committed by Daniel DeGrasse
parent
commit
63ebb75083
  1. 6
      drivers/clock_control/clock_control_mcux_ccm.c
  2. 6
      soc/nxp/imxrt/imxrt10xx/soc.c

6
drivers/clock_control/clock_control_mcux_ccm.c

@ -449,22 +449,28 @@ static int mcux_ccm_get_subsys_rate(const struct device *dev, @@ -449,22 +449,28 @@ static int mcux_ccm_get_subsys_rate(const struct device *dev,
#endif
#ifdef CONFIG_I2S_MCUX_SAI
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(sai1))
case IMX_CCM_SAI1_CLK:
*rate = CLOCK_GetFreq(kCLOCK_AudioPllClk)
/ (CLOCK_GetDiv(kCLOCK_Sai1PreDiv) + 1)
/ (CLOCK_GetDiv(kCLOCK_Sai1Div) + 1);
break;
#endif
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(sai2))
case IMX_CCM_SAI2_CLK:
*rate = CLOCK_GetFreq(kCLOCK_AudioPllClk)
/ (CLOCK_GetDiv(kCLOCK_Sai2PreDiv) + 1)
/ (CLOCK_GetDiv(kCLOCK_Sai2Div) + 1);
break;
#endif
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(sai3))
case IMX_CCM_SAI3_CLK:
*rate = CLOCK_GetFreq(kCLOCK_AudioPllClk)
/ (CLOCK_GetDiv(kCLOCK_Sai3PreDiv) + 1)
/ (CLOCK_GetDiv(kCLOCK_Sai3Div) + 1);
break;
#endif
#endif
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(flexspi))
case IMX_CCM_FLEXSPI_CLK:
*rate = CLOCK_GetClockRootFreq(kCLOCK_FlexspiClkRoot);

6
soc/nxp/imxrt/imxrt10xx/soc.c

@ -305,21 +305,27 @@ void imxrt_audio_codec_pll_init(uint32_t clock_name, uint32_t clk_src, @@ -305,21 +305,27 @@ 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) {
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(sai1))
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;
#endif
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(sai2))
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;
#endif
#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(sai3))
case IMX_CCM_SAI3_CLK:
CLOCK_SetMux(kCLOCK_Sai3Mux, clk_src);
CLOCK_SetDiv(kCLOCK_Sai3PreDiv, clk_pre_div);
CLOCK_SetDiv(kCLOCK_Sai3Div, clk_src_div);
break;
#endif
default:
return;
}

Loading…
Cancel
Save