Tech
Alsa驱动分析
Guide
How to Mount Maemo File System——Guide System Analysis and Design Documents
1. 2. 3.
ABSTRACT............................................................................................................................................................................. 3 INTRODUCTION ................................................................................................................................................................... 3 音频驱动框架介绍 .............................................................................................................................................................. 3
3.1 音频设备的注册............................................................................................................................................................. 3 3.2 音频驱动的注册............................................................................................................................................................. 4 3.2.1 Probe函数的调用 ................................................................................................................................................. 4 3.2.2 Soc_probe函数...................................................................................................................................................... 4 4.
通常的使用流程的分析 ..................................................................................................................................................... 6 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 5.
open过程介绍........................................................................................................................................................ 6 snd_pcm_hw_params流程分析 ......................................................................................................................... 8 prepare流程分析 .................................................................................................................................................. 9 write的流程..........................................................................................................................................................15 使用流程的总结t ................................................................................................................................................18
AMIXER调用的相关逻辑.................................................................................................................................................18 5.1.1 5.1.2
Amixer调用的上层逻辑 .....................................................................................................................................19 Amixer的内核流程..............................................................................................................................................20
6. 7.
总结 ........................................................................................................................................................................................21 未讨论....................................................................................................................................................................................21
?Tech, 2005 Page 2 of 22
How to Mount Maemo File System——Guide System Analysis and Design Documents
Issue: <0.5> Issue Date: <10/29/2007> 1. 2.
Abstract Introduction
主要是讲2.6.21内核里面的alsa驱动的架构,以及在我们的平台上需要注意的东西。. 分成几个部分:
驱动整体框架,一个简单的播放流程介绍,以及我们的平台需要注意的地方;
3.
3.1
音频驱动框架介绍
音频设备的注册
static struct snd_soc_machine snd_soc_machine_littleton = {.name = \.dai_link = littleton_dai,.num_links = ARRAY_SIZE(littleton_dai),};littleton_init被引用platform_set_drvdata(littleton_snd_device, &littleton_snd_devdata);这个数据结构会被其它地方通过platform_get_drvdata(pdev)来取出来。littleton_snd_devdata.dev = &littleton_snd_device->dev;ret = platform_device_add(littleton_snd_device);这里是设备注册struct snd_soc_platform pxa3xx_soc_platform = {.name= \audio\.pcm_ops = &pxa3xx_pcm_ops,.pcm_new= pxa3xx_pcm_new,被引用.pcm_free= pxa3xx_pcm_free_dma_buffers,};这里的static struct snd_soc_device littleton_snd_devdata = {.machine = &snd_soc_machine_littleton,.platform = &pxa3xx_soc_platform,.codec_dev = &soc_codec_dev_micco,};被引用被引用struct snd_soc_codec_device soc_codec_dev_micco = {.probe = micco_soc_probe,.remove = micco_soc_remove,.suspend =micco_soc_suspend,.resume = micco_soc_resume,}; 这就是设备的注册了,设备本身非常简单,复杂的是这个设备的drvdata,drvdata里面包含了三部分,关于machine的,关于platform的,关于codec的,从大体上说machine主要是关于cpu这边的也可以说是关于ssp本身设置的,而platform是关于平台级别的,就是说这个平台本身实现相关的,而codec就是与我们所用的音频codec相关的;基本上这里就可以看出整个音频驱动的架构特点,就是从alsa层进入——>内核alsa层接口->core层,这里再调用上面说的三个方面的函数来处理,先是cpu
?Tech, 2005 Page 3 of 22
How to Mount Maemo File System——Guide System Analysis and Design Documents
Issue: <0.5> Issue Date: <10/29/2007> 音频驱动的注册
Probe函数的调用
static struct platform_driver soc_driver = {.driver= {.name= \},.probe= soc_probe,.remove= soc_remove,.suspend= soc_suspend,.resume= soc_resume,};3.2.1
snd_soc_initplatform_driver_register(&soc_driver)这里是驱动注册调用soc_probe 前面讲了设备的注册,里面的设备的名字就是”soc-audio”,而这里的driver的注册时名字也是” soc-audio”,对于platform的设备匹配的原则是根据名字的,所以将会匹配成功,成功后就会执行audio驱动提供的probe函数soc_probe; 3.2.2
Soc_probe函数
这个函数本身架构很简单,和前面说的逻辑一样,先调用了cpu级别的probe,再是codec级别的,最后是platform的(这里三个的顺序就不一样),但是因为cpu级别的和platform级别的都为空,最后都调用了codec级别的probe函数,也就是micco_soc_probe,这个函数基本上就完成了所有应该完成的音频驱动的初始化了;简单的划分,分成两部分,对上和对下:对上主要是注册设备节点,以及这些设备节点对应的流的创建;对下主要是读写函数的设置,codec本身的dai设置,初始化寄存器的设置,最重要的就是后面的control的创建和门的创建了,如下图所示:
?Tech, 2005 Page 4 of 22
相关推荐: