ETG-US2
動いた。drivers/usb/net/asix.cのasix_write_cmd関数に下みたいな感じでmsleepを挟んだら動いた。printkを入れながら動作を追っていたところ、この関数にprintkを挟んだら動作が変わった(さっきまでエラーで死んでいたところが、通ったりした)ので、じゃあsleepだろうということで、入れてみたら成功。うーん、難しいな。
static int asix_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, u16 size, void *data) { // odawara memo printk("DEBUG: asix_write_cmd\n"); msleep(100); return usb_control_msg( dev->udev, usb_sndctrlpipe(dev->udev, 0), cmd, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, value, index, data, size, USB_CTRL_SET_TIMEOUT); }
ちなみに、2.6.19のasix.cではどうなってるのだろう?(最初からそっちを確認しろって感じか)