On Tue, 27 Mar 2007, Casey Ballentine wrote: > On 3/14/07, Alan Stern <[EMAIL PROTECTED]> wrote: > > > > Very interesting. The critical part of the usbmon log is this: > > > > dd63a4c0 3538778184 S Ci:005:00 s 80 06 0302 0409 00ff 255 < > > dd63a4c0 3538782142 C Ci:005:00 0 48 = 30034d00 75006c00 74006900 6d006500 > > 64006900 61002000 4b006500 79006200 > > dd63a4c0 3538782785 S Ci:005:00 s a0 06 2900 0000 000d 13 < > > dd63a4c0 3538785139 C Ci:005:00 0 9 = 30034d00 75006c00 74 > > > > The first two lines are a Get-String-Descriptor request followed by its > > reply. The last two lines are a Get-Hub-Descriptor request and its reply. > > > > Notice that the so-called hub descriptor is nothing of the kind! In fact, > > it is the first 9 bytes of the previous string descriptor. It may seem > > odd that the device sent back 9 bytes when the request was for 13 bytes > > and the string descriptor's length is 48. However 9 is a reasonable > > length for a hub descriptor. Evidently the device sent back the contents > > of the wrong buffer. > > > > Alan Stern > > Alan, thanks for your reply, but unfortunately we're still stumped. > > The device initializes just fine under WinXP SP2 with the embedded hub > and 2 ports.
That doesn't mean it's working right. But you didn't collect a trace log so we can't see what actually happened. > We've put the device on a USB bus analyzer and obtained > the attached log. It goes idle at record 275 - when the error too > many ports pops up. I disconnect it and re-attach it at record 311. > It errors out and goes idle again at record 584. It shows the same thing as the usbmon log you obtained earlier, but it is much more verbose and harder to read. I suggest you stick to usbmon unless you have some reason to think the data on the bus isn't the same as what the host receives. > I'm not very familiar with adding an UNUSUAL_DEVS entry to the kernel. Wrong term. unusual_devs.h is a file in the usb-storage driver; but you need to change the hub driver. > Would it be possible to force the hub to initialize with 2 ports > using this method? Sure; almost anything is possible. Just edit drivers/usb/core/hub.c. In the hub_configure() routine, change the lines that say: } else if (hub->descriptor->bNbrPorts > USB_MAXCHILDREN) { message = "hub has too many ports!"; ret = -ENODEV; goto fail; } to } else if (hub->descriptor->bNbrPorts > USB_MAXCHILDREN) { hub->descriptor->bNbrPorts = 2; } However the fact that the rest of the data in the hub descriptor is messed up could still cause problems for you. > We're trying to contact the part vendor regarding > the problem with the device firmware, but the response has been slow > to say the least. How is the labor of writing the firmware divided between your company and the vendor? Do they do everything? Or do they just do a basic framework, leaving it up to you to fill in all the application-specific portions? And who wrote the part responsible for sending the hub descriptor to the host? Alan Stern ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Linux-usb-users@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-users