DPAM的kcontrol注册过程

总结

  1. 普通snd_kcontrol的注册过程。
    snd_soc_add_controls: snd_kcontrol_new构造处snd_kcontrol,放入card->controls链表。

  2. DPMA的snd_kcontrol的注册过程。
    2.1 snd_soc_dapm_new_controls //把widget放入到card->widgets链表
    2.2 在注册machine驱动时,导致如下调用:
    soc_probe_dai_link > soc_post_component_init > snd_soc_dapm_new_widgets
    2.3 snd_soc_dpam_new_widgets:
    对于每一个widget,设置它的power_check函数(用来判断该widget是否应该上电)
    对于mixer widget,取出其中的kcontrol_new构造出snd_kcontrol,放入card->controls链表。
    对于mux widget,它只有一个kcontrol_new,构造出snd_kcontrol,放入card->controls链表。

杂的

snd_soc_dapm_new_controls---->snd_soc_dapm_new_control: widget放到card->widgets链表
问题是:普通kcontrol和DPAM的kcontrol提供给应用层的接口是一样的,怎么操作?
最终widget中的kcontrol_new也会转换为snd_kcontrol,也会放入到card->controls

machine:注册machine驱动时,导致调用函数soc_probe_dai_link,调用函数soc_post_component_init,
snd_soc_dapm_new_widgets
对于每个widget
1)设置w->power_check:用来判断该widget是否要上电(上电条件 1.位于complete path上 2.有app在使用声卡)
2)对于mixer: mixer是混合器。
对于mixer,如果它的kcontrol_new位于某个path上,则使用
kcontrol_new来构造snd_kcontrol放入card->controls链表。
如果在软件上没有给kcontrol_new设置path,则认为你不想使用线路,就不创建kcontrol。

             a
 INPUT1-----   -------
             b        |   -
 INPUT2-----   -------   |+| A
             c        |   -    
 INPUT3-----   --------     mixer
 
 得到的snd_kcontrol.name就是 A a
 
 这个可以从tinymix中可以看到:
 47 BOOL 1    Left Boost Mixer LINPUT2 Switch off,
 这个kcontrol的组合了名字Left Boost Mixer和LINPUT2 Switch。
 注意:snd_kcontrol的名字=widget's name + kcontrol_new's name
 
 
3)对于mux:单选器

   ADCL--------Left  |path1|
                
                    ------MUX(单选)            
   
   ADCR--------Right |path2|
   
   上图开关需要用一个Reg若干位表示,用一个kcontrol_new来表示,Left和Right是取值,不是名字。
   mux widget组成包括:  1. MUX本身  2.一个snd_kcontrol_new,有多个取值,Left和Right。
   对于 MUX widget说明
   1)snd_kcontrol_new转换为snd_kcontrol放入到card->controls链表
   2)对于sink widget为同一个MUX widget的path,path1和path2的kcontrol指向同一个kcontrol。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值