summaryrefslogtreecommitdiff
path: root/sound/usb/midi2.c
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2024-09-27 08:13:52 +0200
committerPaolo Abeni <pabeni@redhat.com>2024-09-27 08:13:52 +0200
commit3a39d672e7f48b8d6b91a09afa4b55352773b4b5 (patch)
treef7ec4043b508f48430dd09ac338c38acf7d5a6cd /sound/usb/midi2.c
parent151ac45348afc5b56baa584c7cd4876addf461ff (diff)
parent62a0e2fa40c5c06742b8b4997ba5095a3ec28503 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR. No conflicts and no adjacent changes. Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'sound/usb/midi2.c')
-rw-r--r--sound/usb/midi2.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/sound/usb/midi2.c b/sound/usb/midi2.c
index 820d3e4b672a..692dfc3c182f 100644
--- a/sound/usb/midi2.c
+++ b/sound/usb/midi2.c
@@ -607,12 +607,8 @@ static int parse_group_terminal_block(struct snd_usb_midi2_ump *rmidi,
return 0;
}
- if (ump->info.protocol && ump->info.protocol != protocol)
- usb_audio_info(rmidi->umidi->chip,
- "Overriding preferred MIDI protocol in GTB %d: %x -> %x\n",
- rmidi->usb_block_id, ump->info.protocol,
- protocol);
- ump->info.protocol = protocol;
+ if (!ump->info.protocol)
+ ump->info.protocol = protocol;
protocol_caps = protocol;
switch (desc->bMIDIProtocol) {
@@ -624,13 +620,7 @@ static int parse_group_terminal_block(struct snd_usb_midi2_ump *rmidi,
break;
}
- if (ump->info.protocol_caps && ump->info.protocol_caps != protocol_caps)
- usb_audio_info(rmidi->umidi->chip,
- "Overriding MIDI protocol caps in GTB %d: %x -> %x\n",
- rmidi->usb_block_id, ump->info.protocol_caps,
- protocol_caps);
- ump->info.protocol_caps = protocol_caps;
-
+ ump->info.protocol_caps |= protocol_caps;
return 0;
}
@@ -873,9 +863,25 @@ 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;
+ }
+ }
+
+ snd_ump_update_group_attrs(rmidi->ump);
+
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;
}