aboutsummaryrefslogtreecommitdiff
path: root/sound/usb/usx2y/usbusx2yaudio.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-10-06 11:35:08 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-06 11:35:08 -0700
commit20ebba65093e7bbae1421f071cffed436048e700 (patch)
treec3dfc619b4db65e732859f5490a51df7d20960eb /sound/usb/usx2y/usbusx2yaudio.c
parent815a965b0e6d925646e1f6012175830ef21e0d21 (diff)
parent5a078351d2d0a7ae834087de3637eb42cfd209e3 (diff)
Merge branch 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
* 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa: [ALSA] version 1.0.13 [ALSA] sound/pci/au88x0/au88x0.c: ioremap balanced with iounmap [ALSA] Handle file operations during snd_card disconnects using static file->f_op [ALSA] emu10k1: Fix outl() in snd_emu10k1_resume_regs() [ALSA] Repair snd-usb-usx2y for usb 2.6.18 [ALSA] Fix bug in snd-usb-usx2y's usX2Y_pcms_lock_check() [ALSA] Dereference after free in snd_hwdep_release() [ALSA] Fix memory leak in sound/isa/es18xx.c [ALSA] hda-intel - New pci id for Nvidia MCP61 [ALSA] Add new subdevice ids for hda-intel [ALSA] WM9712 fixes for ac97_patch.c [ALSA] hda/patch_si3054: new codec vendor IDs
Diffstat (limited to 'sound/usb/usx2y/usbusx2yaudio.c')
-rw-r--r--sound/usb/usx2y/usbusx2yaudio.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/sound/usb/usx2y/usbusx2yaudio.c b/sound/usb/usx2y/usbusx2yaudio.c
index e662281a751..367f8a32a66 100644
--- a/sound/usb/usx2y/usbusx2yaudio.c
+++ b/sound/usb/usx2y/usbusx2yaudio.c
@@ -322,7 +322,7 @@ static void i_usX2Y_urb_complete(struct urb *urb)
usX2Y_error_urb_status(usX2Y, subs, urb);
return;
}
- if (likely((0xFFFF & urb->start_frame) == usX2Y->wait_iso_frame))
+ if (likely(urb->start_frame == usX2Y->wait_iso_frame))
subs->completed_urb = urb;
else {
usX2Y_error_sequence(usX2Y, subs, urb);
@@ -335,13 +335,9 @@ static void i_usX2Y_urb_complete(struct urb *urb)
atomic_read(&capsubs->state) >= state_PREPARED &&
(playbacksubs->completed_urb ||
atomic_read(&playbacksubs->state) < state_PREPARED)) {
- if (!usX2Y_usbframe_complete(capsubs, playbacksubs, urb->start_frame)) {
- if (nr_of_packs() <= urb->start_frame &&
- urb->start_frame <= (2 * nr_of_packs() - 1)) // uhci and ohci
- usX2Y->wait_iso_frame = urb->start_frame - nr_of_packs();
- else
- usX2Y->wait_iso_frame += nr_of_packs();
- } else {
+ if (!usX2Y_usbframe_complete(capsubs, playbacksubs, urb->start_frame))
+ usX2Y->wait_iso_frame += nr_of_packs();
+ else {
snd_printdd("\n");
usX2Y_clients_stop(usX2Y);
}
@@ -495,7 +491,6 @@ static int usX2Y_urbs_start(struct snd_usX2Y_substream *subs)
if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED)
goto start;
}
- usX2Y->wait_iso_frame = -1;
start:
usX2Y_subs_startup(subs);
@@ -516,10 +511,9 @@ static int usX2Y_urbs_start(struct snd_usX2Y_substream *subs)
snd_printk (KERN_ERR "cannot submit datapipe for urb %d, err = %d\n", i, err);
err = -EPIPE;
goto cleanup;
- } else {
- if (0 > usX2Y->wait_iso_frame)
+ } else
+ if (i == 0)
usX2Y->wait_iso_frame = urb->start_frame;
- }
urb->transfer_flags = 0;
} else {
atomic_set(&subs->state, state_STARTING1);