2006-03-27 手前のバス停で降りてウォーキングしてみた [長年日記]
_1 CS4281: probe of 0000:00:0b.0 failed with error -5
昨日の続きで清水さんとこでのエラーメッセージ
sound/pci/cs4281.c static int __init alsa_card_cs4281_init(void) static inline int pci_register_driver(struct pci_driver *driver) int __pci_register_driver(struct pci_driver *drv, struct module *owner) int driver_register(struct device_driver * drv) int bus_add_driver(struct device_driver * drv) void driver_attach(struct device_driver * drv) int bus_for_each_dev(struct bus_type * bus, struct device * start, void * data, int (*fn)(struct device *, void *)) static int __driver_attach(struct device * dev, void * data) int driver_probe_device(struct device_driver * drv, struct device * dev) static int __devinit snd_cs4281_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
上のルートを通って,CS4281固有処理に到達.で,CS4281の中でデバイスの初期化をしているのだが, EIOを返すところが多すぎて今回どこでこけているのかいまいちよくわからん.
EIOの解釈からいうとデバイスがうまく動かん
#define EIO 5 /* I/O error */
なのでなんらかの理由により見つけられないのだと思うが,CONFIG_HZの値が変わると見つけられないのはちょっとおかしい, というか,かなり問題のように思える.何でやろうか.
もう少し調べてみる.
CS4281からEIOを返すのは以下の6箇所のみ.いずれも
static int snd_cs4281_chip_init(struct cs4281 *chip)
から呼ばれている.probe 以降
static int __devinit snd_cs4281_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) static int __devinit snd_cs4281_create(struct snd_card *card, struct pci_dev *pci, struct cs4281 ** rchip, int dual_codec) static int snd_cs4281_chip_init(struct cs4281 *chip)
1416 static int snd_cs4281_chip_init(struct cs4281 *chip) 1433 snd_printk(KERN_ERR "CFLR setup failed (0x%x)\n", tmp); 1434 return -EIO; 1444 snd_printk(KERN_ERR "SERC1 AC'97 check failed (0x%x)\n", tmp); 1445 return -EIO; 1448 snd_printk(KERN_ERR "SERC2 AC'97 check failed (0x%x)\n", tmp); 1449 return -EIO; 1510 snd_printk(KERN_ERR "DLLRDY not seen\n"); 1511 return -EIO; 1536 snd_printk(KERN_ERR "never read codec ready from AC'97 (0x%x)\n", snd_cs4281_peekBA0(chip, BA0_ACSTS)); 1537 return -EIO; 1577 snd_printk(KERN_ERR "never read ISV3 and ISV4 from AC'97\n"); 1578 return -EIO;
errorメッセージの上の行にどれかが出ているはず.
またsnd_cs4281_chip_init()にたどり着くまでに,pci_enbale_device(), pci_request_regions(), request_irq()などが 完了しているのでCS4281非依存部は終わっているように思う.
snd_cs4281_pokeBA0() snd_cs4281_peekBA0()
はレジスタに対するwrite, read命令を発行しているだけ.レジスタの値を読んで期待のものではないときにEIOで終わっている. じゃぁなぜこれが起きるのかといわれると分からん.
すみませんが,errorメッセージの上あたりに上記メッセージのいずれかが出ていないか確認できませんか?>清水さん
_2 ウィルキンソンジンジャーエール
どこかで取り上げられていたのを見て飲みたくなった.近所のちょっと高級なスーパで見つけたので買ってみた.
あれ?思っていたほど辛くない.確かにノドとか鼻にツンとくるものはあるけどぜんぜん飲める.大学生の頃に飲んだときは途中で飲むのをあきらめたような気がしたのだが.味の好みが変わったかな?今のオレならマウンテン・デュー ドライジンジャーでも飲めるような気がする.
こんな詳細まで調べていただいて,ありがとうございます.<br>素人が勝手にエラーメッセージを抜粋するのはよくないですね.往々にして大事な部分が抜け落ちます…<br>munedaさんの予想どおり,<br>never read ISV3 and ISV4 from AC'97<br>を発見しました.と,これだけで終わらせてしまうと,前と同じ事になってしまうので,CONFIG_HZ が 250の時(正常)と1000の時(エラー)のふたつのdmesgを置いておきます.<br>http://furyo.on-air.ne.jp/data/snd_cs4281_OK.txt<br>http://furyo.on-air.ne.jp/data/snd_cs4281_error.txt
http://furyo.on-air.ne.jp/tdiary/?date=20060328#p02<br>猿も叩けば日記<br>[linux]CS4281の認識とCONFIG_HZの関係<br> munedaさんが調べてくださってる. 自分でも何かやってみようと思って,とりあえず2.6.16のChangelogを見てみた. Author: Patrick Mochel Date: Fri Jan 6 00:15:14 2006 -0800 [PATCH] oss: remove deprecated PM interface from cs4281 driver This change removes the..