aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usx2y/usx2yhwdeppcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/usb/usx2y/usx2yhwdeppcm.c')
-rw-r--r--sound/usb/usx2y/usx2yhwdeppcm.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/sound/usb/usx2y/usx2yhwdeppcm.c b/sound/usb/usx2y/usx2yhwdeppcm.c
index 20708d2ffb6a..8f3e35e24e72 100644
--- a/sound/usb/usx2y/usx2yhwdeppcm.c
+++ b/sound/usb/usx2y/usx2yhwdeppcm.c
@@ -243,7 +243,7 @@ static void i_usX2Y_usbpcm_urb_complete(struct urb *urb)
243 usX2Y_error_urb_status(usX2Y, subs, urb); 243 usX2Y_error_urb_status(usX2Y, subs, urb);
244 return; 244 return;
245 } 245 }
246 if (likely((0xFFFF & urb->start_frame) == usX2Y->wait_iso_frame)) 246 if (likely(urb->start_frame == usX2Y->wait_iso_frame))
247 subs->completed_urb = urb; 247 subs->completed_urb = urb;
248 else { 248 else {
249 usX2Y_error_sequence(usX2Y, subs, urb); 249 usX2Y_error_sequence(usX2Y, subs, urb);
@@ -256,13 +256,9 @@ static void i_usX2Y_usbpcm_urb_complete(struct urb *urb)
256 if (capsubs->completed_urb && atomic_read(&capsubs->state) >= state_PREPARED && 256 if (capsubs->completed_urb && atomic_read(&capsubs->state) >= state_PREPARED &&
257 (NULL == capsubs2 || capsubs2->completed_urb) && 257 (NULL == capsubs2 || capsubs2->completed_urb) &&
258 (playbacksubs->completed_urb || atomic_read(&playbacksubs->state) < state_PREPARED)) { 258 (playbacksubs->completed_urb || atomic_read(&playbacksubs->state) < state_PREPARED)) {
259 if (!usX2Y_usbpcm_usbframe_complete(capsubs, capsubs2, playbacksubs, urb->start_frame)) { 259 if (!usX2Y_usbpcm_usbframe_complete(capsubs, capsubs2, playbacksubs, urb->start_frame))
260 if (nr_of_packs() <= urb->start_frame && 260 usX2Y->wait_iso_frame += nr_of_packs();
261 urb->start_frame <= (2 * nr_of_packs() - 1)) // uhci and ohci 261 else {
262 usX2Y->wait_iso_frame = urb->start_frame - nr_of_packs();
263 else
264 usX2Y->wait_iso_frame += nr_of_packs();
265 } else {
266 snd_printdd("\n"); 262 snd_printdd("\n");
267 usX2Y_clients_stop(usX2Y); 263 usX2Y_clients_stop(usX2Y);
268 } 264 }
@@ -433,7 +429,6 @@ static int usX2Y_usbpcm_urbs_start(struct snd_usX2Y_substream *subs)
433 if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED) 429 if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED)
434 goto start; 430 goto start;
435 } 431 }
436 usX2Y->wait_iso_frame = -1;
437 432
438 start: 433 start:
439 usX2Y_usbpcm_subs_startup(subs); 434 usX2Y_usbpcm_subs_startup(subs);
@@ -459,7 +454,7 @@ static int usX2Y_usbpcm_urbs_start(struct snd_usX2Y_substream *subs)
459 goto cleanup; 454 goto cleanup;
460 } else { 455 } else {
461 snd_printdd("%i\n", urb->start_frame); 456 snd_printdd("%i\n", urb->start_frame);
462 if (0 > usX2Y->wait_iso_frame) 457 if (u == 0)
463 usX2Y->wait_iso_frame = urb->start_frame; 458 usX2Y->wait_iso_frame = urb->start_frame;
464 } 459 }
465 urb->transfer_flags = 0; 460 urb->transfer_flags = 0;