Commit ece92831 authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Takashi Iwai

ALSA: firewire-tascam: minor code refactoring to finish streaming session

The operation to finish packet streaming corresponds to stopping
isochronous contexts.

This commit applies code refactoring to move codes to stop into
a helper function to finish the session.
Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent a0c049a6
...@@ -181,6 +181,9 @@ static void finish_session(struct snd_tscm *tscm) ...@@ -181,6 +181,9 @@ static void finish_session(struct snd_tscm *tscm)
{ {
__be32 reg; __be32 reg;
amdtp_stream_stop(&tscm->rx_stream);
amdtp_stream_stop(&tscm->tx_stream);
reg = 0; reg = 0;
snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST, snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST,
TSCM_ADDR_BASE + TSCM_OFFSET_START_STREAMING, TSCM_ADDR_BASE + TSCM_OFFSET_START_STREAMING,
...@@ -354,9 +357,6 @@ int snd_tscm_stream_reserve_duplex(struct snd_tscm *tscm, unsigned int rate) ...@@ -354,9 +357,6 @@ int snd_tscm_stream_reserve_duplex(struct snd_tscm *tscm, unsigned int rate)
return err; return err;
if (tscm->substreams_counter == 0 || rate != curr_rate) { if (tscm->substreams_counter == 0 || rate != curr_rate) {
amdtp_stream_stop(&tscm->rx_stream);
amdtp_stream_stop(&tscm->tx_stream);
finish_session(tscm); finish_session(tscm);
fw_iso_resources_free(&tscm->tx_resources); fw_iso_resources_free(&tscm->tx_resources);
...@@ -397,12 +397,8 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate) ...@@ -397,12 +397,8 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate)
return 0; return 0;
if (amdtp_streaming_error(&tscm->rx_stream) || if (amdtp_streaming_error(&tscm->rx_stream) ||
amdtp_streaming_error(&tscm->tx_stream)) { amdtp_streaming_error(&tscm->tx_stream))
amdtp_stream_stop(&tscm->rx_stream);
amdtp_stream_stop(&tscm->tx_stream);
finish_session(tscm); finish_session(tscm);
}
if (generation != fw_parent_device(tscm->unit)->card->generation) { if (generation != fw_parent_device(tscm->unit)->card->generation) {
err = fw_iso_resources_update(&tscm->tx_resources); err = fw_iso_resources_update(&tscm->tx_resources);
...@@ -452,9 +448,6 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate) ...@@ -452,9 +448,6 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate)
return 0; return 0;
error: error:
amdtp_stream_stop(&tscm->rx_stream);
amdtp_stream_stop(&tscm->tx_stream);
finish_session(tscm); finish_session(tscm);
return err; return err;
...@@ -462,12 +455,8 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate) ...@@ -462,12 +455,8 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate)
void snd_tscm_stream_stop_duplex(struct snd_tscm *tscm) void snd_tscm_stream_stop_duplex(struct snd_tscm *tscm)
{ {
if (tscm->substreams_counter == 0) { if (tscm->substreams_counter == 0)
amdtp_stream_stop(&tscm->tx_stream);
amdtp_stream_stop(&tscm->rx_stream);
finish_session(tscm); finish_session(tscm);
}
} }
void snd_tscm_stream_lock_changed(struct snd_tscm *tscm) void snd_tscm_stream_lock_changed(struct snd_tscm *tscm)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment