aboutsummaryrefslogtreecommitdiffstats
path: root/sound/firewire
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2014-11-07 11:08:28 -0500
committerTakashi Iwai <tiwai@suse.de>2014-11-09 12:20:40 -0500
commit1fb8510cdb5b7befe8a59f533c7fc12ef0dac73e (patch)
treeb44569425ea7683d02893cfd145081a11d7677f1 /sound/firewire
parent31584ed18c073176a7ad96ddbfd09765e21e813d (diff)
ALSA: pcm: Add snd_pcm_stop_xrun() helper
Add a new helper function snd_pcm_stop_xrun() to the standard sequnce lock/snd_pcm_stop(XRUN)/unlock by a single call, and replace the existing open codes with this helper. The function checks the PCM running state to prevent setting the wrong state, too, for more safety. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire')
-rw-r--r--sound/firewire/amdtp.c8
-rw-r--r--sound/firewire/isight.c10
2 files changed, 4 insertions, 14 deletions
diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c
index 95fc2eaf11dc..3badc70124ab 100644
--- a/sound/firewire/amdtp.c
+++ b/sound/firewire/amdtp.c
@@ -1006,11 +1006,7 @@ void amdtp_stream_pcm_abort(struct amdtp_stream *s)
1006 struct snd_pcm_substream *pcm; 1006 struct snd_pcm_substream *pcm;
1007 1007
1008 pcm = ACCESS_ONCE(s->pcm); 1008 pcm = ACCESS_ONCE(s->pcm);
1009 if (pcm) { 1009 if (pcm)
1010 snd_pcm_stream_lock_irq(pcm); 1010 snd_pcm_stop_xrun(pcm);
1011 if (snd_pcm_running(pcm))
1012 snd_pcm_stop(pcm, SNDRV_PCM_STATE_XRUN);
1013 snd_pcm_stream_unlock_irq(pcm);
1014 }
1015} 1011}
1016EXPORT_SYMBOL(amdtp_stream_pcm_abort); 1012EXPORT_SYMBOL(amdtp_stream_pcm_abort);
diff --git a/sound/firewire/isight.c b/sound/firewire/isight.c
index 7ac94439e758..48d6dca471c6 100644
--- a/sound/firewire/isight.c
+++ b/sound/firewire/isight.c
@@ -131,14 +131,8 @@ static void isight_samples(struct isight *isight,
131 131
132static void isight_pcm_abort(struct isight *isight) 132static void isight_pcm_abort(struct isight *isight)
133{ 133{
134 unsigned long flags; 134 if (ACCESS_ONCE(isight->pcm_active))
135 135 snd_pcm_stop_xrun(isight->pcm);
136 if (ACCESS_ONCE(isight->pcm_active)) {
137 snd_pcm_stream_lock_irqsave(isight->pcm, flags);
138 if (snd_pcm_running(isight->pcm))
139 snd_pcm_stop(isight->pcm, SNDRV_PCM_STATE_XRUN);
140 snd_pcm_stream_unlock_irqrestore(isight->pcm, flags);
141 }
142} 136}
143 137
144static void isight_dropped_samples(struct isight *isight, unsigned int total) 138static void isight_dropped_samples(struct isight *isight, unsigned int total)