[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ThinkPad S30



  どうも、桝田@阪大です。

  先日 ThinkPad S30(Windows2000,802.11b内蔵)を導入したのですが、

(1) CardBus/PCMCIA の Ether カードを挿すと刺さる。
	DDB が入っていても何にもできない状態になる。
	MicroDrive (wd)とかは大丈夫。
(2) audio が鳴らない。
auich0: unknown(0xffffffff) codec; headphone, Analog Devices Phat Stereo
	と出る。/dev/audio0 へのアクセスは、Invalid argument になる。
(3) suspend できない(致命的)
	apm で halt -p とかで電源は切れるが、suspend(Fn-F4)とか apm -z
	とかで寝かせると、ねるけれど、起きてこない(;_;)
	apm -S (stand-by) は大丈夫っぽい。

と三重苦になりました(;_;)

  何故か(^^;) sodaさんのお蔭で、

(0) options MSGBUFSIZE=0x8000 ぐらいにしておこう(^^;)
# man options

(1) options PCIBIOS_INTR_FIXUP_FORCE をつけた kernel で、刺さらなく
    なった。
	PCI Interrupt routing table の食い違いがあるらしい。
	でも、
cbb0: bad Vcc request. sock_ctrl 0x0, sock_status 0x30000b68
	とかいう、いやんな message が出る。(3Com Megahertz 3CCFE575BT)

# (FIXUP_FORCE の判別を)自動的に出来ないものかなぁ by sodaさん

(2) dev/pci/auich.c で、auich_read_codec とかでの DELAY を 100 に増やすと、
auich0: ADS72 codec; headphone, Analog Devices Phat Stereo
	となるようになった(10 では駄目だった)。
	が、/dev/audio0 へのアクセスは、やはり Invalid argument になる。
	帰りの新幹線の中で少しきばったところ、
# ICH_DEBUG と AUDIO_DEBUG をつっこみ、audiodebug=1 にしてみてます。
# gdb とかから、audiodebug 値を変更する方法が分からなかったのが悔しい。
 (a) dev/audio.c:audio_open() から、audio_softc に従って、
     dev/pci/auich.c:auich_open() が呼ばれるところは問題なさそう。
 (b) dev/audio.c:audio_set_param() から、dev/pci/auich.c:auich_set_params()
     が呼ばれているあたりを見てみると、audioctl(1) で -w play.rate=44100
     としても反映されないので、auich_write_codec の DELAY も 100 に増
     やすと、とりあえず audioctl play.rate とかで、設定した値が出てく
     るようになった。でもまだ、音は出ない。
 (c) dev/pci/auich.c:auich_attach() で、AC97_REG_EXTENDED_ID を読み込
     み、VRA はいけると踏んでいる(Warning の表示がでない)ようだが、 
     auich_set_params() で、44100 とかを AC97_REG_PCM_FRONT_DAC_RATE 
     に突っ込んでも、読み出すと 48000 が読めてしまうらしい。
# sample_rate って u_long なのね。
 (d) とりあえず、どっかで見たような気がする、
audioctl -w play=48000,2,16,slinear_le
mpg123 -s -r 48000 foo.mp3 > /dev/audio0
	とかしても駄目。そのとき、何故か
audio_open: flags=0x8402 sc=0xc0b98e00 hdl=0xc0b76200
audio: Setting record params sr=8000, enc=1, chan=1, prec=8
audio: Setting play params sr=8000, enc=1, chan=1, prec=8
auich0: halt_output
auich0: halt_input
	とかいう感じで、sampling rate とかが戻ってしまい、そのまま 
	auich_close() が呼ばれてしまってう(halt_output は、
	dev/pci/auich.c:auich_close() にある)。
 (e) dev/pci/auich.c:auich_read_codec() とかの bus_read_space_ 周りに
     DELAY() を入れまくるが変化なし。

(3) ACPI まわりを突っ込んだ kernel を作ってみた。
acpi0 at mainbus0 
acpiec* at acpi?
acpilid* at acpi?
acpibut* at acpi?
acpiacad* at acpi?
	すると、LCD を閉じると、acpilid が反応したり、Fn-F4()
	を押すと acpibut が反応したりするようだが、実際には何も起こら
	ない(;_;) 当然、halt -p での電源断も駄目になる。

  と、まだまだ前途多難です。
  もし、誰かが頑張っているなら情報交換がしたいのと、ここをこういう
方針で頑張ったらどうだろう、とかあれば教えて戴ければ嬉しいです。

# まさに逃避行動 :)
--
桝田 秀夫@情報科学科.基礎工学部.大阪大学[兼任](h-masuda@ics.es.osaka-u.ac.jp)