diff options
author | Daniel Mack <daniel@caiaq.de> | 2009-03-18 06:03:54 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-03-18 06:31:08 -0400 |
commit | 9311c9b4f12218b588e51806c44d290cfec678a3 (patch) | |
tree | 9abf620f6497fcc491b079c0577a9abcfdfea46d /sound/usb/caiaq/caiaq-audio.c | |
parent | 1313e7041480f523a09dedc7ef2185d8ee94c163 (diff) |
ALSA: snd-usb-caiaq: drop bogus iso packets
Drop inbound packets that are smaller than expected. This has been
observed at the very beginning of the streaming transaction.
And when the hardware is in panic mode (which can only very rarely
happen in case of massive EMI chaos), mute the input channels.
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Tested-by: Mark Hills <mark@pogo.org.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/caiaq/caiaq-audio.c')
-rw-r--r-- | sound/usb/caiaq/caiaq-audio.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sound/usb/caiaq/caiaq-audio.c b/sound/usb/caiaq/caiaq-audio.c index 577b1129de0e..08d51e0c9fea 100644 --- a/sound/usb/caiaq/caiaq-audio.c +++ b/sound/usb/caiaq/caiaq-audio.c | |||
@@ -377,6 +377,9 @@ static void read_in_urb_mode2(struct snd_usb_caiaqdev *dev, | |||
377 | 377 | ||
378 | for (stream = 0; stream < dev->n_streams; stream++, i++) { | 378 | for (stream = 0; stream < dev->n_streams; stream++, i++) { |
379 | sub = dev->sub_capture[stream]; | 379 | sub = dev->sub_capture[stream]; |
380 | if (dev->input_panic) | ||
381 | usb_buf[i] = 0; | ||
382 | |||
380 | if (sub) { | 383 | if (sub) { |
381 | struct snd_pcm_runtime *rt = sub->runtime; | 384 | struct snd_pcm_runtime *rt = sub->runtime; |
382 | char *audio_buf = rt->dma_area; | 385 | char *audio_buf = rt->dma_area; |
@@ -398,6 +401,9 @@ static void read_in_urb(struct snd_usb_caiaqdev *dev, | |||
398 | if (!dev->streaming) | 401 | if (!dev->streaming) |
399 | return; | 402 | return; |
400 | 403 | ||
404 | if (iso->actual_length < dev->bpp) | ||
405 | return; | ||
406 | |||
401 | switch (dev->spec.data_alignment) { | 407 | switch (dev->spec.data_alignment) { |
402 | case 0: | 408 | case 0: |
403 | read_in_urb_mode0(dev, urb, iso); | 409 | read_in_urb_mode0(dev, urb, iso); |