diff options
author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2019-06-11 16:21:14 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2019-06-11 17:02:07 +0300 |
commit | b3480638a52adeeb133759fca0a0f89ce403e8ba (patch) | |
tree | e30543fd4afba38b360d789fb542105dce5815fd /sound/firewire/dice | |
parent | 478f3a56dcbc991b5d1d0e72666b0b32bae5e0a8 (diff) | |
download | linux-b3480638a52adeeb133759fca0a0f89ce403e8ba.tar.xz |
ALSA: dice: code refactoring to stop packet streaming
This commit is a part of preparation to perform allocation/release
of isochronous resources in pcm.hw_params/hw_free callbacks.
There're three points to finish packet streaming but no helper
functions for common operations for it. This commit adds a helper
function for operations to finish packet streaming.
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire/dice')
-rw-r--r-- | sound/firewire/dice/dice-stream.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/sound/firewire/dice/dice-stream.c b/sound/firewire/dice/dice-stream.c index c3c892c5c7ff..8bce923dc4bd 100644 --- a/sound/firewire/dice/dice-stream.c +++ b/sound/firewire/dice/dice-stream.c @@ -230,6 +230,15 @@ static int keep_resources(struct snd_dice *dice, fw_parent_device(dice->unit)->max_speed); } +static void finish_session(struct snd_dice *dice, struct reg_params *tx_params, + struct reg_params *rx_params) +{ + stop_streams(dice, AMDTP_IN_STREAM, tx_params); + stop_streams(dice, AMDTP_OUT_STREAM, rx_params); + + snd_dice_transaction_clear_enable(dice); +} + static int start_streams(struct snd_dice *dice, enum amdtp_stream_direction dir, unsigned int rate, struct reg_params *params) { @@ -328,10 +337,8 @@ static int start_duplex_streams(struct snd_dice *dice, unsigned int rate) if (err < 0) return err; - /* Stop transmission. */ - stop_streams(dice, AMDTP_IN_STREAM, &tx_params); - stop_streams(dice, AMDTP_OUT_STREAM, &rx_params); - snd_dice_transaction_clear_enable(dice); + // Stop transmission. + finish_session(dice, &tx_params, &rx_params); release_resources(dice); err = ensure_phase_lock(dice, rate); @@ -373,9 +380,7 @@ static int start_duplex_streams(struct snd_dice *dice, unsigned int rate) return 0; error: - stop_streams(dice, AMDTP_IN_STREAM, &tx_params); - stop_streams(dice, AMDTP_OUT_STREAM, &rx_params); - snd_dice_transaction_clear_enable(dice); + finish_session(dice, &tx_params, &rx_params); release_resources(dice); return err; } @@ -449,12 +454,8 @@ void snd_dice_stream_stop_duplex(struct snd_dice *dice) if (dice->substreams_counter > 0) return; - snd_dice_transaction_clear_enable(dice); - - if (get_register_params(dice, &tx_params, &rx_params) == 0) { - stop_streams(dice, AMDTP_IN_STREAM, &tx_params); - stop_streams(dice, AMDTP_OUT_STREAM, &rx_params); - } + if (get_register_params(dice, &tx_params, &rx_params) >= 0) + finish_session(dice, &tx_params, &rx_params); release_resources(dice); } |