]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ALSA: ump: Update legacy substream names upon FB info update
authorTakashi Iwai <tiwai@suse.de>
Fri, 29 Nov 2024 09:45:44 +0000 (10:45 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 29 Nov 2024 10:07:37 +0000 (11:07 +0100)
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>
sound/core/ump.c

index 7b00a957e5489a2d0e7c2e1199026bdbca54b4b5..d2b810eb84bcb814c34d3a049bb5b7cb57ad86cf 100644 (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;