Hello,
The PLLs are generated from 24MHz, you could adjust the PLLs rate, but can't modify it's source.
In i.MX8MP, the available rate tables is in struct imx_pll14xx_rate_table imx_pll1443x_tbl drivers/clk/imx/clk-pll14xx.c. If your audio clock is divided from AUDIO_PLL1_CLK, the audio clock rate you used should be able to get from these rates in imx_pll1443x_tbl.
For example, the micfil use IMX8MP_AUDIO_PLL1_OUT as source of "pll8k", and IMX8MP_AUDIO_PLL2_OUT as source of "pll11k"
micfil: micfil@30ca0000 {
compatible = "fsl,imx8mp-micfil";
reg = <0x30ca0000 0x10000>;
interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_PDM_IPG>,
<&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_PDM_ROOT>,
<&clk IMX8MP_AUDIO_PLL1_OUT>,
<&clk IMX8MP_AUDIO_PLL2_OUT>,
<&clk IMX8MP_CLK_EXT3>;
clock-names = "ipg_clk", "ipg_clk_app",
"pll8k", "pll11k", "clkext3";
dmas = <&sdma2 24 25 0x80000000>;
dma-names = "rx";
power-domains = <&audiomix_pd>;
status = "disabled";
};
These two clocks are handled in sound/soc/fsl/fsl_utils.c. In a way, these speeds are not freely settable, there are certain bindings that depend on whether the PLLs can support divide to get these speeds. You can check the clocks setting in sound/soc/fsl/fsl_micfil.c and sound/soc/fsl/fsl_sai.c.
/**
* fsl_asoc_get_pll_clocks - get two PLL clock source
*
* @Dev: device pointer
* @pll8k_clk: PLL clock pointer for 8kHz
* @pll11k_clk: PLL clock pointer for 11kHz
*
* This function get two PLL clock source
*/
void fsl_asoc_get_pll_clocks(struct device *dev, struct clk **pll8k_clk,
struct clk **pll11k_clk)
{
*pll8k_clk = devm_clk_get(dev, "pll8k");
if (IS_ERR(*pll8k_clk))
*pll8k_clk = NULL;
*pll11k_clk = devm_clk_get(dev, "pll11k");
if (IS_ERR(*pll11k_clk))
*pll11k_clk = NULL;
}
EXPORT_SYMBOL(fsl_asoc_get_pll_clocks);
Best Regards,
Zhiming