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

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

ALSA: snd-usb-usx2y: remove bogus frame checks

The frame check in i_usX2Y_urb_complete() and
i_usX2Y_usbpcm_urb_complete() is bogus and produces false positives as
described in this LAU thread:

  http://linuxaudio.org/mailarchive/lau/2013/5/20/200177



This patch removes the check code entirely.

Cc: fzu@wemgehoertderstaat.de
Reported-by: default avatarDr Nicholas J Bailey <nicholas.bailey@glasgow.ac.uk>
Suggested-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarDaniel Mack <zonque@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 4a437044
Loading
Loading
Loading
Loading
+3 −19
Original line number Diff line number Diff line
@@ -299,19 +299,6 @@ static void usX2Y_error_urb_status(struct usX2Ydev *usX2Y,
	usX2Y_clients_stop(usX2Y);
}

static void usX2Y_error_sequence(struct usX2Ydev *usX2Y,
				 struct snd_usX2Y_substream *subs, struct urb *urb)
{
	snd_printk(KERN_ERR
"Sequence Error!(hcd_frame=%i ep=%i%s;wait=%i,frame=%i).\n"
"Most probably some urb of usb-frame %i is still missing.\n"
"Cause could be too long delays in usb-hcd interrupt handling.\n",
		   usb_get_current_frame_number(usX2Y->dev),
		   subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out",
		   usX2Y->wait_iso_frame, urb->start_frame, usX2Y->wait_iso_frame);
	usX2Y_clients_stop(usX2Y);
}

static void i_usX2Y_urb_complete(struct urb *urb)
{
	struct snd_usX2Y_substream *subs = urb->context;
@@ -328,12 +315,9 @@ static void i_usX2Y_urb_complete(struct urb *urb)
		usX2Y_error_urb_status(usX2Y, subs, urb);
		return;
	}
	if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF)))

	subs->completed_urb = urb;
	else {
		usX2Y_error_sequence(usX2Y, subs, urb);
		return;
	}

	{
		struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE],
			*playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];
+1 −6
Original line number Diff line number Diff line
@@ -244,13 +244,8 @@ static void i_usX2Y_usbpcm_urb_complete(struct urb *urb)
		usX2Y_error_urb_status(usX2Y, subs, urb);
		return;
	}
	if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF)))
		subs->completed_urb = urb;
	else {
		usX2Y_error_sequence(usX2Y, subs, urb);
		return;
	}

	subs->completed_urb = urb;
	capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE];
	capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
	playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];