DAPM(Dynamic Audio Power Management)机制设计的目的是为允许便携设备在音频子系统下消耗最少的能量,它独立于内核中其他的电源管理系统,能很好地与其他电源管理系统共存。另外,kcontrol接口之间相互独立,无法联动,并且没有事件处理接口。DAPM很好地解决了这个问题。DAPM单元(widget)定义如下:
DAPM widget包含如下类型:
DAPM widget之间可以相互连接,组成一条完整的音频链路。就像网络设备之间通过路由器相连一样,DAPM widget也通过DAPM路由连接在一起。DAPM widget的连接关系通过snd_soc_dapm_route结构描述:
如果snd_soc_dapm_route的control为NULL,则表示sink与source直连在一起。一个完整的音频链路必须有一个有效的终点,例如:
(1)从DAC到输出管脚。
(2)从输入管脚到ADC。
(3)从输入管脚到输出管脚。
(4)从DAC到ADC。
内核在下列情况下会扫描音频链路(参见dapm_power_widgets函数),并给音频链路上的DAPM widget做上电(power on)与下电(power off)动作:(www.xing528.com)
(2)用户通过amixer命令等方式改变音频链路。
(3)应用程序打开或关闭PCM设备。
同kcontrol接口一样,内核定义了一系列宏来组装DAPM widget:
例如WM9713的DAPM接口定义如下:
可见第三列的几个DAPM widget通过wm9713_audio_map中间列的开关选择一个连接到名为Left HP Mixer的DAPM widget。下面是Left HP Mixer的连接设置实例:
执行./amixer cset name='Left HP Mixer PCM Playback Switch' 1表示Left DAC进入音频链路,Left HP Mixer连接到Left DAC。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。