linuxALSA声卡驱动之Asoc架构中的Codec.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linuxALSA声卡驱动之Asoc架构中的Codec

1. ?Codec简介 在移动设备中,Codec的作用可以归结为4种,分别是: .对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号 .对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号 .对音频通路进行控制,比如播放音乐,收听调频收音机,又或者接听电话时,音频信号在codec内的流通路线是不一样的 .对音频信号做出相应的处理,例如音量控制,功率放大,EQ控制等等 ASoC对Codec的这些功能都定义好了一些列相应的接口,以方便地对Codec进行控制。ASoC对Codec驱动的一个基本要求是:驱动程序的代码必须要做到平台无关性,以方便同一个Codec的代码不经修改即可用在不同的平台上。以下的讨论基于wolfson的Codec芯片WM8994, ASoc中对Codec的数据抽象 描述Codec的最主要的几个数据结构分别是:snd_soc_codec、snd_soc_codec_driver、snd_soc_dai、snd_soc_dai_driver、其中snd_soc_dai和snd_soc_dai_driver在ASoc的Platform驱动中也会使用到,Platform和Codec的DAI通过snd_soc_dai_link结构,在Machine驱动中进行绑定连接。下面我们几个结构体的定义。 Snd_soc_codec Snd_soc_codec_driver Snd_soc_dai Snd_soc_dai_driver Snd_soc_dai_ops用于实现该dai的控制盒参数配置 3 Codec的注册 因为Codec驱动的代码要做到平台无关性,要使得Machine驱动能够使用该Codec。Codec驱动的首要任务就是确定snd_soc_codec和snd_soc_dai的实例,并把他们注册到系统中,注册的codec和dai才能为Machine驱动所用。以WM8994为例,对应代码位置:/sound/soc/codecs/wm8994.c模块入口函数注册一个platform driver 有platform driver,必定会有相应的platform device,这个在后面再说。显然platform driver注册后,pribe回调函数被调用。 其中soc_codec_dev_wm8994和wm899_dai的定义如下 由此可见,codec驱动的第一步就是定义snd_soc_codec_driver和snd_soc_dai_driver的实例,然后调用snd_soc_register_codec函数对Codec进行注册。进入snd_soc_register_codec函数 首先,申请一个snd_soc_codec结构的实例 确定codec的名字,这个名字很重要,Machine驱动定义的snd_soc_dai_link中会指定每个link的codec的dai的名字,进行匹配绑定时就是通过和这里的名字比较,从而找到Codec 然后初始化各个字段,多数字段的值来自上面定义的snd_soc_codec_driver的实例snd_soc_dev_wm89994 在做了一些寄存器缓存的初始化和配置工作后,通过snd_soc_register_dais函数对本codec的dai进行注册 最后,它把codec实例链接到全局链表codec_list中,并调用snd_soc_instantiate_cards是函数触发Machine驱动进行一次匹配绑定操作 上面的snd_soc_register_dais函数其实也是和snd_soc_register_codec类似,显示为每个snd_soc_dai实例分配内存确定dai的名字,用snd_soc_dai_driver实例的字段对它进行必要初始化,最后把该dai链接到全局dai_list中,和codec一样,最后会调用snd_soc_instantiate_cards函数触发一次匹配绑定操作 关于snd_soc_instantiate_cards函数,查看ASoC架构的Machine 设备添加 codec初始化 Machine驱动的初始化,codec和dai的注册,都会调用snd_soc_instantiate_cards()进行一次声卡和codec,dai,platform的匹配绑定过程,这里所谓的绑定,正如Machine驱动描述,就是通过3个全局链表,按名字进行匹配,把匹配的codec,dai,platform实例赋值给声卡每对dai的snd_soc_pcm_runtime变量中,一旦绑定成功,将会使得codec和dai驱动的probe回调被

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档