1:platform
rockchip_i2s.c: 将platform中的component放入dai链表,component->dai_drv指向rockchip_i2s_dai
rockchip_i2s_probe
1.1:/* clk init */
i2s->hclk = devm_clk_get(&pdev->dev, "i2s_hclk");
ret = clk_prepare_enable(i2s->hclk);
1.2:/* i2s regmap init */
i2s->regmap = devm_regmap_init_mmio(&pdev->dev, regs, &rockchip_i2s_regmap_config);
1.3:/* dma init*/
i2s->playback_dma_data.addr = res->start + I2S_TXDR;
i2s->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
i2s->playback_dma_data.maxburst = 8;
i2s->capture_dma_data.addr = res->start + I2S_RXDR;
i2s->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
i2s->capture_dma_data.maxburst = 8;
1.4:/* snd_soc_dai_driver register*/
soc_dai = devm_kzalloc(&pdev->dev, sizeof(*soc_dai), GFP_KERNEL);
memcpy(soc_dai, &rockchip_i2s_dai, sizeof(*soc_dai));
ret = devm_snd_soc_register_component(&pdev->dev, &rockchip_i2s_component, soc_dai, 1);
struct snd_soc_component_driver component->dai_drv = dai_drv; //dai_drv = snd_soc_dai_driver = rockchip_i2s_dai
struct snd_soc_dai *dai;
dai->component = component;
dai->driver = &dai_drv[i];
list_add(&dai->list, &component->dai_list);
附1:
static const struct snd_soc_dai_ops rockchip_i2s_dai_ops = {
.hw_params = rockchip_i2s_hw_params,
.set_sysclk = rockchip_i2s_set_sysclk,
.set_fmt = rockchip_i2s_set_fmt,
.trigger = rockchip_i2s_trigger,
};
static struct snd_soc_dai_driver rockchip_i2s_dai = {
.probe = rockchip_i2s_dai_probe,
.playback = {
.stream_name = "Playback",
.channels_min = 2,
.channels_max = 8,
.rates = SNDRV_PCM_RATE_8000_192000,
.formats = (SNDRV_PCM_FMTBIT_S8 |
SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_S20_3LE |
SNDRV_PCM_FMTBIT_S24_LE |
SNDRV_PCM_FMTBIT_S32_LE),
},
.capture = {
.stream_name = "Captu

本文详细阐述了在嵌入式系统中初始化音频系统的步骤,包括平台组件、Codec配置及简单音频卡绑定过程。从rockchip_i2s.c中的平台组件初始化,到rk817_codec.c中的Codec设置,再到simple-card.c中的DAI链接绑定,全面解析了嵌入式音频系统启动流程。
最低0.47元/天 解锁文章
887

被折叠的 条评论
为什么被折叠?



