accesss goto函数用法control 用法

按时间排序 按相关度排序

按回复數排序 按相关度排序

工具类 代码类 文档 全部

VIP免费看 按人气排序 按时间排序 按相关度排序

控制接口对于许多开关(switch)和调節器(slider)应用广泛它能被用户空间存取,从而读写CODEC相关寄存器

alsa的架构是清晰了但是一直不明白,alsa的控制接口是如何被上层调用的

可以看到在上面的snd_soc_add_controls这个函数就是在添加控制接口

看下snd_kcontrol这个结构是什么样子的?

现在说说上面的这个结构里面的每一个成员到底是什么意思?

name字段是名称标识这个字段非常重要,因为control的作用由名称来区分对于名称相同的control,则使用index区分下面会详细介绍上层应用如何根据name洺称标识来找到底层相应的controlname定义的标准是“SOURCEDIRECTION

我们这里遇到的宏有如下几类:

下面分别看下以上三种类型的宏的定义是什么样子的:

上面宏的意思是:对寄存器0x2c的位便宜的第7位可以设置的最大值是max也就是1,我们查询下datasheet后发现第7位主要用来设置LeftInput Mute 的,并且这一位只能有1或者0因为最大位就是1,这里的invert的中文解释是反转听同事讲解是一般默认情况下,1open0close的这个invert如果是1的话就是和默认的相反的,如果是0的話就是不反转的,是和默认是一样的

最后操作寄存器的值就是0x2A

这里的偏移是3最大值就6,说明我们设置的值的种类最多是6,我们查询下datasheet下:

可以发现从第三位开始,可以最多设置6种这个应该是起压缩的作用,从description可以看出compressorslope

上面的这个宏其实和其他的宏类似,但是这是对两個集训起reg_liftreg_right进行操作codec芯片中的左右声道一般差不多,所以就需要这个宏的存在

从上面可以看出这两个寄存器的配置是一样的

我们看下Machine裏面是如何添加每一个control

trace上面的函数是如何实现的??

到这里我们还不能停止我们不防继续追踪下代码,我们的snd_soc_update_bits函数

上面会进行判断如果你这次操作的工作和以前的是一样的话,那么就没有必要重复操作codec了如果不一样的话,才会去操作codec

看到没有我们读操作用的是snd_soc_read

這里我们需要查找这个readwrite的方法

最终我们在codecdriver里面找到了这两个方法的赋值

我们传递是816,所以我们找到对应的readwrite方法

至于上面两个方法是洳何实现的因为在codecdriver 里面也会调用上面的方法,在那里会详细讲解这里只需要最终调用的是codec里面的方法进行操作就可以了。到这里alsa的控淛接口的讲解就已经讲解完了从上层到底层,应该说比较详细的

我要回帖

更多关于 goto函数用法 的文章

 

随机推荐