ALSA: ump: Update legacy substream names upon FB info update

The legacy rawmidi substreams should be updated when UMP FB Info or
UMP FB Name are received, too.

Link: https://patch.msgid.link/20241129094546.32119-4-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Iwai 2024-11-29 10:45:44 +01:00
parent e29e504e78
commit edad3f9519

View File

@ -37,6 +37,7 @@ static int process_legacy_output(struct snd_ump_endpoint *ump,
u32 *buffer, int count);
static void process_legacy_input(struct snd_ump_endpoint *ump, const u32 *src,
int words);
static void update_legacy_names(struct snd_ump_endpoint *ump);
#else
static inline int process_legacy_output(struct snd_ump_endpoint *ump,
u32 *buffer, int count)
@ -47,6 +48,9 @@ static inline void process_legacy_input(struct snd_ump_endpoint *ump,
const u32 *src, int words)
{
}
static inline void update_legacy_names(struct snd_ump_endpoint *ump)
{
}
#endif
static const struct snd_rawmidi_global_ops snd_ump_rawmidi_ops = {
@ -861,6 +865,7 @@ static int ump_handle_fb_info_msg(struct snd_ump_endpoint *ump,
fill_fb_info(ump, &fb->info, buf);
if (ump->parsed) {
snd_ump_update_group_attrs(ump);
update_legacy_names(ump);
seq_notify_fb_change(ump, fb);
}
}
@ -893,6 +898,7 @@ static int ump_handle_fb_name_msg(struct snd_ump_endpoint *ump,
/* notify the FB name update to sequencer, too */
if (ret > 0 && ump->parsed) {
snd_ump_update_group_attrs(ump);
update_legacy_names(ump);
seq_notify_fb_change(ump, fb);
}
return ret;
@ -1262,6 +1268,14 @@ static void fill_substream_names(struct snd_ump_endpoint *ump,
}
}
static void update_legacy_names(struct snd_ump_endpoint *ump)
{
struct snd_rawmidi *rmidi = ump->legacy_rmidi;
fill_substream_names(ump, rmidi, SNDRV_RAWMIDI_STREAM_INPUT);
fill_substream_names(ump, rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT);
}
int snd_ump_attach_legacy_rawmidi(struct snd_ump_endpoint *ump,
char *id, int device)
{
@ -1298,10 +1312,7 @@ int snd_ump_attach_legacy_rawmidi(struct snd_ump_endpoint *ump,
rmidi->ops = &snd_ump_legacy_ops;
rmidi->private_data = ump;
ump->legacy_rmidi = rmidi;
if (input)
fill_substream_names(ump, rmidi, SNDRV_RAWMIDI_STREAM_INPUT);
if (output)
fill_substream_names(ump, rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT);
update_legacy_names(ump);
ump_dbg(ump, "Created a legacy rawmidi #%d (%s)\n", device, id);
return 0;