转载地址:https://blog.youkuaiyun.com/u010168781/article/details/54561673
五、【ASoC声卡驱动框架】
1、ASoC将嵌入式设备的音频系统从软件层面划分为3个组件
1.1 codec驱动:音频编解码器驱动,与平台无关,实现音频控制项添加、音频接口实现、DAPM(动态音频电源管理)、音频编解码器的IO功能
snd_soc_codec和snd_soc_codec_device代表codec驱动
1.2platform驱动:与平台有关驱动,实现DMA和音频接口(I2S、PCM、AC97)驱动
snd_soc_platform代表plarform驱动
1.3machine驱动:与板级相关驱动,实现板级特有的一些控件和音频事件。 machine将codec与platform结合到一起,匹配两者的DAI(数字音频接口)。
1.4 snd_soc_device和snd_soc_card代表machine驱动
snd_soc_dai_link负责连接plarform驱动和codec驱动
以上模块通过snd_soc_pcm_runtime进行关联,将下层具体功能与上层ALSA的pcm流进行关联
1.5 底层各个模块通过soc_bind_dai_link绑定:snd_soc_pcm_runtime中的codec、codec_dai、platform、cpu_dai
1.6 整体card级别的初始化:snd_soc_instantiate_card --> (soc_bind_dai_link+ snd_card_create + soc_probe_dai_link + snd_card_register)
2、数字音频接口DAI
2.1 AC97接口:5线式,很多PC的声卡使用这种接口
2.2 I2S接口:4线式
2.3 PCM接口:4线式
3、machine驱动
3.1 以mini2440为例
s3c24xx_udal34x.c:将s3c2440的platform驱动和UDA134X的codec驱动整合到一起的machine驱动的实现
3.2 创建ASoC声卡平台设备
Sound/soc/s3c24xx/s3c24xx_uda134x.c中
s3c24xx_uda134x_snd_device= platform_device_alloc("soc-audio",-1);
3.3 ASoC声卡的平台驱动
sound/soc/soc-core.c 2378 行
/* ASoCplatform driver */
staticstruct platform_driver soc_driver = {
.driver = {
.name = "soc-audio",
.owner = THIS_MODULE,
.pm = &soc_pm_ops,
},
.probe = soc_probe,
.remove = soc_remove,
};