ALSA: firewire-motu: code refactoring to finish streaming session
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 17 Jun 2019 08:15:07 +0000 (17:15 +0900)
committerTakashi Iwai <tiwai@suse.de>
Tue, 18 Jun 2019 06:45:30 +0000 (08:45 +0200)
The operation to finish packet streaming includes stopping isochronous
contexts. This commit merges it to the helper function.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/motu/motu-stream.c

index 4fbec35eaad542f5b4fb8680b6019d1ad8827d11..53c43848b1378de5fcc8370aa2e3b0df506117a0 100644 (file)
@@ -101,6 +101,9 @@ static void finish_session(struct snd_motu *motu)
        if (err < 0)
                return;
 
+       amdtp_stream_stop(&motu->tx_stream);
+       amdtp_stream_stop(&motu->rx_stream);
+
        err = snd_motu_transaction_read(motu, ISOC_COMM_CONTROL_OFFSET, &reg,
                                        sizeof(reg));
        if (err < 0)
@@ -219,11 +222,8 @@ int snd_motu_stream_start_duplex(struct snd_motu *motu, unsigned int rate)
                rate = curr_rate;
        if (rate != curr_rate ||
            amdtp_streaming_error(&motu->rx_stream) ||
-           amdtp_streaming_error(&motu->tx_stream)) {
-               amdtp_stream_stop(&motu->rx_stream);
-               amdtp_stream_stop(&motu->tx_stream);
+           amdtp_streaming_error(&motu->tx_stream))
                finish_session(motu);
-       }
 
        if (!amdtp_stream_running(&motu->rx_stream)) {
                err = protocol->set_clock_rate(motu, rate);
@@ -278,13 +278,8 @@ stop_streams:
 
 void snd_motu_stream_stop_duplex(struct snd_motu *motu)
 {
-       if (motu->substreams_counter == 0) {
-               amdtp_stream_stop(&motu->tx_stream);
-               amdtp_stream_stop(&motu->rx_stream);
-
-               fw_iso_resources_free(&motu->tx_resources);
-               fw_iso_resources_free(&motu->rx_resources);
-       }
+       if (motu->substreams_counter == 0)
+               finish_session(motu);
 }
 
 static int init_stream(struct snd_motu *motu, enum amdtp_stream_direction dir)