【MA35D1】Audio Codec驱动如何获取I2S MCLK频率

qwang |浏览84次
收藏|2024/01/10 14:08

满意回答

2024/01/10 14:15

先获取audio clk:

ma35d1_audio->clk = of_clk_get(pdev->dev.of_node, 0);

if (IS_ERR(ma35d1_audio->clk)) {

dev_err(&pdev->dev, "clk_get error\n");

ret = PTR_ERR(ma35d1_audio->clk);

goto out2;

}

clk_prepare_enable(ma35d1_audio->clk);


然后通过下面的计算得到mclk:

static int ma35d1_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id, unsigned int freq, int dir)

{

struct ma35d1_audio *ma35d1_audio = dev_get_drvdata(cpu_dai->dev);

unsigned int i2s_clk, bitrate, mclkdiv, bclkdiv;


i2s_clk = clk_get_rate(ma35d1_audio->clk);


bitrate = freq * 2U * 16U;

bclkdiv = ((((i2s_clk * 10UL / bitrate) >> 1U) + 5UL) / 10UL) - 1U;



mclkdiv = (i2s_clk / 12000000) >> 1;


AUDIO_WRITE(ma35d1_audio->mmio + I2S_CLKDIV, (bclkdiv << 8) | mclkdiv);


return 0;


}


蔡芳芳

其他回答(0)
0人关注该问题
+1
 加载中...