aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/usb/usbaudio.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index e759b73942c2..e1a648d7ffff 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -1051,10 +1051,7 @@ static int init_substream_urbs(snd_usb_substream_t *subs, unsigned int period_by
1051 u->urb->pipe = subs->syncpipe; 1051 u->urb->pipe = subs->syncpipe;
1052 u->urb->transfer_flags = URB_ISO_ASAP; 1052 u->urb->transfer_flags = URB_ISO_ASAP;
1053 u->urb->number_of_packets = u->packets; 1053 u->urb->number_of_packets = u->packets;
1054 if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH) 1054 u->urb->interval = 1 << subs->syncinterval;
1055 u->urb->interval = 8;
1056 else
1057 u->urb->interval = 1;
1058 u->urb->context = u; 1055 u->urb->context = u;
1059 u->urb->complete = snd_usb_complete_callback(snd_complete_sync_urb); 1056 u->urb->complete = snd_usb_complete_callback(snd_complete_sync_urb);
1060 } 1057 }
@@ -1272,7 +1269,12 @@ static int set_format(snd_usb_substream_t *subs, struct audioformat *fmt)
1272 subs->syncpipe = usb_rcvisocpipe(dev, ep); 1269 subs->syncpipe = usb_rcvisocpipe(dev, ep);
1273 else 1270 else
1274 subs->syncpipe = usb_sndisocpipe(dev, ep); 1271 subs->syncpipe = usb_sndisocpipe(dev, ep);
1275 subs->syncinterval = get_endpoint(alts, 1)->bRefresh; 1272 if (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
1273 get_endpoint(alts, 1)->bRefresh >= 1 &&
1274 get_endpoint(alts, 1)->bRefresh <= 9)
1275 subs->syncinterval = get_endpoint(alts, 1)->bRefresh;
1276 else
1277 subs->syncinterval = 1;
1276 } 1278 }
1277 1279
1278 /* always fill max packet size */ 1280 /* always fill max packet size */