Skip to content

Commit

Permalink
ALSA: snd-usb-caiaq: drop bogus iso packets
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Daniel Mack authored and Takashi Iwai committed Mar 18, 2009
1 parent 1313e70 commit 9311c9b
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 1 deletion.
6 changes: 6 additions & 0 deletions sound/usb/caiaq/caiaq-audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,9 @@ static void read_in_urb_mode2(struct snd_usb_caiaqdev *dev,

for (stream = 0; stream < dev->n_streams; stream++, i++) {
sub = dev->sub_capture[stream];
if (dev->input_panic)
usb_buf[i] = 0;

if (sub) {
struct snd_pcm_runtime *rt = sub->runtime;
char *audio_buf = rt->dma_area;
Expand All @@ -398,6 +401,9 @@ static void read_in_urb(struct snd_usb_caiaqdev *dev,
if (!dev->streaming)
return;

if (iso->actual_length < dev->bpp)
return;

switch (dev->spec.data_alignment) {
case 0:
read_in_urb_mode0(dev, urb, iso);
Expand Down
2 changes: 2 additions & 0 deletions sound/usb/caiaq/caiaq-device.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,8 @@ int snd_usb_caiaq_set_audio_params (struct snd_usb_caiaqdev *dev,

if (dev->audio_parm_answer != 1)
debug("unable to set the device's audio params\n");
else
dev->bpp = bpp;

return dev->audio_parm_answer == 1 ? 0 : -EINVAL;
}
Expand Down
2 changes: 1 addition & 1 deletion sound/usb/caiaq/caiaq-device.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ struct snd_usb_caiaqdev {
int period_out_count[MAX_STREAMS];
int input_panic, output_panic, warned;
char *audio_in_buf, *audio_out_buf;
unsigned int samplerates;
unsigned int samplerates, bpp;

struct snd_pcm_substream *sub_playback[MAX_STREAMS];
struct snd_pcm_substream *sub_capture[MAX_STREAMS];
Expand Down

0 comments on commit 9311c9b

Please sign in to comment.