18 July 2009

TOSHIBA Satellite P1WでALSAサウンドデバイスを有効にする

企業用ノートパソコン TOSHIBA Satellite P1W 160C/4WにインストールしたLinux (Ubuntu 9.04)でALSAサウンドデバイスを有効にする方法。

Googleで唯一解決策が掲載されていた『ubuntu8.04で新・音を出るようにする。toshiba satellite p1w 160c/4wP1W編 (http://od.kururu.info/archives/43)』を参考に作業を進める。

ALSAの公式サイト(http://alsa.linux.or.jp/)より、Ubuntu 9.04で使われているのと同じバージョンのALSAドライバのソースコードをダウンロードする。
(Ubuntuのソースコード配布サイト http://packages.ubuntu.com/source/jaunty/alsa-driver からダウンロードしたものは、makeに失敗するため、ALSA本家のものを今回は利用している)

ドライバ本体 : alsa-driver-1.0.18.tar.bz2

PCI IDをチェックする

root@localhost:~# lspci -x ~ 略 ~ 30: 00 00 00 00 70 00 00 00 00 00 00 00 ff 01 00 00 00:14.2 Audio device: ATI Technologies Inc IXP SB4x0 High Definition Audio Controller (rev 01) 00: 02 10 7b 43 06 00 10 04 01 00 03 04 08 40 00 00 10: 04 00 00 c0 00 00 00 00 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 79 11 31 ff 30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 00 00 00 00:14.3 ISA bridge: ATI Technologies Inc IXP SB400 PCI-ISA Bridge (rev 80) 00: 02 10 77 43 0f 00 20 02 80 00 01 06 00 00 80 00 10

ベンダーID=0x1179, デバイスID=0xff31 と読み取れる。 ドライバのソースコードを解凍し、そのうち一ヶ所を次の用に修正する。

./alsa-kernel/pci/hda/patch_realtek.c
~ 略 ... 13350行目あたり ~ static struct snd_pci_quirk alc861_cfg_tbl[] = { SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC861_3ST), SND_PCI_QUIRK(0x1043, 0x1335, "ASUS F2/3", ALC861_ASUS_LAPTOP), SND_PCI_QUIRK(0x1043, 0x1338, "ASUS F2/3", ALC861_ASUS_LAPTOP), SND_PCI_QUIRK(0x1179, 0xff31, "ASUS F2/3", ALC861_ASUS_LAPTOP), ← この行を追加 SND_PCI_QUIRK(0x1043, 0x1393, "ASUS", ALC861_ASUS), SND_PCI_QUIRK(0x1043, 0x13d7, "ASUS A9rp", ALC861_ASUS_LAPTOP), SND_PCI_QUIRK(0x1043, 0x81cb, "ASUS P1-AH2", ALC861_3ST_DIG), SND_PCI_QUIRK(0x1179, 0xff00, "Toshiba", ALC861_TOSHIBA), /* FIXME: the entry below breaks Toshiba A100 (model=auto works!) * Any other models that need this preset? */ /* SND_PCI_QUIRK(0x1179, 0xff10, "Toshiba", ALC861_TOSHIBA), */ SND_PCI_QUIRK(0x1462, 0x7254, "HP dx2200 (MSI MS-7254)", ALC861_3ST), SND_PCI_QUIRK(0x1462, 0x7297, "HP dx2250 (MSI MS-7297)", ALC861_3ST), SND_PCI_QUIRK(0x1584, 0x2b01, "Uniwill X40AIx", ALC861_UNIWILL_M31), SND_PCI_QUIRK(0x1584, 0x9072, "Uniwill m31", ALC861_UNIWILL_M31), SND_PCI_QUIRK(0x1584, 0x9075, "Airis Praxis N1212", ALC861_ASUS_LAPTOP), /* FIXME: the below seems conflict */ /* SND_PCI_QUIRK(0x1584, 0x9075, "Uniwill", ALC861_UNIWILL_M31), */ SND_PCI_QUIRK(0x1849, 0x0660, "Asrock 939SLI32", ALC660_3ST), SND_PCI_QUIRK(0x8086, 0xd600, "Intel", ALC861_3ST), {} };

また、GCCで警告が出てmakeが中断する異を避けるために、MAKEFILEに次のような改竄を試みる。

./Makefile.conf
~ 略 ~ ARCH ?= i386 ifdef NEW_KBUILD CC = $(CROSS_COMPILE)gcc -w ← -wオプション付加 CPP = $(CROSS_COMPILE)gcc -E export CROSS_COMPILE ARCH ~ 略 ~

そして、ビルド、インストールを行う。

root@localhost:~/alsa-driver-1.0.18# ./configure root@localhost:~/alsa-driver-1.0.18# make root@localhost:~/alsa-driver-1.0.18# make install

ここで、コンピュータを再起動して、次のモジュール設定ファイルにモジュールの強制ロード指定を追加する。

/etc/modprobe.d/alsa-base.conf
~ 略 ~ # Ubuntu #62691, enable MPU for snd-cmipci options snd-cmipci mpu_port=0x330 fm_port=0x388 options snd-hda-intel model=asus-laptop ← この行を追加 # Keep snd-pcsp from beeing loaded as first soundcard options snd-pcsp index=-2

再起動すれば、サウンドデバイスが利用できるようになっているが、起動時に運が悪いと音が鳴らなかったり、間延びしたような訳の分からない再生状況になったりするので、まだどこかの設定が不足しているようだ…