Re: [PATCH] USB: Add quirk for WORLDE easykey.25 MIDI keyboard

From: Greg Kroah-Hartman
Date: Sat Jan 21 2017 - 04:08:32 EST


On Fri, Jan 20, 2017 at 07:46:34PM +0100, LukÃÅ Lalinskà wrote:
> Add a quirk for WORLDE easykey.25 MIDI keyboard (idVendor=0218,
> idProduct=0401). The device reports that it has config string
> descriptor at index 3, but when the system selects the configuration
> and tries to get the description, it returns a -EPROTO error,
> the communication restarts and this keeps repeating over and over again.
> Not requesting the string descriptor makes the device work correctly.

Always use scripts/get_maintainer.pl to determine who to send patches
to, and what mailing list. You forgot linux-usb@vger, which I've now
added...

>
> Relevant info from Wireshark:
>
> [...]
>
> CONFIGURATION DESCRIPTOR
> bLength: 9
> bDescriptorType: 0x02 (CONFIGURATION)
> wTotalLength: 101
> bNumInterfaces: 2
> bConfigurationValue: 1
> iConfiguration: 3
> Configuration bmAttributes: 0xc0 SELF-POWERED NO REMOTE-WAKEUP
> 1... .... = Must be 1: Must be 1 for USB 1.1 and higher
> .1.. .... = Self-Powered: This device is SELF-POWERED
> ..0. .... = Remote Wakeup: This device does NOT support remote wakeup
> bMaxPower: 50 (100mA)
>
> [...]
>
> 45 0.369104 host 2.38.0 USB 64 GET DESCRIPTOR Request STRING
>
> [...]
>
> URB setup
> bmRequestType: 0x80
> 1... .... = Direction: Device-to-host
> .00. .... = Type: Standard (0x00)
> ...0 0000 = Recipient: Device (0x00)
> bRequest: GET DESCRIPTOR (6)
> Descriptor Index: 0x03
> bDescriptorType: 0x03
> Language Id: English (United States) (0x0409)
> wLength: 255
>
> 46 0.369255 2.38.0 host USB 64 GET DESCRIPTOR Response STRING[Malformed Packet]
>
> [...]
>
> Frame 46: 64 bytes on wire (512 bits), 64 bytes captured (512 bits) on interface 0
> USB URB
> [Source: 2.38.0]
> [Destination: host]
> URB id: 0xffff88021f62d480
> URB type: URB_COMPLETE ('C')
> URB transfer type: URB_CONTROL (0x02)
> Endpoint: 0x80, Direction: IN
> Device: 38
> URB bus id: 2
> Device setup request: not relevant ('-')
> Data: present (0)
> URB sec: 1484896277
> URB usec: 455031
> URB status: Protocol error (-EPROTO) (-71)
> URB length [bytes]: 0
> Data length [bytes]: 0
> [Request in: 45]
> [Time from request: 0.000151000 seconds]
> Unused Setup Header
> Interval: 0
> Start frame: 0
> Copy of Transfer Flags: 0x00000200
> Number of ISO descriptors: 0
> [Malformed Packet: USB]
> [Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]
> [Malformed Packet (Exception occurred)]
> [Severity level: Error]
> [Group: Malformed]
>
> Signed-off-by: LukÃÅ Lalinskà <lukas@xxxxxxxxxx>
> ---
> drivers/usb/core/quirks.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
> index d2e50a2..24f9f98 100644
> --- a/drivers/usb/core/quirks.c
> +++ b/drivers/usb/core/quirks.c
> @@ -37,6 +37,10 @@ static const struct usb_device_id usb_quirk_list[] = {
> /* CBM - Flash disk */
> { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },
>
> + /* WORLDE easy key (easykey.25) MIDI controller */
> + { USB_DEVICE(0x0218, 0x0401), .driver_info =
> + USB_QUIRK_CONFIG_INTF_STRINGS },

That's odd, how does other operating systems handle this device?

thanks,

greg k-h