SOC_SINGLE(xname, reg, shift, max, invert) 参数测试

来源:互联网 发布:中国9月经济数据 编辑:程序博客网 时间:2024/06/05 20:04

以前在使用这个接口时遇到的这5个参数中前面4个靠字面含义可知,第5个invert就有点含糊了,它指的是谁的invert,当时没有深究,今天终于找到到了它的作用。
我在使用一颗codec时有个mix的开关需要使用SOC_SINGLE()这个宏来描述一下,看datasheet上bit15=0为power off,bit15=1为poweron。于是我还按照原来的用法把invert设置为了0,结果在使用amixer操作这个mix时,得到的回显是这样的:

[root@hello ~]#amixer cget numid=14numid=14,iface=MIXER,name='Analog DACR1 Power Control'  ; type=BOOLEAN,access=rw------,values=1  : values=on[root@Vimicro ~]

从回显上看这个mix应该是处于power on状态的,但实际上这个通路是关闭的,于是手动设置了一下:

[root@Vimicro ~]#amixer cset numid=14 1numid=14,iface=MIXER,name='Analog DACR1 Power Control'  ; type=BOOLEAN,access=rw------,values=1  : values=off[root@Vimicro ~]

即将对应寄存器的bit15设置为1,则回显显示是poweroff状态,但是实际的codec通路却是打开了,因为有输出波形了。所以看到这里应该也能联想到SOC_SINGLE()中的invert的作用了。于是果断把它设置为1,之后再次测试,则回显的提示和实际的硬件状态才吻合了。现在也能想通了,你想那么多的codec厂家,每个厂家都有自己的寄存器值含义,并不一定大家都认为1是poweron状态,0是poweroff状态,所以为了兼容所有厂家,boom,invert出现了。
本来这不值得记录的,但是呢,我今天来公司加班了,总得有点成果不是。

0 0
原创粉丝点击