# ehci_hcd and uhci_hcd

## shallpion

Hi guys. I am using 2.6.33-gentoo amd64 with ehci_hcd and uhci_hcd compiled as modules. Most of time ehci_hcd can handle my usb hard drives well. But I do have several creepy mp3 players for whom I have to modprobe -r ehci_hcd at first then let uhci_hcd to handle them. Is there any way I can let manually let the kernel know which module should be used to initiate the usb drive? thanks....

----------

## kimmie

As far as I can tell from a little googling, it's not possble to pick the driver per device... there's  a patch someone came up with a while back http://markmail.org/message/v2ro33mydllddvtk but even in in the unlikely event it's still valid, it requires you to manually echo 1 >/sys/something before you connect the device, so what's the point? might as well modprobe -r.

But maybe your creepy devices are know to have quirks and can be handled in a different way (BTW I like your use of "creepy". My Grandad used to call anybody not driving at or over the speedlimit a "@#$ creeper"; in his mind it was somehow associated with a "creep" as well as going slow).

Do you have CONFIG_USB_LIBUSUAL=Y set in you kernel? This builds the libusual "shared table of common (or usual) storage devices" module (actually, from my reading it would be beter named UNusual, but anyway) which allows for quirks of some twitchy devices. It allows you to switch handling of these devices from the usb_storage module to the ub (low perfomance USB block device) module, which might fix your problem. I can't tell from a quick reading of the code whether it does anything if you don't tell it to switch the block device. my guess is yes, actually.

The list of these usual/unusual devices is in /usr/src/linux/drivers/usb/storage/unusual_devs.h, there are a couple of Samsung MP3 players listed, and a few others that look like media players, maybe you can find yours in there? That would be a good sign. 

To enable this stuff:  Build the libusual module (Device drivers | USB support | Shared table of common  ...)

 Build the ub module (Device Drivers | Block Devices | Low Performance US=B Block driver)

 There's a bias parameter to the libusual module bias="ub" or "usb-storage" or "none", I'd try modprobe libusual bias="usb-storage" first, then the other options. Probably best to test it's not stuffing up your normal drives tooAnyway, the docs are a little thin, so this is a bit of a shot in the dark. Seems worth a try though, I hope it works for you.

----------

## shallpion

Thanks for the replay, I have libusual in kernel=y  :Sad: 

Those usb devices work fine under windows, so I was wondering if there is any to use a specific driver per device.... Anyway, those informations are very useful---I even didn't know what the libusual is... Thank you

----------

## kimmie

np  :Smile:  Sorry if I wasn't clear, but you might have to set CONFIG_USB_LIBUSUAL=M, CONFIG_BLK_DEV_UB=M and load libusual as modprobe libusual bias="ub" to  see any change....

----------

