0
votes

tl;dr: How do I compel Linux to reject high-speed USB connections so that it defaults to full speed?

Full explanation:

I'm writing a USB gadget driver based on Linux gadget zero. The hardware I'm testing on has high speed capable USB which won't be the case of the actual product. For some reason, the gadget (although it has no high speed descriptors on any configuration) is being reported as a high speed gadget (struct usb_gadget->speed==USB_SPEED_HIGH on set_config function of composite gadget). This makes the driver fail miserably just before configuration bind (trying to load a high speed configuration that obviously doesn’t exist).

I'm looking for a way to inform Linux that the gadget is not high speed capable so that when a host connects the switch from fullspeed to highspeed is denied (or something that would produce a similar results).

2
before of running a compil process, you could try to unload or blacklist some modules, like uhci, ohci... take a look at man modprobe! - F. Hauri
The solution I finally applyed was to modify the usb gadget driver (I mean the hardware controler) so that the hardware rejected the highspeed request. (I designed the hardware/embedded system so I already had the required documentation, I dont think this is the best solution if applied to a generic PC). - user1783395

2 Answers

1
votes

uhci and ohci kernel modules drive USB 1.X controllers. ehci modules drives USB 2.0 controller.

If you unload one of these, you enforce a restriction to the other.

-1
votes
enum usb_device_speed       speed;
enum usb_device_speed       max_speed;

you can setup usb_composite_driver