Friday, September 10, 2010

用hda-verb解决alsa不能自动设置好神舟a460 alc269内置音箱的pin-clts的问题

新买的神舟a460笔记本的内置音箱不能出声
起初以为是喇叭坏了,因为windows也不出声,后来玩mac的时候偶然弄出了声音,这样的话linux开源先进性就一定可以自己tweak
今天花了几个小时找到了workaround,记录下来
感觉这种情况多发生在i3,i5,i7等较新平台

1,codec dump
代码:
cat /proc/asound/card0/codec#0

结果得到alc259,不知为何不是alc269

2.google上搜索alsa alc259
找到这里https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/582199
细读里面的内容,找到hda-analyzer
在hda-analyzer里面试着更改各种选项,发现最重要的是node 0x14里面的pin-ctls没有OUT,需要手动更改,但是每次重启都要重新设置才可以

又在上面的页面发现了hda-sound-tools这个软件包,里面有工具hda-verb
google hda-verb的用法发现可以通过SET_PIN_WIDGET_CONTROL这个参数正确设定pin-ctls
自己摸索出了
代码:
hda-verb /dev/snd/hwC0D0 0x14 SET_PIN_WIDGET_CONTROL 64

64是由0x40转换而来,0x40是在hda-analyzer里面发现的

3. 把上面命令加入
代码:
/etc/rc.local
以实现开机自动执行

重启搞定。
只不过插上耳机需要手动禁用内置喇叭。个人更喜欢这样。

类似问题:http://juanjoalvarez.net/en/detail/2010/jul/26/ubuntu-linux-1004-64bits-sony-vaio-vpc-eb-2x5e-vpc/
也是ix平台

1.不知道有高人还有更好的方法没有,比如写一个alsa的patch。。。我不会编程。。。
2.windows怎么tweak驱动可以达到这样的目的
3.mac下通过编辑voodoohda里面的nodetopatch也可以实现发声

No comments:

Post a Comment