教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

ALSA声卡驱动详解(5)

来源:网络收集 时间:2026-07-01
导读: *priv 有些widget可能需要一些专有的数据,可以使用该字段来保存,像snd_soc_dapm_dai_in类型的widget,会使用该字段来记住与之相关联的snd_soc_dai结构指针。 *regulator 对于snd_soc_dapm_regulator_supply类型的

*priv 有些widget可能需要一些专有的数据,可以使用该字段来保存,像snd_soc_dapm_dai_in类型的widget,会使用该字段来记住与之相关联的snd_soc_dai结构指针。

*regulator 对于snd_soc_dapm_regulator_supply类型的widget,该字段指向与之相关的regulator结构指针。

*params 目前对于snd_soc_dapm_dai_link类型的widget,指向该dai的配置信息的snd_soc_pcm_stream结构。

reg shift mask 这3个字段用来控制该widget的电源状态,分别对应控制信息所在的寄存器地址,位移值和屏蔽值。

value on_val off_val 电源状态的当前只,开启时和关闭时所对应的值。 power invert 用于指示该widget当前是否处于上电状态,invert则用于表明power字段是否需要逻辑反转。

active connected 分别表示该widget是否处于激活状态和连接状态,当和相邻的widget有连接关系时,connected位会被置1,否则置0。

new 我们定义好的widget(snd_soc_dapm_widget结构),在注册到声卡中时需要进行实例化,该字段用来表示该widget是否已经被实例化。

ext 表示该widget当前是否有外部连接,比如连接mic,耳机,喇叭等等。

force 该位被设置后,将会不管widget当前的状态,强制更新至新的电源状态。 ignore_suspend new_power power_checked 这些电源管理相关的字段。 subseq 该widget目前在上电或下电队列中的排序编号,为了防止在上下电的过程中出现pop-pop声,DAPM会给每个widget分配合理的上下电顺序。 *power_check 用于检查该widget是否应该上电或下电的回调函数指针。 event_flags 该字段是一个位或字段,每个位代表该widget会关注某个DAPM事件通知。只有被关注的通知事件会被发送到widget的事件处理回调函数中。 *event DAPM事件处理回调函数指针。

12

num_kcontrols *kcontrol_news **kcontrols 这3个字段用来描述与该widget所包含的kcontrol控件,例如一个mixer控件或者是一个mux控件。

sources sinks 两个链表字段,两个widget如果有连接关系,会通过一个snd_soc_dapm_path结构进行连接,sources链表用于链接所有的输入path,sinks链表用于链接所有的输出path。

power_list 每次更新整个dapm的电源状态时,会根据一定的算法扫描所有的widget,然后把需要变更电源状态的widget利用该字段链接到一个上电或下电的链表中,扫描完毕后,dapm系统会遍历这两个链表执行相应的上电或下电操作。 dirty 链表字段,widget的状态变更后,dapm系统会利用该字段,把该widget加入到一个dirty链表中,稍后会对dirty链表进行扫描,以执行整个路径的更新。 inputs 该widget的所有有效路径中,连接到输入端的路径数量。 outputs 该widget的所有有效路径中,连接到输出端的路径数量。

*clk 对于snd_soc_dapm_clock_supply类型的widget,指向相关联的clk结构指针。

以上我们对snd_soc_dapm_widget结构的各个字段所代表的意义一一做出了说明,这里只是让大家现有个概念,至于每个字段的详细作用,我们会在以后相关的章节中提及。 widget的种类

在DAPM框架中,把各种不同的widget划分为不同的种类,

snd_soc_dapm_widget结构中的id字段用来表示该widget的种类,可选的种类都定义在一个枚举中: [cpp] view plaincopy /* dapm widget types */

enum snd_soc_dapm_type {......} 下面我们逐个解释一下这些widget的种类:

snd_soc_dapm_input 该widget对应一个输入引脚。 snd_soc_dapm_output 该widget对应一个输出引脚。 snd_soc_dapm_mux 该widget对应一个mux控件。

snd_soc_dapm_virt_mux 该widget对应一个虚拟的mux控件。

snd_soc_dapm_value_mux 该widget对应一个value类型的mux控件。 snd_soc_dapm_mixer 该widget对应一个mixer控件。

snd_soc_dapm_mixer_named_ctl 该widget对应一个mixer控件,但是对应的kcontrol的名字不会加入widget的名字作为前缀。

snd_soc_dapm_pga 该widget对应一个pga控件(可编程增益控件)。 snd_soc_dapm_out_drv 该widget对应一个输出驱动控件 snd_soc_dapm_adc 该widget对应一个ADC snd_soc_dapm_dac 该widget对应一个DAC

snd_soc_dapm_micbias 该widget对应一个麦克风偏置电压控件 snd_soc_dapm_mic 该widget对应一个麦克风。 snd_soc_dapm_hp 该widget对应一个耳机。

13

snd_soc_dapm_spk 该widget对应一个扬声器。 snd_soc_dapm_line 该widget对应一个线路输入。 snd_soc_dapm_switch 该widget对应一个模拟开关。

snd_soc_dapm_vmid 该widget对应一个codec的vmid偏置电压。

snd_soc_dapm_pre machine级别的专用widget,会先于其它widget执行检查操作。

snd_soc_dapm_post machine级别的专用widget,会后于其它widget执行检查操作。

snd_soc_dapm_supply 对应一个电源或是时钟源。

snd_soc_dapm_regulator_supply 对应一个外部regulator稳压器。 snd_soc_dapm_clock_supply 对应一个外部时钟源。

snd_soc_dapm_aif_in 对应一个数字音频输入接口,比如I2S接口的输入端。

snd_soc_dapm_aif_out 对应一个数字音频输出接口,比如I2S接口的输出端。

snd_soc_dapm_siggen 对应一个信号发生器。

snd_soc_dapm_dai_in 对应一个platform或codec域的输入DAI结构。 snd_soc_dapm_dai_out 对应一个platform或codec域的输出DAI结构。 snd_soc_dapm_dai_link 用于链接一对输入/输出DAI结构。 widget之间的连接器:path

之前已经提到,一个widget是有输入和输出的,而且widget之间是可以动态地进行连接的,那它们是用什么来连接两个widget的呢?DAPM为我们提出了path这一概念,path相当于电路中的一根跳线,它把一个widget的输出端和另一个widget的输入端连接在一起,path用snd_soc_dapm_path结构来描述: [cpp] view plaincopy

struct snd_soc_dapm_path { const char *name;

/* source (input) and sink (output) widgets */ struct snd_soc_dapm_widget *source; struct snd_soc_dapm_widget *sink; struct snd_kcontrol *kcontrol;

/* status */

u32 connect:1; /* source and sink widgets are connected */

u32 walked:1; /* path has been walked */

u32 walking:1; /* path is in the process of being walked */

u32 weak:1; /* path ignored for power management */

14

int (*connected)(struct snd_soc_dapm_widget *source, struct snd_soc_dapm_widget *sink);

struct list_head list_source; struct list_head list_sink; struct list_head list; };

当widget之间发生连接关系时,snd_soc_dapm_path作为连接者,它的source字段会指 …… 此处隐藏:2911字,全部文档内容请下载后查看。喜欢就下载吧 ……

ALSA声卡驱动详解(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/520655.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)