|
@@ -126,6 +126,7 @@ static void cx231xx_audio_isocirq(struct urb *urb)
|
|
|
stride = runtime->frame_bits >> 3;
|
|
|
|
|
|
for (i = 0; i < urb->number_of_packets; i++) {
|
|
|
+ unsigned long flags;
|
|
|
int length = urb->iso_frame_desc[i].actual_length /
|
|
|
stride;
|
|
|
cp = (unsigned char *)urb->transfer_buffer +
|
|
@@ -148,7 +149,7 @@ static void cx231xx_audio_isocirq(struct urb *urb)
|
|
|
length * stride);
|
|
|
}
|
|
|
|
|
|
- snd_pcm_stream_lock(substream);
|
|
|
+ snd_pcm_stream_lock_irqsave(substream, flags);
|
|
|
|
|
|
dev->adev.hwptr_done_capture += length;
|
|
|
if (dev->adev.hwptr_done_capture >=
|
|
@@ -163,7 +164,7 @@ static void cx231xx_audio_isocirq(struct urb *urb)
|
|
|
runtime->period_size;
|
|
|
period_elapsed = 1;
|
|
|
}
|
|
|
- snd_pcm_stream_unlock(substream);
|
|
|
+ snd_pcm_stream_unlock_irqrestore(substream, flags);
|
|
|
}
|
|
|
if (period_elapsed)
|
|
|
snd_pcm_period_elapsed(substream);
|
|
@@ -216,6 +217,7 @@ static void cx231xx_audio_bulkirq(struct urb *urb)
|
|
|
stride = runtime->frame_bits >> 3;
|
|
|
|
|
|
if (1) {
|
|
|
+ unsigned long flags;
|
|
|
int length = urb->actual_length /
|
|
|
stride;
|
|
|
cp = (unsigned char *)urb->transfer_buffer;
|
|
@@ -234,7 +236,7 @@ static void cx231xx_audio_bulkirq(struct urb *urb)
|
|
|
length * stride);
|
|
|
}
|
|
|
|
|
|
- snd_pcm_stream_lock(substream);
|
|
|
+ snd_pcm_stream_lock_irqsave(substream, flags);
|
|
|
|
|
|
dev->adev.hwptr_done_capture += length;
|
|
|
if (dev->adev.hwptr_done_capture >=
|
|
@@ -249,7 +251,7 @@ static void cx231xx_audio_bulkirq(struct urb *urb)
|
|
|
runtime->period_size;
|
|
|
period_elapsed = 1;
|
|
|
}
|
|
|
- snd_pcm_stream_unlock(substream);
|
|
|
+ snd_pcm_stream_unlock_irqrestore(substream, flags);
|
|
|
}
|
|
|
if (period_elapsed)
|
|
|
snd_pcm_period_elapsed(substream);
|