usb: core: Add "quirks" parameter for usbcore
Trying quirks in usbcore needs to rebuild the driver or the entire kernel if it's builtin. It can save a lot of time if usbcore has similar ability like "usbhid.quirks=" and "usb-storage.quirks=". Rename the original quirk detection function to "static" as we introduce this new "dynamic" function. Now users can use "usbcore.quirks=" as short term workaround before the next kernel release. Also, the quirk parameter can XOR the builtin quirks for debugging purpose. This is inspired by usbhid and usb-storage. Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
ca5a2e9a77
commit
027bd6cafd
@@ -4368,6 +4368,62 @@
|
||||
|
||||
usbcore.nousb [USB] Disable the USB subsystem
|
||||
|
||||
usbcore.quirks=
|
||||
[USB] A list of quirk entries to augment the built-in
|
||||
usb core quirk list. List entries are separated by
|
||||
commas. Each entry has the form
|
||||
VendorID:ProductID:Flags. The IDs are 4-digit hex
|
||||
numbers and Flags is a set of letters. Each letter
|
||||
will change the built-in quirk; setting it if it is
|
||||
clear and clearing it if it is set. The letters have
|
||||
the following meanings:
|
||||
a = USB_QUIRK_STRING_FETCH_255 (string
|
||||
descriptors must not be fetched using
|
||||
a 255-byte read);
|
||||
b = USB_QUIRK_RESET_RESUME (device can't resume
|
||||
correctly so reset it instead);
|
||||
c = USB_QUIRK_NO_SET_INTF (device can't handle
|
||||
Set-Interface requests);
|
||||
d = USB_QUIRK_CONFIG_INTF_STRINGS (device can't
|
||||
handle its Configuration or Interface
|
||||
strings);
|
||||
e = USB_QUIRK_RESET (device can't be reset
|
||||
(e.g morph devices), don't use reset);
|
||||
f = USB_QUIRK_HONOR_BNUMINTERFACES (device has
|
||||
more interface descriptions than the
|
||||
bNumInterfaces count, and can't handle
|
||||
talking to these interfaces);
|
||||
g = USB_QUIRK_DELAY_INIT (device needs a pause
|
||||
during initialization, after we read
|
||||
the device descriptor);
|
||||
h = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL (For
|
||||
high speed and super speed interrupt
|
||||
endpoints, the USB 2.0 and USB 3.0 spec
|
||||
require the interval in microframes (1
|
||||
microframe = 125 microseconds) to be
|
||||
calculated as interval = 2 ^
|
||||
(bInterval-1).
|
||||
Devices with this quirk report their
|
||||
bInterval as the result of this
|
||||
calculation instead of the exponent
|
||||
variable used in the calculation);
|
||||
i = USB_QUIRK_DEVICE_QUALIFIER (device can't
|
||||
handle device_qualifier descriptor
|
||||
requests);
|
||||
j = USB_QUIRK_IGNORE_REMOTE_WAKEUP (device
|
||||
generates spurious wakeup, ignore
|
||||
remote wakeup capability);
|
||||
k = USB_QUIRK_NO_LPM (device can't handle Link
|
||||
Power Management);
|
||||
l = USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL
|
||||
(Device reports its bInterval as linear
|
||||
frames instead of the USB 2.0
|
||||
calculation);
|
||||
m = USB_QUIRK_DISCONNECT_SUSPEND (Device needs
|
||||
to be disconnected before suspend to
|
||||
prevent spurious wakeup)
|
||||
Example: quirks=0781:5580:bk,0a5c:5834:gij
|
||||
|
||||
usbhid.mousepoll=
|
||||
[USBHID] The interval which mice are to be polled at.
|
||||
|
||||
|
Reference in New Issue
Block a user