ALSA: usb-audio: Set MIDI1 flag appropriately for GTB MIDI 1.0 entry
authorTakashi Iwai <tiwai@suse.de>
Wed, 7 Aug 2024 09:22:58 +0000 (11:22 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 7 Aug 2024 09:31:37 +0000 (11:31 +0200)
When a MIDI 1.0 protocol is specified in a GTB entry while others are
set in MIDI 2.0, it should be seen as a legacy MIDI 1.0 port.  Since
recently we allow drivers to set a flag SNDRV_UMP_BLOCK_IS_MIDI1 to a
FB for that purpose.  This patch tries to set that flag when the
device shows such a configuration.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20240807092303.1935-4-tiwai@suse.de
sound/usb/midi2.c

index fa655aa4a56ff2e65b7fe2c46ac06f9959e7d9fd..4fb43d9743d7d9a81d355faa284f37c35da755ff 100644 (file)
@@ -863,9 +863,23 @@ static int create_gtb_block(struct snd_usb_midi2_ump *rmidi, int dir, int blk)
                fb->info.flags |= SNDRV_UMP_BLOCK_IS_MIDI1 |
                        SNDRV_UMP_BLOCK_IS_LOWSPEED;
 
+       /* if MIDI 2.0 protocol is supported and yet the GTB shows MIDI 1.0,
+        * treat it as a MIDI 1.0-specific block
+        */
+       if (rmidi->ump->info.protocol_caps & SNDRV_UMP_EP_INFO_PROTO_MIDI2) {
+               switch (desc->bMIDIProtocol) {
+               case USB_MS_MIDI_PROTO_1_0_64:
+               case USB_MS_MIDI_PROTO_1_0_64_JRTS:
+               case USB_MS_MIDI_PROTO_1_0_128:
+               case USB_MS_MIDI_PROTO_1_0_128_JRTS:
+                       fb->info.flags |= SNDRV_UMP_BLOCK_IS_MIDI1;
+                       break;
+               }
+       }
+
        usb_audio_dbg(umidi->chip,
-                     "Created a UMP block %d from GTB, name=%s\n",
-                     blk, fb->info.name);
+                     "Created a UMP block %d from GTB, name=%s, flags=0x%x\n",
+                     blk, fb->info.name, fb->info.flags);
        return 0;
 }