首页 理论教育 DAPM解决方案,Linux驱动开发实例

DAPM解决方案,Linux驱动开发实例

时间:2023-10-19 理论教育 版权反馈
【摘要】:DAPM很好地解决了这个问题。就像网络设备之间通过路由器相连一样,DAPM widget也通过DAPM路由连接在一起。DAPM widget的连接关系通过snd_soc_dapm_route结构描述:如果snd_soc_dapm_route的control为NULL,则表示sink与source直连在一起。同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。

DAPM解决方案,Linux驱动开发实例

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)

(1)声卡初始化

(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。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈