diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-12-07 15:14:12 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-12-07 15:14:18 +0300 |
commit | f3d607c6b39bd9cb5000e03e2c0dc2afe1241374 (patch) | |
tree | 885b5e0b5bb3d87efc4bfbde69feff2ece32ecac /sound/usb/caiaq/audio.c | |
parent | 8055039c2a2454c7159dcbde3161943b757a6e0e (diff) | |
parent | 6ec22f9b037fc0c2e00ddb7023fad279c365324d (diff) | |
download | linux-f3d607c6b39bd9cb5000e03e2c0dc2afe1241374.tar.xz |
Merge branch 'linus' into x86/urgent
Merge reason: we want to queue up a dependent fix.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'sound/usb/caiaq/audio.c')
-rw-r--r-- | sound/usb/caiaq/audio.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c index 121af0644fd9..86b2c3b92df5 100644 --- a/sound/usb/caiaq/audio.c +++ b/sound/usb/caiaq/audio.c @@ -62,10 +62,14 @@ static void activate_substream(struct snd_usb_caiaqdev *dev, struct snd_pcm_substream *sub) { + spin_lock(&dev->spinlock); + if (sub->stream == SNDRV_PCM_STREAM_PLAYBACK) dev->sub_playback[sub->number] = sub; else dev->sub_capture[sub->number] = sub; + + spin_unlock(&dev->spinlock); } static void @@ -269,16 +273,22 @@ snd_usb_caiaq_pcm_pointer(struct snd_pcm_substream *sub) { int index = sub->number; struct snd_usb_caiaqdev *dev = snd_pcm_substream_chip(sub); + snd_pcm_uframes_t ptr; + + spin_lock(&dev->spinlock); if (dev->input_panic || dev->output_panic) - return SNDRV_PCM_POS_XRUN; + ptr = SNDRV_PCM_POS_XRUN; if (sub->stream == SNDRV_PCM_STREAM_PLAYBACK) - return bytes_to_frames(sub->runtime, + ptr = bytes_to_frames(sub->runtime, dev->audio_out_buf_pos[index]); else - return bytes_to_frames(sub->runtime, + ptr = bytes_to_frames(sub->runtime, dev->audio_in_buf_pos[index]); + + spin_unlock(&dev->spinlock); + return ptr; } /* operators for both playback and capture */ |