在ubuntu热心的给我升级了内核之后,一直困扰我的V450低音炮问题又来,昨晚搞了一个小时都没有搞定,只大约记得原来就是按网上改源码的方法解决的,这次怎么没反应呢?真后悔上一次没有记下来。
早晨起来,认真回想了一下,理了理思路,隐约记得上次改时,比网上的多改了一处,到patch_conexant.c 中又看了一下,果然 cxt5051_update_speaker()一共调用了两次,我在加cxt5051_update_subwoofer()时只在一处加了调用。
总结一下:
1,只需要alsa-driver,其它几个包不需要。
2,修改 alsa-driver-1.0.23/alsa-kernel/pci/hda/patch_conexant.c ,添加函数cxt5051_update_subwoofer() ,
/* Conexant 5051 specific */ static hda_nid_t cxt5051_dac_nids[1] = { 0x10 }; static hda_nid_t cxt5051_adc_nids[2] = { 0x14, 0x15 }; static struct hda_channel_mode cxt5051_modes[1] = { { 2, NULL }, }; static void cxt5051_update_subwoofer(struct hda_codec *codec) { struct conexant_spec *spec = codec->spec; unsigned int pinctl; pinctl = (!spec->hp_present && spec->cur_eapd) ? PIN_OUT : 0; snd_hda_codec_write(codec, 0x1b, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl); } static void cxt5051_update_speaker(struct hda_codec *codec) { struct conexant_spec *spec = codec->spec; unsigned int pinctl; /* headphone pin */ pinctl = (spec->hp_present && spec->cur_eapd) ? PIN_HP : 0; snd_hda_codec_write(codec, 0x16, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl); /* speaker pin */ pinctl = (!spec->hp_present && spec->cur_eapd) ? PIN_OUT : 0; snd_hda_codec_write(codec, 0x1a, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl); }
并在每个调用cxt5051_update_speaker()也调用它。有两处。可参见http://forum.ubuntu.com.cn/viewtopic.php?t=239858
(刚才又认真看了这个,发现我开始漏掉的,正是网上讲的要加的地方。囧。)
(12月9号更新。又试了下,果然只要这一个就好了)
3,编译,安装,不用停alsa服务什么的,至少我就没有,
cd ../alsa-driver-1.0.21 ./configure --prefix=/usr --with-cards=hda-intel make sudo make install
4,重启机器就好啦