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

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