hideden.hatenablog.com

はてなぶろぐー。URLなげー。

ALSAとか。

あんまり音無くても困らないんだけど、YouTubeで音でないのもちょっと寂しいので設定。

あたらしめのドライバを入れるためにKernelじゃなくalsa-driverのほうで入れる。
まずはKernel設定。ALSA関係を入れないようにする。

Device Drivers  --->
   Sound  --->
   
<*> Sound card support
Open Sound System   --->
   < > Open Sound System (DEPRECATED)
Advanced Linux Sound Architecture  --->
   < > Advanced Linux Sound Architecture

これをしておかないと、alsa-driverをemergeするときに怒られる。で、

/etc/portage/package.keywords

media-sound/alsa-driver     ~x86
media-sound/alsa-headers    ~x86

としておく。現時点でこれで入るのは1.0.14だが、これにはX61上ではちょっと問題があるので、パッチをいくつか当てる必要があるらしい。
このへんを参照しつつ、パッチを当てる。そのうち修正されるだろうからそれまでの間は手動でやってみる。

# cd /usr/portage/media-sound/alsa-driver
# ebuild alsa-driver-1.0.14.ebuild fetch
# ebuild alsa-driver-1.0.14.ebuild unpack
# nano /var/tmp/portage/media-sound/alsa-driver-1.0.14/work/alsa-driver-1.0.14/alsa-kernel/pci/hda/patch_analog.c
# ebuild alsa-driver-1.0.14.ebuild compile
# ebuild alsa-driver-1.0.14.ebuild install
# ebuild alsa-driver-1.0.14.ebuild qmerge
diff -au a/patch_analog.c b/patch_analog.c
--- a/patch_analog.c    2007-07-16 17:20:46.000000000 +0900
+++ b/patch_analog.c    2007-07-16 17:21:03.000000000 +0900
@@ -2872,9 +2872,9 @@
        HDA_CODEC_VOLUME("Digital Mic Capture Volume", 0x05, 0x0, HDA_INPUT),
        HDA_CODEC_MUTE("Digital Mic Capture Switch", 0x05, 0x0, HDA_INPUT),
        HDA_CODEC_VOLUME_IDX("Digital Mic Capture Volume", 1, 0x06, 0x0,
-                            HDA_OUTPUT),
+                            HDA_INPUT),
        HDA_CODEC_MUTE_IDX("Digital Mic Capture Switch", 1, 0x06, 0x0,
-                          HDA_OUTPUT),
+                          HDA_INPUT),
        { } /* end */
 };

@@ -2883,8 +2883,8 @@
  */
 static struct hda_verb ad1884_init_verbs[] = {
        /* DACs; mute as default */
-       {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
-       {0x04, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
+       {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
+       {0x04, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
        /* Port-A (HP) mixer */
        {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
        {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
@@ -2960,7 +2960,7 @@
  * Lenovo Thinkpad T61/X61
  */
 static struct hda_input_mux ad1984_thinkpad_capture_source = {
-       .num_items = 4,
+       .num_items = 3,
        .items = {
                { "Mic", 0x0 },
                { "Internal Mic", 0x1 },
@@ -2982,6 +2982,8 @@
        HDA_CODEC_VOLUME("Mic Boost", 0x14, 0x0, HDA_INPUT),
        HDA_CODEC_VOLUME("Internal Mic Boost", 0x15, 0x0, HDA_INPUT),
        HDA_CODEC_VOLUME("Docking Mic Boost", 0x25, 0x0, HDA_OUTPUT),
+       HDA_CODEC_VOLUME("Beep Playback Volume", 0x20, 0x03, HDA_INPUT),
+       HDA_CODEC_MUTE("Beep Playback Switch", 0x20, 0x03, HDA_INPUT),
        HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT),
        HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT),
        HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x0d, 0x0, HDA_OUTPUT),
@@ -3011,6 +3013,8 @@
        {0x25, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
        /* Analog mixer - docking mic; mute as default */
        {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
+       /* enable EAPD bit */
+       {0x12, AC_VERB_SET_EAPD_BTLENABLE, 0x02},
        { } /* end */
 };

ドライバのパラメータを指定しておく(不要かも)

echo "options snd-hda-intel model=thinkpad" >> /etc/modprobe.conf

あとは、ALSAのユーティリティ等を入れる。

# emerge alsa-utils gnome-alsamixer
# alsaconf
# alsamixer
  音量設定
  <Headphon> <Speaker> がMMになってる場合は選択してMでミュート解除しておく。
  スピーカーとヘッドホン別々にミュートできるので、いきなり職場で鳴り出して焦らなくてもいいように
  スピーカーはミュートのままにしておいた。
# rc-update add alsasound default

で音が鳴った!とりあえずFlashPluginでYoutube見るときとmpg123でmp3再生して音が鳴ることを確認。