diff options
author | Takashi Iwai <tiwai@suse.de> | 2023-06-12 10:10:52 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2023-06-12 18:22:33 +0200 |
commit | 6a8b4800ae54e9ceb8d017bcfb61d04ff0da90f2 (patch) | |
tree | 3c40c2c483e656616d8f93167b1384fc4a714411 /sound/core/ump.c | |
parent | 174a6dfbc17ee9defed4daeeea6061ef34644f02 (diff) | |
download | lwn-6a8b4800ae54e9ceb8d017bcfb61d04ff0da90f2.tar.gz lwn-6a8b4800ae54e9ceb8d017bcfb61d04ff0da90f2.zip |
ALSA: seq: ump: Notify UMP protocol change to sequencer
UMP v1.1 supports the protocol switch via a UMP Stream message. When
it's received, we need to take care of the midi_version field in the
corresponding sequencer client, too.
This patch introduces a new ops to notify the protocol change to
snd_seq_ump_ops for handling it.
Link: https://lore.kernel.org/r/20230612081054.17200-9-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core/ump.c')
-rw-r--r-- | sound/core/ump.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sound/core/ump.c b/sound/core/ump.c index c0cda12bce10..f364bb290d3a 100644 --- a/sound/core/ump.c +++ b/sound/core/ump.c @@ -657,14 +657,27 @@ static int ump_handle_product_id_msg(struct snd_ump_endpoint *ump, buf->raw, 2); } +/* notify the protocol change to sequencer */ +static void seq_notify_protocol(struct snd_ump_endpoint *ump) +{ +#if IS_ENABLED(CONFIG_SND_SEQUENCER) + if (ump->seq_ops && ump->seq_ops->switch_protocol) + ump->seq_ops->switch_protocol(ump); +#endif /* CONFIG_SND_SEQUENCER */ +} + /* handle EP stream config message; update the UMP protocol */ static int ump_handle_stream_cfg_msg(struct snd_ump_endpoint *ump, const union snd_ump_stream_msg *buf) { + unsigned int old_protocol = ump->info.protocol; + ump->info.protocol = (buf->stream_cfg.protocol << 8) | buf->stream_cfg.jrts; ump_dbg(ump, "Current protocol = %x (caps = %x)\n", ump->info.protocol, ump->info.protocol_caps); + if (ump->parsed && ump->info.protocol != old_protocol) + seq_notify_protocol(ump); return 1; /* finished */ } |