理由は不明だが、SETUPトークンの次にUSB HostからRESET/SUSPENDが来ることがあるようなので、MUSBのSUSPENDを無効にしてみよう。
<7>musb_interrupt 1530: ** IRQ peripheral usb000c tx0000 rx0000
<7>musb_stage0_irq 385: <== Power=f0, DevCtl=99, int_usb=0xc
<7>musb_stage0_irq 647: BUS RESET as b_peripheral
<7>musb_g_reset 1995: <== B-Device addr=0 driver 'android_usb'
<7>musb_g_disconnect 1939: devctl 99
・・・単にSUSPENDしないだけで、その次にRESETされてるのを忘れていた。
では、毒喰らわば、ということで、リセットも無効にしてみた。
しかし、単にリセットしないだけで、結局SETUPからリトライされている。
しまいには「peripheral reset irq lost!」なんて怒られてしまった。
Host側のdmesgは、こうなっていた。
[25684.100447] usb 1-4.4: new high speed USB device using ehci_hcd and address 105
[25684.210418] usb 1-4.4: no configurations
[25684.210428] usb 1-4.4: can't read configurations, error -22
[25684.300428] usb 1-4.4: new high speed USB device using ehci_hcd and address 106
[25684.410404] usb 1-4.4: no configurations
[25684.410414] usb 1-4.4: can't read configurations, error -22
[25684.500423] usb 1-4.4: new high speed USB device using ehci_hcd and address 107
[25684.530485] usb 1-4.4: no configurations
[25684.530495] usb 1-4.4: can't read configurations, error -22
[25684.620363] usb 1-4.4: new high speed USB device using ehci_hcd and address 108
[25684.650607] usb 1-4.4: no configurations
[25684.650617] usb 1-4.4: can't read configurations, error -22
[25684.660101] hub 1-4:1.0: unable to enumerate USB device on port 4
うん、昔から変わってない。
「unable to enumeration」だ。
「peripheral reset irq lost!」が気になったので、追ってみた。
これは、SETUPパケットを読んだ後、通信速度が未定だった場合に出ている。
ということは、あのRESETには通信速度を決める意味があるのか?
確かに、musb_g_reset()内でmusb->g.speedを決める処理があった。
決める箇所は、ここか、「reset irq lost!」のところだけだ。
通信速度g.speedは、状態を見極める意味で使われているところがままある。
もしや、と、通信速度が決定したらRESETさせない、とすると・・・同じだった。
うーん、どうもそういう問題ではないようだ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。