forked from Minki/linux
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>
This commit is contained in:
parent
478f3a56dc
commit
b3480638a5
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user