6410音频ALSA驱动框架分析

来源:互联网 发布:eclipse.ini 配置优化 编辑:程序博客网 时间:2024/04/30 03:36

ALSA针对于移动设备的ASoC被分为Machine、Platform和Codec三大部分

以下分析硬件平台为:tiny6410   内核版本:2.6.38


(1)、Machine部分:

Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。

ASoC的一切都从Machine驱动开始,包括声卡的注册,绑定Platform和Codec驱动等等。

1、mini6410-wm9713.c  (声卡等平台设备注册)  <------> sound/soc/soc-core.c (平台驱动注册)

2、mach-s3c64xx/dev-audio.c(平台设备注册)  <-------> sound/soc/samsung/ac97.c(平台驱动注册)


(2)、code部分:

在移动设备中,Codec的作用可以归结为4种,分别是:

  • 对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号
  • 对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号
  • 对音频通路进行控制,比如播放音乐,收听调频收音机,又或者接听电话时,音频信号在codec内的流通路线是不一样的
  • 对音频信号做出相应的处理,例如音量控制,功率放大,EQ控制等等

ASoC对Codec的这些功能都定义好了一些列相应的接口,以方便地对Codec进行控制。ASoC对Codec驱动的一个基本要求是:驱动程序的代码必须要做到平台无关性,以方便同一个Codec的代码不经修改即可用在不同的平台上。

mini6410-wm9713.c (平台设备注册) <----------> wm9713.c (平台驱动注册)


(3)、platform部分:

 Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号。在具体实现上,ASoC有把Platform驱动分为两个部分:snd_soc_platform_driver和snd_soc_dai_driver。其中,platform_driver负责管理音频数据,把音频数据通过dma或其他操作传送至cpu dai中,dai_driver则主要完成cpu一侧的dai的参数配置,同时也会通过一定的途径把必要的dma等参数与snd_soc_platform_driver进行交互。

arch/arm/plat-samsung/dev-asocdma.c (平台设备注册) <---------> sound/soc/samsung/dma.c  (平台驱动注册)

。。。待续



原创粉丝点击