All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
To: clemens@ladisch.de, tiwai@suse.de
Cc: alsa-devel@alsa-project.org
Subject: [PATCH 05/15] ALSA: firewire-tascam: update isochronous resources when starting packet streaming after bus reset
Date: Sun,  2 Jun 2019 16:12:49 +0900	[thread overview]
Message-ID: <20190602071259.21622-6-o-takashi@sakamocchi.jp> (raw)
In-Reply-To: <20190602071259.21622-1-o-takashi@sakamocchi.jp>

After bus reset, isochronous resource manager releases all of allocated
isochronous resources. The nodes to restart packet streaming should
request reallocation of the resources.

However, between the bus-reset and invocation of 'struct fw_driver.update'
handler, ALSA PCM application can detect this situation by XRUN because
the target device cancelled to transmit packets once bus-reset occurs.

Due to the above mechanism, ALSA firewire-tascam driver just stops
packet streaming in the update handler, thus pcm.prepare handler
should request the reallocation.

This commit requests the reallocation in pcm.prepare callback when
bus generation is changed.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
---
 sound/firewire/tascam/tascam-stream.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/sound/firewire/tascam/tascam-stream.c b/sound/firewire/tascam/tascam-stream.c
index 18d554d46be5..be9dcc808188 100644
--- a/sound/firewire/tascam/tascam-stream.c
+++ b/sound/firewire/tascam/tascam-stream.c
@@ -321,7 +321,7 @@ int snd_tscm_stream_init_duplex(struct snd_tscm *tscm)
 	return err;
 }
 
-/* At bus reset, streaming is stopped and some registers are clear. */
+// At bus reset, streaming is stopped and some registers are clear.
 void snd_tscm_stream_update_duplex(struct snd_tscm *tscm)
 {
 	amdtp_stream_pcm_abort(&tscm->tx_stream);
@@ -390,6 +390,7 @@ void snd_tscm_stream_release_duplex(struct snd_tscm *tscm)
 
 int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate)
 {
+	unsigned int generation = tscm->rx_resources.generation;
 	int err;
 
 	if (tscm->substreams_counter == 0)
@@ -403,6 +404,16 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate)
 		finish_session(tscm);
 	}
 
+	if (generation != fw_parent_device(tscm->unit)->card->generation) {
+		err = fw_iso_resources_update(&tscm->tx_resources);
+		if (err < 0)
+			goto error;
+
+		err = fw_iso_resources_update(&tscm->rx_resources);
+		if (err < 0)
+			goto error;
+	}
+
 	if (!amdtp_stream_running(&tscm->rx_stream)) {
 		err = set_stream_formats(tscm, rate);
 		if (err < 0)
-- 
2.20.1

  parent reply	other threads:[~2019-06-02  7:13 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-02  7:12 [PATCH 00/15] ALSA: firewire-tascam/fireface: reserve/release isochronous resources in pcm.hw_params/hw_free callbacks Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 01/15] ALSA: firewire-tascam: code refactoring for registration of isochronous channels Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 02/15] ALSA: firewire-tascam: code refactoring for reservation of isochronous resources Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 03/15] ALSA: firewire-tascam: code refactoring for release " Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 04/15] ALSA: firewire-tascam: reserve/release isochronous resources in pcm.hw_params/hw_free callbacks Takashi Sakamoto
2019-06-02  7:12 ` Takashi Sakamoto [this message]
2019-06-02  7:12 ` [PATCH 06/15] ALSA: firewire-tascam: minor code refactoring to finish streaming session Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 07/15] ALSA: firewire-tascam: code refactoring for pcm.hw_params/hw_free callbacks Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 08/15] ALSA: fireface: add protocol-specific operation to allocate isochronous resources Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 09/15] ALSA: fireface: support allocate_resources operation in ff800 protocol Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 10/15] ALSA: fireface: support allocate_resources operation in ff400 protocol Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 11/15] ALSA: fireface: support allocate_resources operation in latter protocol Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 12/15] ALSA: fireface: reserve/release isochronous resources in pcm.hw_params/hw_free callbacks Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 13/15] ALSA: fireface: update isochronous resources when starting packet streaming after bus-reset Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 14/15] ALSA: fireface: minor code refactoring to finish streaming session Takashi Sakamoto
2019-06-02  7:12 ` [PATCH 15/15] ALSA: fireface: code refactoring for pcm.hw_params/hw_free callbacks Takashi Sakamoto
2019-06-11  9:37 ` [PATCH 00/15] ALSA: firewire-tascam/fireface: reserve/release isochronous resources in " Takashi Iwai
2019-06-11  9:59   ` Takashi Sakamoto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190602071259.21622-6-o-takashi@sakamocchi.jp \
    --to=o-takashi@sakamocchi.jp \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.