ALSA: bebob: enable to deliver MIDI messages for multiple ports
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 21 Mar 2021 03:28:31 +0000 (12:28 +0900)
committerTakashi Iwai <tiwai@suse.de>
Mon, 22 Mar 2021 11:23:12 +0000 (12:23 +0100)
Current implementation of bebob driver doesn't correctly handle the case
that the device has multiple MIDI ports. The cause is the number of MIDI
conformant data channels is passed to AM824 data block processing layer.

This commit fixes the bug.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210321032831.340278-4-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/bebob/bebob_stream.c

index 23579a73e0380921412b8948534edd03130f2d95..b612ee3e33b658c7e5293564c57844e818be053b 100644 (file)
@@ -517,20 +517,22 @@ int snd_bebob_stream_init_duplex(struct snd_bebob *bebob)
 static int keep_resources(struct snd_bebob *bebob, struct amdtp_stream *stream,
                          unsigned int rate, unsigned int index)
 {
-       struct snd_bebob_stream_formation *formation;
+       unsigned int pcm_channels;
+       unsigned int midi_ports;
        struct cmp_connection *conn;
        int err;
 
        if (stream == &bebob->tx_stream) {
-               formation = bebob->tx_stream_formations + index;
+               pcm_channels = bebob->tx_stream_formations[index].pcm;
+               midi_ports = bebob->midi_input_ports;
                conn = &bebob->out_conn;
        } else {
-               formation = bebob->rx_stream_formations + index;
+               pcm_channels = bebob->rx_stream_formations[index].pcm;
+               midi_ports = bebob->midi_output_ports;
                conn = &bebob->in_conn;
        }
 
-       err = amdtp_am824_set_parameters(stream, rate, formation->pcm,
-                                        formation->midi, false);
+       err = amdtp_am824_set_parameters(stream, rate, pcm_channels, midi_ports, false);
        if (err < 0)
                return err;