aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usbaudio.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2005-05-17 03:15:27 -0400
committerJaroslav Kysela <perex@suse.cz>2005-05-29 04:11:03 -0400
commit604cf499256af85703bd4858da56e777ec71714d (patch)
treebf7965d3be2186421121aba8cfaad3cc9d335aff /sound/usb/usbaudio.c
parentd3ff42fd2b4fddb5d779e9e03a2ea44147aa8048 (diff)
[ALSA] usb-audio - fix synchronization packet interval with Audigy 2 NX
USB generic driver When a device does not provide the bRefresh field in its audio endpoint descriptors, use the bInterval field instead. Furthermore, increase the number of sync URBs for better queueing. Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Diffstat (limited to 'sound/usb/usbaudio.c')
-rw-r--r--sound/usb/usbaudio.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 076da19a9e28..a82412b8790d 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -98,7 +98,7 @@ MODULE_PARM_DESC(async_unlink, "Use async unlink mode.");
98#define MAX_PACKS 10 98#define MAX_PACKS 10
99#define MAX_PACKS_HS (MAX_PACKS * 8) /* in high speed mode */ 99#define MAX_PACKS_HS (MAX_PACKS * 8) /* in high speed mode */
100#define MAX_URBS 5 /* max. 20ms long packets */ 100#define MAX_URBS 5 /* max. 20ms long packets */
101#define SYNC_URBS 2 /* always two urbs for sync */ 101#define SYNC_URBS 4 /* always four urbs for sync */
102#define MIN_PACKS_URB 1 /* minimum 1 packet per urb */ 102#define MIN_PACKS_URB 1 /* minimum 1 packet per urb */
103 103
104typedef struct snd_usb_substream snd_usb_substream_t; 104typedef struct snd_usb_substream snd_usb_substream_t;
@@ -1240,8 +1240,13 @@ static int set_format(snd_usb_substream_t *subs, struct audioformat *fmt)
1240 get_endpoint(alts, 1)->bRefresh >= 1 && 1240 get_endpoint(alts, 1)->bRefresh >= 1 &&
1241 get_endpoint(alts, 1)->bRefresh <= 9) 1241 get_endpoint(alts, 1)->bRefresh <= 9)
1242 subs->syncinterval = get_endpoint(alts, 1)->bRefresh; 1242 subs->syncinterval = get_endpoint(alts, 1)->bRefresh;
1243 else 1243 else if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
1244 subs->syncinterval = 1; 1244 subs->syncinterval = 1;
1245 else if (get_endpoint(alts, 1)->bInterval >= 1 &&
1246 get_endpoint(alts, 1)->bInterval <= 16)
1247 subs->syncinterval = get_endpoint(alts, 1)->bInterval - 1;
1248 else
1249 subs->syncinterval = 3;
1245 } 1250 }
1246 1251
1247 /* always fill max packet size */ 1252 /* always fill max packet size */