LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Hardware (https://www.linuxquestions.org/questions/linux-hardware-18/)
-   -   How to force kernel to use a USB 2.0-compatible device (ehci_hcd) as a USB 1.1 device (https://www.linuxquestions.org/questions/linux-hardware-18/how-to-force-kernel-to-use-a-usb-2-0-compatible-device-ehci_hcd-as-a-usb-1-1-device-445289/)

eze 05-16-2006 05:24 AM

How to force kernel to use a USB 2.0-compatible device (ehci_hcd) as a USB 1.1 device
 
Hi.

I've been using Linux for a long time now (very actively for almost 10 years now), and now I'm stuck with a configuration problem that hopefully should be possible to work around.

I have a Linksys WUSB54GP wireless network adapter. It works well under Windows, and even under Linux on my desktop PC (even using it as a USB 2.0 device). But on my laptop it's a different story. To cut a long story short (see http://bugzilla.kernel.org/show_bug.cgi?id=6374), I'm getting unexpected "USB disconnect" after a few hours (independently of how much the device was used) when using this device with the ehci-hcd module. Using the same device as a USB 1.1 device (uhci-hcd module) yields no problems, so now I'm trying to move on and use this device as a USB 1.1 one until hopefully some day everything starts working under ehci-hcd.

I've made this device work by removing (rmmod) the ehci-hcd module. I've been doing all of this with gentoo's suspend2-sources-2.6.16-r4, gentoo-sources-2.6.14-r2; and also with vanilla kernels 2.6.16.16, 2.6.17_rc3 and 2.6.17_rc4.

This is an excerpt from /proc/bus/usb/devices:

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0000 ProdID=0000 Rev= 2.06
S: Manufacturer=Linux 2.6.16-suspend2-r4 uhci_hcd
S: Product=UHCI Host Controller
S: SerialNumber=0000:00:10.0
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=13b1 ProdID=0011 Rev= 0.04
S: Manufacturer=Cisco-Linksys
S: Product=Wireless-G ProtableUSB Adapter
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=300mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ndiswrapper
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms


As you see, the device is being used as a USB 1.1 one (Spd=12, Bus=01), but USB 2.0 capable (Ver=2.00, and I've also seen this device recognised as a USB 2.0 device on a previous configuration).

The question I have for the nice people here is: how do I force the kernel to use the uhci-hcd module instead of ehci-hcd *just for this device*, considering that I want to plug other USB 2.0 devices to the same machine? Is there any solution involving hotplug? (I think it's probably "too late" for hotplug to determine which host controller device to use). Can I edit some kernel source file (I haven't looked into that yet) to force the other host controller driver (uhci-hcd) instead of the automatically chosen one (ehci-hcd)?

The ndiswrapper module is handling the device at a higher level, although I suspect this doesn't have much to do with the problem. I've seen identical behaviour showing when using the open source rt2570 and even rt2x00 projects' modules instead.

Hope someone can help me with this.


All times are GMT -5. The time now is 12:57 PM.