以前在使用这个接口时遇到的这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=14
numid=14,iface=MIXER,name='Analog DACR1 Power Control'
; type=BOOLEAN,access=rw------,values=1
: values=on
[root@hello ~]
从回显上看这个mix应该是处于power on状态的,但实际上这个通路是关闭的,于是手动设置了一下:
[root@hello ~]#amixer cset numid=14 1
numid=14,iface=MIXER,name='Analog DACR1 Power Control'
; type=BOOLEAN,access=rw------,values=1
: values=off
[root@hello ~]
即将对应寄存器的bit15设置为1,则回显显示是poweroff状态,但是实际的codec通路却是打开了,因为有输出波形了。所以看到这里应该也能联想到SOC_SINGLE()中的invert的作用了。于是果断把它设置为1,之后再次测试,则回显的提示和实际的硬件状态才吻合了。现在也能想通了,你想那么多的codec厂家,每个厂家都有自己的寄存器值含义,并不一定大家都认为1是poweron状态,0是poweroff状态,所以为了兼容所有厂家,boom,invert出现了。
本来这不值得记录的,但是呢,我今天来公司加班了,总得有点成果不是。