usb: gadget: midi2: Fix MIDI2 IN EP max packet size
authorTakashi Iwai <tiwai@suse.de>
Fri, 5 Sep 2025 13:32:34 +0000 (15:32 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 6 Sep 2025 13:30:47 +0000 (15:30 +0200)
The EP-IN of MIDI2 (altset 1) wasn't initialized in
f_midi2_create_usb_configs() as it's an INT EP unlike others BULK
EPs.  But this leaves rather the max packet size unchanged no matter
which speed is used, resulting in the very slow access.
And the wMaxPacketSize values set there look legit for INT EPs, so
let's initialize the MIDI2 EP-IN there for achieving the equivalent
speed as well.

Fixes: 8b645922b223 ("usb: gadget: Add support for USB MIDI 2.0 function driver")
Cc: stable <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20250905133240.20966-1-tiwai@suse.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/function/f_midi2.c

index b351f9ae0fc5080c64c408d83c0450a9e19c7116..de16b02d857e07e2bef1643fd32a5d0f1cd0c975 100644 (file)
@@ -1737,9 +1737,12 @@ static int f_midi2_create_usb_configs(struct f_midi2 *midi2,
        case USB_SPEED_HIGH:
                midi2_midi1_ep_out_desc.wMaxPacketSize = cpu_to_le16(512);
                midi2_midi1_ep_in_desc.wMaxPacketSize = cpu_to_le16(512);
-               for (i = 0; i < midi2->num_eps; i++)
+               for (i = 0; i < midi2->num_eps; i++) {
                        midi2_midi2_ep_out_desc[i].wMaxPacketSize =
                                cpu_to_le16(512);
+                       midi2_midi2_ep_in_desc[i].wMaxPacketSize =
+                               cpu_to_le16(512);
+               }
                fallthrough;
        case USB_SPEED_FULL:
                midi1_in_eps = midi2_midi1_ep_in_descs;
@@ -1748,9 +1751,12 @@ static int f_midi2_create_usb_configs(struct f_midi2 *midi2,
        case USB_SPEED_SUPER:
                midi2_midi1_ep_out_desc.wMaxPacketSize = cpu_to_le16(1024);
                midi2_midi1_ep_in_desc.wMaxPacketSize = cpu_to_le16(1024);
-               for (i = 0; i < midi2->num_eps; i++)
+               for (i = 0; i < midi2->num_eps; i++) {
                        midi2_midi2_ep_out_desc[i].wMaxPacketSize =
                                cpu_to_le16(1024);
+                       midi2_midi2_ep_in_desc[i].wMaxPacketSize =
+                               cpu_to_le16(1024);
+               }
                midi1_in_eps = midi2_midi1_ep_in_ss_descs;
                midi1_out_eps = midi2_midi1_ep_out_ss_descs;
                break;