diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2005-05-17 03:15:27 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2005-05-29 04:11:03 -0400 |
commit | 604cf499256af85703bd4858da56e777ec71714d (patch) | |
tree | bf7965d3be2186421121aba8cfaad3cc9d335aff /sound/usb | |
parent | d3ff42fd2b4fddb5d779e9e03a2ea44147aa8048 (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')
-rw-r--r-- | sound/usb/usbaudio.c | 9 |
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 | ||
104 | typedef struct snd_usb_substream snd_usb_substream_t; | 104 | typedef 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 */ |