Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9311c9b4 authored by Daniel Mack's avatar Daniel Mack Committed by Takashi Iwai
Browse files

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: default avatarDaniel Mack <daniel@caiaq.de>
Tested-by: default avatarMark Hills <mark@pogo.org.uk>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 1313e704
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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;
}
+1 −1
Original line number Diff line number Diff line
@@ -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];