--------------------- PatchSet 3150 Date: 2005/05/02 08:53:46 Author: cladisch Branch: HEAD Tag: (none) Log: Summary: usb-audio - use proper interval between synchronization packets Add sanity checks when reading the bRefresh value, and actually use it for the synchronization packets instead of polling at 1000 Hz. Members: usb/usbaudio.c:1.125->1.126 Index: /sound/usb/usbaudio.c diff -u /sound/usb/usbaudio.c.old /sound/usb/usbaudio.c --- /sound/usb/usbaudio.c.old Mon May 2 00:51:26 2005 +++ /sound/usb/usbaudio.c Mon May 2 00:53:46 2005 @@ -1051,10 +1051,7 @@ u->urb->pipe = subs->syncpipe; u->urb->transfer_flags = URB_ISO_ASAP; u->urb->number_of_packets = u->packets; - if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH) - u->urb->interval = 8; - else - u->urb->interval = 1; + u->urb->interval = 1 << subs->syncinterval; u->urb->context = u; u->urb->complete = snd_usb_complete_callback(snd_complete_sync_urb); } @@ -1272,7 +1269,12 @@ subs->syncpipe = usb_rcvisocpipe(dev, ep); else subs->syncpipe = usb_sndisocpipe(dev, ep); - subs->syncinterval = get_endpoint(alts, 1)->bRefresh; + if (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE && + get_endpoint(alts, 1)->bRefresh >= 1 && + get_endpoint(alts, 1)->bRefresh <= 9) + subs->syncinterval = get_endpoint(alts, 1)->bRefresh; + else + subs->syncinterval = 1; } /* always fill max packet size */