[ALSA] usb-audio: optimize handling of capture URBs
[linux-2.6.git] / sound / usb / usbaudio.c
1 /*
2  *   (Tentative) USB Audio Driver for ALSA
3  *
4  *   Main and PCM part
5  *
6  *   Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
7  *
8  *   Many codes borrowed from audio.c by
9  *          Alan Cox (alan@lxorguk.ukuu.org.uk)
10  *          Thomas Sailer (sailer@ife.ee.ethz.ch)
11  *
12  *
13  *   This program is free software; you can redistribute it and/or modify
14  *   it under the terms of the GNU General Public License as published by
15  *   the Free Software Foundation; either version 2 of the License, or
16  *   (at your option) any later version.
17  *
18  *   This program is distributed in the hope that it will be useful,
19  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
20  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  *   GNU General Public License for more details.
22  *
23  *   You should have received a copy of the GNU General Public License
24  *   along with this program; if not, write to the Free Software
25  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
26  *
27  *
28  *  NOTES:
29  *
30  *   - async unlink should be used for avoiding the sleep inside lock.
31  *     2.4.22 usb-uhci seems buggy for async unlinking and results in
32  *     oops.  in such a cse, pass async_unlink=0 option.
33  *   - the linked URBs would be preferred but not used so far because of
34  *     the instability of unlinking.
35  *   - type II is not supported properly.  there is no device which supports
36  *     this type *correctly*.  SB extigy looks as if it supports, but it's
37  *     indeed an AC3 stream packed in SPDIF frames (i.e. no real AC3 stream).
38  */
39
40
41 #include <sound/driver.h>
42 #include <linux/bitops.h>
43 #include <linux/init.h>
44 #include <linux/list.h>
45 #include <linux/slab.h>
46 #include <linux/string.h>
47 #include <linux/usb.h>
48 #include <linux/moduleparam.h>
49 #include <sound/core.h>
50 #include <sound/info.h>
51 #include <sound/pcm.h>
52 #include <sound/pcm_params.h>
53 #include <sound/initval.h>
54
55 #include "usbaudio.h"
56
57
58 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
59 MODULE_DESCRIPTION("USB Audio");
60 MODULE_LICENSE("GPL");
61 MODULE_SUPPORTED_DEVICE("{{Generic,USB Audio}}");
62
63
64 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;      /* Index 0-MAX */
65 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;       /* ID for this card */
66 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;      /* Enable this card */
67 static int vid[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = -1 }; /* Vendor ID for this card */
68 static int pid[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = -1 }; /* Product ID for this card */
69 static int nrpacks = 4;         /* max. number of packets per urb */
70 static int async_unlink = 1;
71
72 module_param_array(index, int, NULL, 0444);
73 MODULE_PARM_DESC(index, "Index value for the USB audio adapter.");
74 module_param_array(id, charp, NULL, 0444);
75 MODULE_PARM_DESC(id, "ID string for the USB audio adapter.");
76 module_param_array(enable, bool, NULL, 0444);
77 MODULE_PARM_DESC(enable, "Enable USB audio adapter.");
78 module_param_array(vid, int, NULL, 0444);
79 MODULE_PARM_DESC(vid, "Vendor ID for the USB audio device.");
80 module_param_array(pid, int, NULL, 0444);
81 MODULE_PARM_DESC(pid, "Product ID for the USB audio device.");
82 module_param(nrpacks, int, 0644);
83 MODULE_PARM_DESC(nrpacks, "Max. number of packets per URB.");
84 module_param(async_unlink, bool, 0444);
85 MODULE_PARM_DESC(async_unlink, "Use async unlink mode.");
86
87
88 /*
89  * debug the h/w constraints
90  */
91 /* #define HW_CONST_DEBUG */
92
93
94 /*
95  *
96  */
97
98 #define MAX_PACKS       10
99 #define MAX_PACKS_HS    (MAX_PACKS * 8) /* in high speed mode */
100 #define MAX_URBS        8
101 #define SYNC_URBS       4       /* always four urbs for sync */
102 #define MIN_PACKS_URB   1       /* minimum 1 packet per urb */
103
104 typedef struct snd_usb_substream snd_usb_substream_t;
105 typedef struct snd_usb_stream snd_usb_stream_t;
106 typedef struct snd_urb_ctx snd_urb_ctx_t;
107
108 struct audioformat {
109         struct list_head list;
110         snd_pcm_format_t format;        /* format type */
111         unsigned int channels;          /* # channels */
112         unsigned int fmt_type;          /* USB audio format type (1-3) */
113         unsigned int frame_size;        /* samples per frame for non-audio */
114         int iface;                      /* interface number */
115         unsigned char altsetting;       /* corresponding alternate setting */
116         unsigned char altset_idx;       /* array index of altenate setting */
117         unsigned char attributes;       /* corresponding attributes of cs endpoint */
118         unsigned char endpoint;         /* endpoint */
119         unsigned char ep_attr;          /* endpoint attributes */
120         unsigned int maxpacksize;       /* max. packet size */
121         unsigned int rates;             /* rate bitmasks */
122         unsigned int rate_min, rate_max;        /* min/max rates */
123         unsigned int nr_rates;          /* number of rate table entries */
124         unsigned int *rate_table;       /* rate table */
125 };
126
127 struct snd_urb_ctx {
128         struct urb *urb;
129         snd_usb_substream_t *subs;
130         int index;      /* index for urb array */
131         int packets;    /* number of packets per urb */
132         int transfer;   /* transferred size */
133         char *buf;      /* buffer for capture */
134 };
135
136 struct snd_urb_ops {
137         int (*prepare)(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime, struct urb *u);
138         int (*retire)(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime, struct urb *u);
139         int (*prepare_sync)(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime, struct urb *u);
140         int (*retire_sync)(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime, struct urb *u);
141 };
142
143 struct snd_usb_substream {
144         snd_usb_stream_t *stream;
145         struct usb_device *dev;
146         snd_pcm_substream_t *pcm_substream;
147         int direction;  /* playback or capture */
148         int interface;  /* current interface */
149         int endpoint;   /* assigned endpoint */
150         struct audioformat *cur_audiofmt;       /* current audioformat pointer (for hw_params callback) */
151         unsigned int cur_rate;          /* current rate (for hw_params callback) */
152         unsigned int period_bytes;      /* current period bytes (for hw_params callback) */
153         unsigned int format;     /* USB data format */
154         unsigned int datapipe;   /* the data i/o pipe */
155         unsigned int syncpipe;   /* 1 - async out or adaptive in */
156         unsigned int datainterval;      /* log_2 of data packet interval */
157         unsigned int syncinterval;  /* P for adaptive mode, 0 otherwise */
158         unsigned int freqn;      /* nominal sampling rate in fs/fps in Q16.16 format */
159         unsigned int freqm;      /* momentary sampling rate in fs/fps in Q16.16 format */
160         unsigned int freqmax;    /* maximum sampling rate, used for buffer management */
161         unsigned int phase;      /* phase accumulator */
162         unsigned int maxpacksize;       /* max packet size in bytes */
163         unsigned int maxframesize;      /* max packet size in frames */
164         unsigned int curpacksize;       /* current packet size in bytes (for capture) */
165         unsigned int curframesize;      /* current packet size in frames (for capture) */
166         unsigned int fill_max: 1;       /* fill max packet size always */
167         unsigned int fmt_type;          /* USB audio format type (1-3) */
168
169         unsigned int running: 1;        /* running status */
170
171         unsigned int hwptr;                     /* free frame position in the buffer (only for playback) */
172         unsigned int hwptr_done;                        /* processed frame position in the buffer */
173         unsigned int transfer_sched;            /* scheduled frames since last period (for playback) */
174         unsigned int transfer_done;             /* processed frames since last period update */
175         unsigned long active_mask;      /* bitmask of active urbs */
176         unsigned long unlink_mask;      /* bitmask of unlinked urbs */
177
178         unsigned int nurbs;                     /* # urbs */
179         snd_urb_ctx_t dataurb[MAX_URBS];        /* data urb table */
180         snd_urb_ctx_t syncurb[SYNC_URBS];       /* sync urb table */
181         char syncbuf[SYNC_URBS * 4];    /* sync buffer; it's so small - let's get static */
182         char *tmpbuf;                   /* temporary buffer for playback */
183
184         u64 formats;                    /* format bitmasks (all or'ed) */
185         unsigned int num_formats;               /* number of supported audio formats (list) */
186         struct list_head fmt_list;      /* format list */
187         spinlock_t lock;
188
189         struct snd_urb_ops ops;         /* callbacks (must be filled at init) */
190 };
191
192
193 struct snd_usb_stream {
194         snd_usb_audio_t *chip;
195         snd_pcm_t *pcm;
196         int pcm_index;
197         unsigned int fmt_type;          /* USB audio format type (1-3) */
198         snd_usb_substream_t substream[2];
199         struct list_head list;
200 };
201
202
203 /*
204  * we keep the snd_usb_audio_t instances by ourselves for merging
205  * the all interfaces on the same card as one sound device.
206  */
207
208 static DECLARE_MUTEX(register_mutex);
209 static snd_usb_audio_t *usb_chip[SNDRV_CARDS];
210
211
212 /*
213  * convert a sampling rate into our full speed format (fs/1000 in Q16.16)
214  * this will overflow at approx 524 kHz
215  */
216 static inline unsigned get_usb_full_speed_rate(unsigned int rate)
217 {
218         return ((rate << 13) + 62) / 125;
219 }
220
221 /*
222  * convert a sampling rate into USB high speed format (fs/8000 in Q16.16)
223  * this will overflow at approx 4 MHz
224  */
225 static inline unsigned get_usb_high_speed_rate(unsigned int rate)
226 {
227         return ((rate << 10) + 62) / 125;
228 }
229
230 /* convert our full speed USB rate into sampling rate in Hz */
231 static inline unsigned get_full_speed_hz(unsigned int usb_rate)
232 {
233         return (usb_rate * 125 + (1 << 12)) >> 13;
234 }
235
236 /* convert our high speed USB rate into sampling rate in Hz */
237 static inline unsigned get_high_speed_hz(unsigned int usb_rate)
238 {
239         return (usb_rate * 125 + (1 << 9)) >> 10;
240 }
241
242
243 /*
244  * prepare urb for full speed capture sync pipe
245  *
246  * fill the length and offset of each urb descriptor.
247  * the fixed 10.14 frequency is passed through the pipe.
248  */
249 static int prepare_capture_sync_urb(snd_usb_substream_t *subs,
250                                     snd_pcm_runtime_t *runtime,
251                                     struct urb *urb)
252 {
253         unsigned char *cp = urb->transfer_buffer;
254         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
255
256         urb->dev = ctx->subs->dev; /* we need to set this at each time */
257         urb->iso_frame_desc[0].length = 3;
258         urb->iso_frame_desc[0].offset = 0;
259         cp[0] = subs->freqn >> 2;
260         cp[1] = subs->freqn >> 10;
261         cp[2] = subs->freqn >> 18;
262         return 0;
263 }
264
265 /*
266  * prepare urb for high speed capture sync pipe
267  *
268  * fill the length and offset of each urb descriptor.
269  * the fixed 12.13 frequency is passed as 16.16 through the pipe.
270  */
271 static int prepare_capture_sync_urb_hs(snd_usb_substream_t *subs,
272                                        snd_pcm_runtime_t *runtime,
273                                        struct urb *urb)
274 {
275         unsigned char *cp = urb->transfer_buffer;
276         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
277
278         urb->dev = ctx->subs->dev; /* we need to set this at each time */
279         urb->iso_frame_desc[0].length = 4;
280         urb->iso_frame_desc[0].offset = 0;
281         cp[0] = subs->freqn;
282         cp[1] = subs->freqn >> 8;
283         cp[2] = subs->freqn >> 16;
284         cp[3] = subs->freqn >> 24;
285         return 0;
286 }
287
288 /*
289  * process after capture sync complete
290  * - nothing to do
291  */
292 static int retire_capture_sync_urb(snd_usb_substream_t *subs,
293                                    snd_pcm_runtime_t *runtime,
294                                    struct urb *urb)
295 {
296         return 0;
297 }
298
299 /*
300  * prepare urb for capture data pipe
301  *
302  * fill the offset and length of each descriptor.
303  *
304  * we use a temporary buffer to write the captured data.
305  * since the length of written data is determined by host, we cannot
306  * write onto the pcm buffer directly...  the data is thus copied
307  * later at complete callback to the global buffer.
308  */
309 static int prepare_capture_urb(snd_usb_substream_t *subs,
310                                snd_pcm_runtime_t *runtime,
311                                struct urb *urb)
312 {
313         int i, offs;
314         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
315
316         offs = 0;
317         urb->dev = ctx->subs->dev; /* we need to set this at each time */
318         for (i = 0; i < ctx->packets; i++) {
319                 urb->iso_frame_desc[i].offset = offs;
320                 urb->iso_frame_desc[i].length = subs->curpacksize;
321                 offs += subs->curpacksize;
322         }
323         urb->transfer_buffer = ctx->buf;
324         urb->transfer_buffer_length = offs;
325         urb->number_of_packets = ctx->packets;
326 #if 0 // for check
327         if (! urb->bandwidth) {
328                 int bustime;
329                 bustime = usb_check_bandwidth(urb->dev, urb);
330                 if (bustime < 0)
331                         return bustime;
332                 printk("urb %d: bandwidth = %d (packets = %d)\n", ctx->index, bustime, urb->number_of_packets);
333                 usb_claim_bandwidth(urb->dev, urb, bustime, 1);
334         }
335 #endif // for check
336         return 0;
337 }
338
339 /*
340  * process after capture complete
341  *
342  * copy the data from each desctiptor to the pcm buffer, and
343  * update the current position.
344  */
345 static int retire_capture_urb(snd_usb_substream_t *subs,
346                               snd_pcm_runtime_t *runtime,
347                               struct urb *urb)
348 {
349         unsigned long flags;
350         unsigned char *cp;
351         int i;
352         unsigned int stride, len, oldptr;
353         int period_elapsed = 0;
354
355         stride = runtime->frame_bits >> 3;
356
357         for (i = 0; i < urb->number_of_packets; i++) {
358                 cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
359                 if (urb->iso_frame_desc[i].status) {
360                         snd_printd(KERN_ERR "frame %d active: %d\n", i, urb->iso_frame_desc[i].status);
361                         // continue;
362                 }
363                 len = urb->iso_frame_desc[i].actual_length / stride;
364                 if (! len)
365                         continue;
366                 /* update the current pointer */
367                 spin_lock_irqsave(&subs->lock, flags);
368                 oldptr = subs->hwptr_done;
369                 subs->hwptr_done += len;
370                 if (subs->hwptr_done >= runtime->buffer_size)
371                         subs->hwptr_done -= runtime->buffer_size;
372                 subs->transfer_done += len;
373                 if (subs->transfer_done >= runtime->period_size) {
374                         subs->transfer_done -= runtime->period_size;
375                         period_elapsed = 1;
376                 }
377                 spin_unlock_irqrestore(&subs->lock, flags);
378                 /* copy a data chunk */
379                 if (oldptr + len > runtime->buffer_size) {
380                         unsigned int cnt = runtime->buffer_size - oldptr;
381                         unsigned int blen = cnt * stride;
382                         memcpy(runtime->dma_area + oldptr * stride, cp, blen);
383                         memcpy(runtime->dma_area, cp + blen, len * stride - blen);
384                 } else {
385                         memcpy(runtime->dma_area + oldptr * stride, cp, len * stride);
386                 }
387         }
388         if (period_elapsed)
389                 snd_pcm_period_elapsed(subs->pcm_substream);
390         return 0;
391 }
392
393
394 /*
395  * prepare urb for full speed playback sync pipe
396  *
397  * set up the offset and length to receive the current frequency.
398  */
399
400 static int prepare_playback_sync_urb(snd_usb_substream_t *subs,
401                                      snd_pcm_runtime_t *runtime,
402                                      struct urb *urb)
403 {
404         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
405
406         urb->dev = ctx->subs->dev; /* we need to set this at each time */
407         urb->iso_frame_desc[0].length = 3;
408         urb->iso_frame_desc[0].offset = 0;
409         return 0;
410 }
411
412 /*
413  * prepare urb for high speed playback sync pipe
414  *
415  * set up the offset and length to receive the current frequency.
416  */
417
418 static int prepare_playback_sync_urb_hs(snd_usb_substream_t *subs,
419                                         snd_pcm_runtime_t *runtime,
420                                         struct urb *urb)
421 {
422         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
423
424         urb->dev = ctx->subs->dev; /* we need to set this at each time */
425         urb->iso_frame_desc[0].length = 4;
426         urb->iso_frame_desc[0].offset = 0;
427         return 0;
428 }
429
430 /*
431  * process after full speed playback sync complete
432  *
433  * retrieve the current 10.14 frequency from pipe, and set it.
434  * the value is referred in prepare_playback_urb().
435  */
436 static int retire_playback_sync_urb(snd_usb_substream_t *subs,
437                                     snd_pcm_runtime_t *runtime,
438                                     struct urb *urb)
439 {
440         unsigned int f;
441         unsigned long flags;
442
443         if (urb->iso_frame_desc[0].status == 0 &&
444             urb->iso_frame_desc[0].actual_length == 3) {
445                 f = combine_triple((u8*)urb->transfer_buffer) << 2;
446                 if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
447                         spin_lock_irqsave(&subs->lock, flags);
448                         subs->freqm = f;
449                         spin_unlock_irqrestore(&subs->lock, flags);
450                 }
451         }
452
453         return 0;
454 }
455
456 /*
457  * process after high speed playback sync complete
458  *
459  * retrieve the current 12.13 frequency from pipe, and set it.
460  * the value is referred in prepare_playback_urb().
461  */
462 static int retire_playback_sync_urb_hs(snd_usb_substream_t *subs,
463                                        snd_pcm_runtime_t *runtime,
464                                        struct urb *urb)
465 {
466         unsigned int f;
467         unsigned long flags;
468
469         if (urb->iso_frame_desc[0].status == 0 &&
470             urb->iso_frame_desc[0].actual_length == 4) {
471                 f = combine_quad((u8*)urb->transfer_buffer) & 0x0fffffff;
472                 if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
473                         spin_lock_irqsave(&subs->lock, flags);
474                         subs->freqm = f;
475                         spin_unlock_irqrestore(&subs->lock, flags);
476                 }
477         }
478
479         return 0;
480 }
481
482 /*
483  * prepare urb for playback data pipe
484  *
485  * we copy the data directly from the pcm buffer.
486  * the current position to be copied is held in hwptr field.
487  * since a urb can handle only a single linear buffer, if the total
488  * transferred area overflows the buffer boundary, we cannot send
489  * it directly from the buffer.  thus the data is once copied to
490  * a temporary buffer and urb points to that.
491  */
492 static int prepare_playback_urb(snd_usb_substream_t *subs,
493                                 snd_pcm_runtime_t *runtime,
494                                 struct urb *urb)
495 {
496         int i, stride, offs;
497         unsigned int counts;
498         unsigned long flags;
499         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
500
501         stride = runtime->frame_bits >> 3;
502
503         offs = 0;
504         urb->dev = ctx->subs->dev; /* we need to set this at each time */
505         urb->number_of_packets = 0;
506         spin_lock_irqsave(&subs->lock, flags);
507         for (i = 0; i < ctx->packets; i++) {
508                 /* calculate the size of a packet */
509                 if (subs->fill_max)
510                         counts = subs->maxframesize; /* fixed */
511                 else {
512                         subs->phase = (subs->phase & 0xffff)
513                                 + (subs->freqm << subs->datainterval);
514                         counts = subs->phase >> 16;
515                         if (counts > subs->maxframesize)
516                                 counts = subs->maxframesize;
517                 }
518                 /* set up descriptor */
519                 urb->iso_frame_desc[i].offset = offs * stride;
520                 urb->iso_frame_desc[i].length = counts * stride;
521                 offs += counts;
522                 urb->number_of_packets++;
523                 subs->transfer_sched += counts;
524                 if (subs->transfer_sched >= runtime->period_size) {
525                         subs->transfer_sched -= runtime->period_size;
526                         if (subs->fmt_type == USB_FORMAT_TYPE_II) {
527                                 if (subs->transfer_sched > 0) {
528                                         /* FIXME: fill-max mode is not supported yet */
529                                         offs -= subs->transfer_sched;
530                                         counts -= subs->transfer_sched;
531                                         urb->iso_frame_desc[i].length = counts * stride;
532                                         subs->transfer_sched = 0;
533                                 }
534                                 i++;
535                                 if (i < ctx->packets) {
536                                         /* add a transfer delimiter */
537                                         urb->iso_frame_desc[i].offset = offs * stride;
538                                         urb->iso_frame_desc[i].length = 0;
539                                         urb->number_of_packets++;
540                                 }
541                         }
542                         break;
543                 }
544         }
545         if (subs->hwptr + offs > runtime->buffer_size) {
546                 /* err, the transferred area goes over buffer boundary.
547                  * copy the data to the temp buffer.
548                  */
549                 int len;
550                 len = runtime->buffer_size - subs->hwptr;
551                 urb->transfer_buffer = subs->tmpbuf;
552                 memcpy(subs->tmpbuf, runtime->dma_area + subs->hwptr * stride, len * stride);
553                 memcpy(subs->tmpbuf + len * stride, runtime->dma_area, (offs - len) * stride);
554                 subs->hwptr += offs;
555                 subs->hwptr -= runtime->buffer_size;
556         } else {
557                 /* set the buffer pointer */
558                 urb->transfer_buffer = runtime->dma_area + subs->hwptr * stride;
559                 subs->hwptr += offs;
560                 if (subs->hwptr == runtime->buffer_size)
561                         subs->hwptr = 0;
562         }
563         spin_unlock_irqrestore(&subs->lock, flags);
564         urb->transfer_buffer_length = offs * stride;
565         ctx->transfer = offs;
566
567         return 0;
568 }
569
570 /*
571  * process after playback data complete
572  *
573  * update the current position and call callback if a period is processed.
574  */
575 static int retire_playback_urb(snd_usb_substream_t *subs,
576                                snd_pcm_runtime_t *runtime,
577                                struct urb *urb)
578 {
579         unsigned long flags;
580         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
581
582         spin_lock_irqsave(&subs->lock, flags);
583         subs->transfer_done += ctx->transfer;
584         subs->hwptr_done += ctx->transfer;
585         ctx->transfer = 0;
586         if (subs->hwptr_done >= runtime->buffer_size)
587                 subs->hwptr_done -= runtime->buffer_size;
588         if (subs->transfer_done >= runtime->period_size) {
589                 subs->transfer_done -= runtime->period_size;
590                 spin_unlock_irqrestore(&subs->lock, flags);
591                 snd_pcm_period_elapsed(subs->pcm_substream);
592         } else
593                 spin_unlock_irqrestore(&subs->lock, flags);
594         return 0;
595 }
596
597
598 /*
599  */
600 static struct snd_urb_ops audio_urb_ops[2] = {
601         {
602                 .prepare =      prepare_playback_urb,
603                 .retire =       retire_playback_urb,
604                 .prepare_sync = prepare_playback_sync_urb,
605                 .retire_sync =  retire_playback_sync_urb,
606         },
607         {
608                 .prepare =      prepare_capture_urb,
609                 .retire =       retire_capture_urb,
610                 .prepare_sync = prepare_capture_sync_urb,
611                 .retire_sync =  retire_capture_sync_urb,
612         },
613 };
614
615 static struct snd_urb_ops audio_urb_ops_high_speed[2] = {
616         {
617                 .prepare =      prepare_playback_urb,
618                 .retire =       retire_playback_urb,
619                 .prepare_sync = prepare_playback_sync_urb_hs,
620                 .retire_sync =  retire_playback_sync_urb_hs,
621         },
622         {
623                 .prepare =      prepare_capture_urb,
624                 .retire =       retire_capture_urb,
625                 .prepare_sync = prepare_capture_sync_urb_hs,
626                 .retire_sync =  retire_capture_sync_urb,
627         },
628 };
629
630 /*
631  * complete callback from data urb
632  */
633 static void snd_complete_urb(struct urb *urb, struct pt_regs *regs)
634 {
635         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
636         snd_usb_substream_t *subs = ctx->subs;
637         snd_pcm_substream_t *substream = ctx->subs->pcm_substream;
638         int err = 0;
639
640         if ((subs->running && subs->ops.retire(subs, substream->runtime, urb)) ||
641             ! subs->running || /* can be stopped during retire callback */
642             (err = subs->ops.prepare(subs, substream->runtime, urb)) < 0 ||
643             (err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
644                 clear_bit(ctx->index, &subs->active_mask);
645                 if (err < 0) {
646                         snd_printd(KERN_ERR "cannot submit urb (err = %d)\n", err);
647                         snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
648                 }
649         }
650 }
651
652
653 /*
654  * complete callback from sync urb
655  */
656 static void snd_complete_sync_urb(struct urb *urb, struct pt_regs *regs)
657 {
658         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
659         snd_usb_substream_t *subs = ctx->subs;
660         snd_pcm_substream_t *substream = ctx->subs->pcm_substream;
661         int err = 0;
662
663         if ((subs->running && subs->ops.retire_sync(subs, substream->runtime, urb)) ||
664             ! subs->running || /* can be stopped during retire callback */
665             (err = subs->ops.prepare_sync(subs, substream->runtime, urb)) < 0 ||
666             (err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
667                 clear_bit(ctx->index + 16, &subs->active_mask);
668                 if (err < 0) {
669                         snd_printd(KERN_ERR "cannot submit sync urb (err = %d)\n", err);
670                         snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
671                 }
672         }
673 }
674
675
676 /*
677  * unlink active urbs.
678  */
679 static int deactivate_urbs(snd_usb_substream_t *subs, int force, int can_sleep)
680 {
681         unsigned int i;
682         int async;
683
684         subs->running = 0;
685
686         if (!force && subs->stream->chip->shutdown) /* to be sure... */
687                 return -EBADFD;
688
689         async = !can_sleep && async_unlink;
690
691         if (! async && in_interrupt())
692                 return 0;
693
694         for (i = 0; i < subs->nurbs; i++) {
695                 if (test_bit(i, &subs->active_mask)) {
696                         if (! test_and_set_bit(i, &subs->unlink_mask)) {
697                                 struct urb *u = subs->dataurb[i].urb;
698                                 if (async) {
699                                         u->transfer_flags |= URB_ASYNC_UNLINK;
700                                         usb_unlink_urb(u);
701                                 } else
702                                         usb_kill_urb(u);
703                         }
704                 }
705         }
706         if (subs->syncpipe) {
707                 for (i = 0; i < SYNC_URBS; i++) {
708                         if (test_bit(i+16, &subs->active_mask)) {
709                                 if (! test_and_set_bit(i+16, &subs->unlink_mask)) {
710                                         struct urb *u = subs->syncurb[i].urb;
711                                         if (async) {
712                                                 u->transfer_flags |= URB_ASYNC_UNLINK;
713                                                 usb_unlink_urb(u);
714                                         } else
715                                                 usb_kill_urb(u);
716                                 }
717                         }
718                 }
719         }
720         return 0;
721 }
722
723
724 /*
725  * set up and start data/sync urbs
726  */
727 static int start_urbs(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime)
728 {
729         unsigned int i;
730         int err;
731
732         if (subs->stream->chip->shutdown)
733                 return -EBADFD;
734
735         for (i = 0; i < subs->nurbs; i++) {
736                 snd_assert(subs->dataurb[i].urb, return -EINVAL);
737                 if (subs->ops.prepare(subs, runtime, subs->dataurb[i].urb) < 0) {
738                         snd_printk(KERN_ERR "cannot prepare datapipe for urb %d\n", i);
739                         goto __error;
740                 }
741         }
742         if (subs->syncpipe) {
743                 for (i = 0; i < SYNC_URBS; i++) {
744                         snd_assert(subs->syncurb[i].urb, return -EINVAL);
745                         if (subs->ops.prepare_sync(subs, runtime, subs->syncurb[i].urb) < 0) {
746                                 snd_printk(KERN_ERR "cannot prepare syncpipe for urb %d\n", i);
747                                 goto __error;
748                         }
749                 }
750         }
751
752         subs->active_mask = 0;
753         subs->unlink_mask = 0;
754         subs->running = 1;
755         for (i = 0; i < subs->nurbs; i++) {
756                 if ((err = usb_submit_urb(subs->dataurb[i].urb, GFP_ATOMIC)) < 0) {
757                         snd_printk(KERN_ERR "cannot submit datapipe for urb %d, err = %d\n", i, err);
758                         goto __error;
759                 }
760                 set_bit(i, &subs->active_mask);
761         }
762         if (subs->syncpipe) {
763                 for (i = 0; i < SYNC_URBS; i++) {
764                         if ((err = usb_submit_urb(subs->syncurb[i].urb, GFP_ATOMIC)) < 0) {
765                                 snd_printk(KERN_ERR "cannot submit syncpipe for urb %d, err = %d\n", i, err);
766                                 goto __error;
767                         }
768                         set_bit(i + 16, &subs->active_mask);
769                 }
770         }
771         return 0;
772
773  __error:
774         // snd_pcm_stop(subs->pcm_substream, SNDRV_PCM_STATE_XRUN);
775         deactivate_urbs(subs, 0, 0);
776         return -EPIPE;
777 }
778
779
780 /*
781  *  wait until all urbs are processed.
782  */
783 static int wait_clear_urbs(snd_usb_substream_t *subs)
784 {
785         unsigned long end_time = jiffies + msecs_to_jiffies(1000);
786         unsigned int i;
787         int alive;
788
789         do {
790                 alive = 0;
791                 for (i = 0; i < subs->nurbs; i++) {
792                         if (test_bit(i, &subs->active_mask))
793                                 alive++;
794                 }
795                 if (subs->syncpipe) {
796                         for (i = 0; i < SYNC_URBS; i++) {
797                                 if (test_bit(i + 16, &subs->active_mask))
798                                         alive++;
799                         }
800                 }
801                 if (! alive)
802                         break;
803                 set_current_state(TASK_UNINTERRUPTIBLE);
804                 schedule_timeout(1);
805         } while (time_before(jiffies, end_time));
806         if (alive)
807                 snd_printk(KERN_ERR "timeout: still %d active urbs..\n", alive);
808         return 0;
809 }
810
811
812 /*
813  * return the current pcm pointer.  just return the hwptr_done value.
814  */
815 static snd_pcm_uframes_t snd_usb_pcm_pointer(snd_pcm_substream_t *substream)
816 {
817         snd_usb_substream_t *subs = (snd_usb_substream_t *)substream->runtime->private_data;
818         return subs->hwptr_done;
819 }
820
821
822 /*
823  * start/stop substream
824  */
825 static int snd_usb_pcm_trigger(snd_pcm_substream_t *substream, int cmd)
826 {
827         snd_usb_substream_t *subs = (snd_usb_substream_t *)substream->runtime->private_data;
828         int err;
829
830         switch (cmd) {
831         case SNDRV_PCM_TRIGGER_START:
832                 err = start_urbs(subs, substream->runtime);
833                 break;
834         case SNDRV_PCM_TRIGGER_STOP:
835                 err = deactivate_urbs(subs, 0, 0);
836                 break;
837         default:
838                 err = -EINVAL;
839                 break;
840         }
841         return err < 0 ? err : 0;
842 }
843
844
845 /*
846  * release a urb data
847  */
848 static void release_urb_ctx(snd_urb_ctx_t *u)
849 {
850         if (u->urb) {
851                 usb_free_urb(u->urb);
852                 u->urb = NULL;
853         }
854         kfree(u->buf);
855         u->buf = NULL;
856 }
857
858 /*
859  * release a substream
860  */
861 static void release_substream_urbs(snd_usb_substream_t *subs, int force)
862 {
863         int i;
864
865         /* stop urbs (to be sure) */
866         deactivate_urbs(subs, force, 1);
867         wait_clear_urbs(subs);
868
869         for (i = 0; i < MAX_URBS; i++)
870                 release_urb_ctx(&subs->dataurb[i]);
871         for (i = 0; i < SYNC_URBS; i++)
872                 release_urb_ctx(&subs->syncurb[i]);
873         kfree(subs->tmpbuf);
874         subs->tmpbuf = NULL;
875         subs->nurbs = 0;
876 }
877
878 /*
879  * initialize a substream for plaback/capture
880  */
881 static int init_substream_urbs(snd_usb_substream_t *subs, unsigned int period_bytes,
882                                unsigned int rate, unsigned int frame_bits)
883 {
884         unsigned int maxsize, n, i;
885         int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
886         unsigned int npacks[MAX_URBS], urb_packs, total_packs, packs_per_ms;
887
888         /* calculate the frequency in 16.16 format */
889         if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
890                 subs->freqn = get_usb_full_speed_rate(rate);
891         else
892                 subs->freqn = get_usb_high_speed_rate(rate);
893         subs->freqm = subs->freqn;
894         /* calculate max. frequency */
895         if (subs->maxpacksize) {
896                 /* whatever fits into a max. size packet */
897                 maxsize = subs->maxpacksize;
898                 subs->freqmax = (maxsize / (frame_bits >> 3))
899                                 << (16 - subs->datainterval);
900         } else {
901                 /* no max. packet size: just take 25% higher than nominal */
902                 subs->freqmax = subs->freqn + (subs->freqn >> 2);
903                 maxsize = ((subs->freqmax + 0xffff) * (frame_bits >> 3))
904                                 >> (16 - subs->datainterval);
905         }
906         subs->phase = 0;
907
908         if (subs->fill_max)
909                 subs->curpacksize = subs->maxpacksize;
910         else
911                 subs->curpacksize = maxsize;
912
913         if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH)
914                 packs_per_ms = 8 >> subs->datainterval;
915         else
916                 packs_per_ms = 1;
917
918         if (is_playback) {
919                 urb_packs = nrpacks;
920                 urb_packs = max(urb_packs, (unsigned int)MIN_PACKS_URB);
921                 urb_packs = min(urb_packs, (unsigned int)MAX_PACKS);
922         } else
923                 urb_packs = 1;
924         urb_packs *= packs_per_ms;
925
926         /* allocate a temporary buffer for playback */
927         if (is_playback) {
928                 subs->tmpbuf = kmalloc(maxsize * urb_packs, GFP_KERNEL);
929                 if (! subs->tmpbuf) {
930                         snd_printk(KERN_ERR "cannot malloc tmpbuf\n");
931                         return -ENOMEM;
932                 }
933         }
934
935         /* decide how many packets to be used */
936         if (is_playback) {
937                 unsigned int minsize;
938                 /* determine how small a packet can be */
939                 minsize = (subs->freqn >> (16 - subs->datainterval))
940                           * (frame_bits >> 3);
941                 /* with sync from device, assume it can be 25% lower */
942                 if (subs->syncpipe)
943                         minsize -= minsize >> 2;
944                 minsize = max(minsize, 1u);
945                 total_packs = (period_bytes + minsize - 1) / minsize;
946                 /* round up to multiple of packs_per_ms */
947                 total_packs = (total_packs + packs_per_ms - 1)
948                                 & ~(packs_per_ms - 1);
949                 /* we need at least two URBs for queueing */
950                 if (total_packs < 2 * MIN_PACKS_URB * packs_per_ms)
951                         total_packs = 2 * MIN_PACKS_URB * packs_per_ms;
952         } else {
953                 total_packs = MAX_URBS * urb_packs;
954         }
955         subs->nurbs = (total_packs + urb_packs - 1) / urb_packs;
956         if (subs->nurbs > MAX_URBS) {
957                 /* too much... */
958                 subs->nurbs = MAX_URBS;
959                 total_packs = MAX_URBS * urb_packs;
960         }
961         n = total_packs;
962         for (i = 0; i < subs->nurbs; i++) {
963                 npacks[i] = n > urb_packs ? urb_packs : n;
964                 n -= urb_packs;
965         }
966         if (subs->nurbs <= 1) {
967                 /* too little - we need at least two packets
968                  * to ensure contiguous playback/capture
969                  */
970                 subs->nurbs = 2;
971                 npacks[0] = (total_packs + 1) / 2;
972                 npacks[1] = total_packs - npacks[0];
973         } else if (npacks[subs->nurbs-1] < MIN_PACKS_URB * packs_per_ms) {
974                 /* the last packet is too small.. */
975                 if (subs->nurbs > 2) {
976                         /* merge to the first one */
977                         npacks[0] += npacks[subs->nurbs - 1];
978                         subs->nurbs--;
979                 } else {
980                         /* divide to two */
981                         subs->nurbs = 2;
982                         npacks[0] = (total_packs + 1) / 2;
983                         npacks[1] = total_packs - npacks[0];
984                 }
985         }
986
987         /* allocate and initialize data urbs */
988         for (i = 0; i < subs->nurbs; i++) {
989                 snd_urb_ctx_t *u = &subs->dataurb[i];
990                 u->index = i;
991                 u->subs = subs;
992                 u->transfer = 0;
993                 u->packets = npacks[i];
994                 if (subs->fmt_type == USB_FORMAT_TYPE_II)
995                         u->packets++; /* for transfer delimiter */
996                 if (! is_playback) {
997                         /* allocate a capture buffer per urb */
998                         u->buf = kmalloc(maxsize * u->packets, GFP_KERNEL);
999                         if (! u->buf) {
1000                                 release_substream_urbs(subs, 0);
1001                                 return -ENOMEM;
1002                         }
1003                 }
1004                 u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
1005                 if (! u->urb) {
1006                         release_substream_urbs(subs, 0);
1007                         return -ENOMEM;
1008                 }
1009                 u->urb->dev = subs->dev;
1010                 u->urb->pipe = subs->datapipe;
1011                 u->urb->transfer_flags = URB_ISO_ASAP;
1012                 u->urb->number_of_packets = u->packets;
1013                 u->urb->interval = 1 << subs->datainterval;
1014                 u->urb->context = u;
1015                 u->urb->complete = snd_usb_complete_callback(snd_complete_urb);
1016         }
1017
1018         if (subs->syncpipe) {
1019                 /* allocate and initialize sync urbs */
1020                 for (i = 0; i < SYNC_URBS; i++) {
1021                         snd_urb_ctx_t *u = &subs->syncurb[i];
1022                         u->index = i;
1023                         u->subs = subs;
1024                         u->packets = 1;
1025                         u->urb = usb_alloc_urb(1, GFP_KERNEL);
1026                         if (! u->urb) {
1027                                 release_substream_urbs(subs, 0);
1028                                 return -ENOMEM;
1029                         }
1030                         u->urb->transfer_buffer = subs->syncbuf + i * 4;
1031                         u->urb->transfer_buffer_length = 4;
1032                         u->urb->dev = subs->dev;
1033                         u->urb->pipe = subs->syncpipe;
1034                         u->urb->transfer_flags = URB_ISO_ASAP;
1035                         u->urb->number_of_packets = 1;
1036                         u->urb->interval = 1 << subs->syncinterval;
1037                         u->urb->context = u;
1038                         u->urb->complete = snd_usb_complete_callback(snd_complete_sync_urb);
1039                 }
1040         }
1041         return 0;
1042 }
1043
1044
1045 /*
1046  * find a matching audio format
1047  */
1048 static struct audioformat *find_format(snd_usb_substream_t *subs, unsigned int format,
1049                                        unsigned int rate, unsigned int channels)
1050 {
1051         struct list_head *p;
1052         struct audioformat *found = NULL;
1053         int cur_attr = 0, attr;
1054
1055         list_for_each(p, &subs->fmt_list) {
1056                 struct audioformat *fp;
1057                 fp = list_entry(p, struct audioformat, list);
1058                 if (fp->format != format || fp->channels != channels)
1059                         continue;
1060                 if (rate < fp->rate_min || rate > fp->rate_max)
1061                         continue;
1062                 if (! (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)) {
1063                         unsigned int i;
1064                         for (i = 0; i < fp->nr_rates; i++)
1065                                 if (fp->rate_table[i] == rate)
1066                                         break;
1067                         if (i >= fp->nr_rates)
1068                                 continue;
1069                 }
1070                 attr = fp->ep_attr & EP_ATTR_MASK;
1071                 if (! found) {
1072                         found = fp;
1073                         cur_attr = attr;
1074                         continue;
1075                 }
1076                 /* avoid async out and adaptive in if the other method
1077                  * supports the same format.
1078                  * this is a workaround for the case like
1079                  * M-audio audiophile USB.
1080                  */
1081                 if (attr != cur_attr) {
1082                         if ((attr == EP_ATTR_ASYNC &&
1083                              subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
1084                             (attr == EP_ATTR_ADAPTIVE &&
1085                              subs->direction == SNDRV_PCM_STREAM_CAPTURE))
1086                                 continue;
1087                         if ((cur_attr == EP_ATTR_ASYNC &&
1088                              subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
1089                             (cur_attr == EP_ATTR_ADAPTIVE &&
1090                              subs->direction == SNDRV_PCM_STREAM_CAPTURE)) {
1091                                 found = fp;
1092                                 cur_attr = attr;
1093                                 continue;
1094                         }
1095                 }
1096                 /* find the format with the largest max. packet size */
1097                 if (fp->maxpacksize > found->maxpacksize) {
1098                         found = fp;
1099                         cur_attr = attr;
1100                 }
1101         }
1102         return found;
1103 }
1104
1105
1106 /*
1107  * initialize the picth control and sample rate
1108  */
1109 static int init_usb_pitch(struct usb_device *dev, int iface,
1110                           struct usb_host_interface *alts,
1111                           struct audioformat *fmt)
1112 {
1113         unsigned int ep;
1114         unsigned char data[1];
1115         int err;
1116
1117         ep = get_endpoint(alts, 0)->bEndpointAddress;
1118         /* if endpoint has pitch control, enable it */
1119         if (fmt->attributes & EP_CS_ATTR_PITCH_CONTROL) {
1120                 data[0] = 1;
1121                 if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR,
1122                                            USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT,
1123                                            PITCH_CONTROL << 8, ep, data, 1, 1000)) < 0) {
1124                         snd_printk(KERN_ERR "%d:%d:%d: cannot set enable PITCH\n",
1125                                    dev->devnum, iface, ep);
1126                         return err;
1127                 }
1128         }
1129         return 0;
1130 }
1131
1132 static int init_usb_sample_rate(struct usb_device *dev, int iface,
1133                                 struct usb_host_interface *alts,
1134                                 struct audioformat *fmt, int rate)
1135 {
1136         unsigned int ep;
1137         unsigned char data[3];
1138         int err;
1139
1140         ep = get_endpoint(alts, 0)->bEndpointAddress;
1141         /* if endpoint has sampling rate control, set it */
1142         if (fmt->attributes & EP_CS_ATTR_SAMPLE_RATE) {
1143                 int crate;
1144                 data[0] = rate;
1145                 data[1] = rate >> 8;
1146                 data[2] = rate >> 16;
1147                 if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR,
1148                                            USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT,
1149                                            SAMPLING_FREQ_CONTROL << 8, ep, data, 3, 1000)) < 0) {
1150                         snd_printk(KERN_ERR "%d:%d:%d: cannot set freq %d to ep 0x%x\n",
1151                                    dev->devnum, iface, fmt->altsetting, rate, ep);
1152                         return err;
1153                 }
1154                 if ((err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR,
1155                                            USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_IN,
1156                                            SAMPLING_FREQ_CONTROL << 8, ep, data, 3, 1000)) < 0) {
1157                         snd_printk(KERN_WARNING "%d:%d:%d: cannot get freq at ep 0x%x\n",
1158                                    dev->devnum, iface, fmt->altsetting, ep);
1159                         return 0; /* some devices don't support reading */
1160                 }
1161                 crate = data[0] | (data[1] << 8) | (data[2] << 16);
1162                 if (crate != rate) {
1163                         snd_printd(KERN_WARNING "current rate %d is different from the runtime rate %d\n", crate, rate);
1164                         // runtime->rate = crate;
1165                 }
1166         }
1167         return 0;
1168 }
1169
1170 /*
1171  * find a matching format and set up the interface
1172  */
1173 static int set_format(snd_usb_substream_t *subs, struct audioformat *fmt)
1174 {
1175         struct usb_device *dev = subs->dev;
1176         struct usb_host_interface *alts;
1177         struct usb_interface_descriptor *altsd;
1178         struct usb_interface *iface;
1179         unsigned int ep, attr;
1180         int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
1181         int err;
1182
1183         iface = usb_ifnum_to_if(dev, fmt->iface);
1184         snd_assert(iface, return -EINVAL);
1185         alts = &iface->altsetting[fmt->altset_idx];
1186         altsd = get_iface_desc(alts);
1187         snd_assert(altsd->bAlternateSetting == fmt->altsetting, return -EINVAL);
1188
1189         if (fmt == subs->cur_audiofmt)
1190                 return 0;
1191
1192         /* close the old interface */
1193         if (subs->interface >= 0 && subs->interface != fmt->iface) {
1194                 usb_set_interface(subs->dev, subs->interface, 0);
1195                 subs->interface = -1;
1196                 subs->format = 0;
1197         }
1198
1199         /* set interface */
1200         if (subs->interface != fmt->iface || subs->format != fmt->altset_idx) {
1201                 if (usb_set_interface(dev, fmt->iface, fmt->altsetting) < 0) {
1202                         snd_printk(KERN_ERR "%d:%d:%d: usb_set_interface failed\n",
1203                                    dev->devnum, fmt->iface, fmt->altsetting);
1204                         return -EIO;
1205                 }
1206                 snd_printdd(KERN_INFO "setting usb interface %d:%d\n", fmt->iface, fmt->altsetting);
1207                 subs->interface = fmt->iface;
1208                 subs->format = fmt->altset_idx;
1209         }
1210
1211         /* create a data pipe */
1212         ep = fmt->endpoint & USB_ENDPOINT_NUMBER_MASK;
1213         if (is_playback)
1214                 subs->datapipe = usb_sndisocpipe(dev, ep);
1215         else
1216                 subs->datapipe = usb_rcvisocpipe(dev, ep);
1217         if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH &&
1218             get_endpoint(alts, 0)->bInterval >= 1 &&
1219             get_endpoint(alts, 0)->bInterval <= 4)
1220                 subs->datainterval = get_endpoint(alts, 0)->bInterval - 1;
1221         else
1222                 subs->datainterval = 0;
1223         subs->syncpipe = subs->syncinterval = 0;
1224         subs->maxpacksize = fmt->maxpacksize;
1225         subs->fill_max = 0;
1226
1227         /* we need a sync pipe in async OUT or adaptive IN mode */
1228         /* check the number of EP, since some devices have broken
1229          * descriptors which fool us.  if it has only one EP,
1230          * assume it as adaptive-out or sync-in.
1231          */
1232         attr = fmt->ep_attr & EP_ATTR_MASK;
1233         if (((is_playback && attr == EP_ATTR_ASYNC) ||
1234              (! is_playback && attr == EP_ATTR_ADAPTIVE)) &&
1235             altsd->bNumEndpoints >= 2) {
1236                 /* check sync-pipe endpoint */
1237                 /* ... and check descriptor size before accessing bSynchAddress
1238                    because there is a version of the SB Audigy 2 NX firmware lacking
1239                    the audio fields in the endpoint descriptors */
1240                 if ((get_endpoint(alts, 1)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != 0x01 ||
1241                     (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
1242                      get_endpoint(alts, 1)->bSynchAddress != 0)) {
1243                         snd_printk(KERN_ERR "%d:%d:%d : invalid synch pipe\n",
1244                                    dev->devnum, fmt->iface, fmt->altsetting);
1245                         return -EINVAL;
1246                 }
1247                 ep = get_endpoint(alts, 1)->bEndpointAddress;
1248                 if (get_endpoint(alts, 0)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
1249                     (( is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress | USB_DIR_IN)) ||
1250                      (!is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress & ~USB_DIR_IN)))) {
1251                         snd_printk(KERN_ERR "%d:%d:%d : invalid synch pipe\n",
1252                                    dev->devnum, fmt->iface, fmt->altsetting);
1253                         return -EINVAL;
1254                 }
1255                 ep &= USB_ENDPOINT_NUMBER_MASK;
1256                 if (is_playback)
1257                         subs->syncpipe = usb_rcvisocpipe(dev, ep);
1258                 else
1259                         subs->syncpipe = usb_sndisocpipe(dev, ep);
1260                 if (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
1261                     get_endpoint(alts, 1)->bRefresh >= 1 &&
1262                     get_endpoint(alts, 1)->bRefresh <= 9)
1263                         subs->syncinterval = get_endpoint(alts, 1)->bRefresh;
1264                 else if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
1265                         subs->syncinterval = 1;
1266                 else if (get_endpoint(alts, 1)->bInterval >= 1 &&
1267                          get_endpoint(alts, 1)->bInterval <= 16)
1268                         subs->syncinterval = get_endpoint(alts, 1)->bInterval - 1;
1269                 else
1270                         subs->syncinterval = 3;
1271         }
1272
1273         /* always fill max packet size */
1274         if (fmt->attributes & EP_CS_ATTR_FILL_MAX)
1275                 subs->fill_max = 1;
1276
1277         if ((err = init_usb_pitch(dev, subs->interface, alts, fmt)) < 0)
1278                 return err;
1279
1280         subs->cur_audiofmt = fmt;
1281
1282 #if 0
1283         printk("setting done: format = %d, rate = %d, channels = %d\n",
1284                fmt->format, fmt->rate, fmt->channels);
1285         printk("  datapipe = 0x%0x, syncpipe = 0x%0x\n",
1286                subs->datapipe, subs->syncpipe);
1287 #endif
1288
1289         return 0;
1290 }
1291
1292 /*
1293  * hw_params callback
1294  *
1295  * allocate a buffer and set the given audio format.
1296  *
1297  * so far we use a physically linear buffer although packetize transfer
1298  * doesn't need a continuous area.
1299  * if sg buffer is supported on the later version of alsa, we'll follow
1300  * that.
1301  */
1302 static int snd_usb_hw_params(snd_pcm_substream_t *substream,
1303                              snd_pcm_hw_params_t *hw_params)
1304 {
1305         snd_usb_substream_t *subs = (snd_usb_substream_t *)substream->runtime->private_data;
1306         struct audioformat *fmt;
1307         unsigned int channels, rate, format;
1308         int ret, changed;
1309
1310         ret = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
1311         if (ret < 0)
1312                 return ret;
1313
1314         format = params_format(hw_params);
1315         rate = params_rate(hw_params);
1316         channels = params_channels(hw_params);
1317         fmt = find_format(subs, format, rate, channels);
1318         if (! fmt) {
1319                 snd_printd(KERN_DEBUG "cannot set format: format = %s, rate = %d, channels = %d\n",
1320                            snd_pcm_format_name(format), rate, channels);
1321                 return -EINVAL;
1322         }
1323
1324         changed = subs->cur_audiofmt != fmt ||
1325                 subs->period_bytes != params_period_bytes(hw_params) ||
1326                 subs->cur_rate != rate;
1327         if ((ret = set_format(subs, fmt)) < 0)
1328                 return ret;
1329
1330         if (subs->cur_rate != rate) {
1331                 struct usb_host_interface *alts;
1332                 struct usb_interface *iface;
1333                 iface = usb_ifnum_to_if(subs->dev, fmt->iface);
1334                 alts = &iface->altsetting[fmt->altset_idx];
1335                 ret = init_usb_sample_rate(subs->dev, subs->interface, alts, fmt, rate);
1336                 if (ret < 0)
1337                         return ret;
1338                 subs->cur_rate = rate;
1339         }
1340
1341         if (changed) {
1342                 /* format changed */
1343                 release_substream_urbs(subs, 0);
1344                 /* influenced: period_bytes, channels, rate, format, */
1345                 ret = init_substream_urbs(subs, params_period_bytes(hw_params),
1346                                           params_rate(hw_params),
1347                                           snd_pcm_format_physical_width(params_format(hw_params)) * params_channels(hw_params));
1348         }
1349
1350         return ret;
1351 }
1352
1353 /*
1354  * hw_free callback
1355  *
1356  * reset the audio format and release the buffer
1357  */
1358 static int snd_usb_hw_free(snd_pcm_substream_t *substream)
1359 {
1360         snd_usb_substream_t *subs = (snd_usb_substream_t *)substream->runtime->private_data;
1361
1362         subs->cur_audiofmt = NULL;
1363         subs->cur_rate = 0;
1364         subs->period_bytes = 0;
1365         release_substream_urbs(subs, 0);
1366         return snd_pcm_lib_free_pages(substream);
1367 }
1368
1369 /*
1370  * prepare callback
1371  *
1372  * only a few subtle things...
1373  */
1374 static int snd_usb_pcm_prepare(snd_pcm_substream_t *substream)
1375 {
1376         snd_pcm_runtime_t *runtime = substream->runtime;
1377         snd_usb_substream_t *subs = (snd_usb_substream_t *)runtime->private_data;
1378
1379         if (! subs->cur_audiofmt) {
1380                 snd_printk(KERN_ERR "usbaudio: no format is specified!\n");
1381                 return -ENXIO;
1382         }
1383
1384         /* some unit conversions in runtime */
1385         subs->maxframesize = bytes_to_frames(runtime, subs->maxpacksize);
1386         subs->curframesize = bytes_to_frames(runtime, subs->curpacksize);
1387
1388         /* reset the pointer */
1389         subs->hwptr = 0;
1390         subs->hwptr_done = 0;
1391         subs->transfer_sched = 0;
1392         subs->transfer_done = 0;
1393         subs->phase = 0;
1394
1395         /* clear urbs (to be sure) */
1396         deactivate_urbs(subs, 0, 1);
1397         wait_clear_urbs(subs);
1398
1399         return 0;
1400 }
1401
1402 static snd_pcm_hardware_t snd_usb_playback =
1403 {
1404         .info =                 (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
1405                                  SNDRV_PCM_INFO_BLOCK_TRANSFER |
1406                                  SNDRV_PCM_INFO_MMAP_VALID),
1407         .buffer_bytes_max =     (128*1024),
1408         .period_bytes_min =     64,
1409         .period_bytes_max =     (128*1024),
1410         .periods_min =          2,
1411         .periods_max =          1024,
1412 };
1413
1414 static snd_pcm_hardware_t snd_usb_capture =
1415 {
1416         .info =                 (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
1417                                  SNDRV_PCM_INFO_BLOCK_TRANSFER |
1418                                  SNDRV_PCM_INFO_MMAP_VALID),
1419         .buffer_bytes_max =     (128*1024),
1420         .period_bytes_min =     64,
1421         .period_bytes_max =     (128*1024),
1422         .periods_min =          2,
1423         .periods_max =          1024,
1424 };
1425
1426 /*
1427  * h/w constraints
1428  */
1429
1430 #ifdef HW_CONST_DEBUG
1431 #define hwc_debug(fmt, args...) printk(KERN_DEBUG fmt, ##args)
1432 #else
1433 #define hwc_debug(fmt, args...) /**/
1434 #endif
1435
1436 static int hw_check_valid_format(snd_pcm_hw_params_t *params, struct audioformat *fp)
1437 {
1438         snd_interval_t *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
1439         snd_interval_t *ct = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
1440         snd_mask_t *fmts = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1441
1442         /* check the format */
1443         if (! snd_mask_test(fmts, fp->format)) {
1444                 hwc_debug("   > check: no supported format %d\n", fp->format);
1445                 return 0;
1446         }
1447         /* check the channels */
1448         if (fp->channels < ct->min || fp->channels > ct->max) {
1449                 hwc_debug("   > check: no valid channels %d (%d/%d)\n", fp->channels, ct->min, ct->max);
1450                 return 0;
1451         }
1452         /* check the rate is within the range */
1453         if (fp->rate_min > it->max || (fp->rate_min == it->max && it->openmax)) {
1454                 hwc_debug("   > check: rate_min %d > max %d\n", fp->rate_min, it->max);
1455                 return 0;
1456         }
1457         if (fp->rate_max < it->min || (fp->rate_max == it->min && it->openmin)) {
1458                 hwc_debug("   > check: rate_max %d < min %d\n", fp->rate_max, it->min);
1459                 return 0;
1460         }
1461         return 1;
1462 }
1463
1464 static int hw_rule_rate(snd_pcm_hw_params_t *params,
1465                         snd_pcm_hw_rule_t *rule)
1466 {
1467         snd_usb_substream_t *subs = rule->private;
1468         struct list_head *p;
1469         snd_interval_t *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
1470         unsigned int rmin, rmax;
1471         int changed;
1472
1473         hwc_debug("hw_rule_rate: (%d,%d)\n", it->min, it->max);
1474         changed = 0;
1475         rmin = rmax = 0;
1476         list_for_each(p, &subs->fmt_list) {
1477                 struct audioformat *fp;
1478                 fp = list_entry(p, struct audioformat, list);
1479                 if (! hw_check_valid_format(params, fp))
1480                         continue;
1481                 if (changed++) {
1482                         if (rmin > fp->rate_min)
1483                                 rmin = fp->rate_min;
1484                         if (rmax < fp->rate_max)
1485                                 rmax = fp->rate_max;
1486                 } else {
1487                         rmin = fp->rate_min;
1488                         rmax = fp->rate_max;
1489                 }
1490         }
1491
1492         if (! changed) {
1493                 hwc_debug("  --> get empty\n");
1494                 it->empty = 1;
1495                 return -EINVAL;
1496         }
1497
1498         changed = 0;
1499         if (it->min < rmin) {
1500                 it->min = rmin;
1501                 it->openmin = 0;
1502                 changed = 1;
1503         }
1504         if (it->max > rmax) {
1505                 it->max = rmax;
1506                 it->openmax = 0;
1507                 changed = 1;
1508         }
1509         if (snd_interval_checkempty(it)) {
1510                 it->empty = 1;
1511                 return -EINVAL;
1512         }
1513         hwc_debug("  --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
1514         return changed;
1515 }
1516
1517
1518 static int hw_rule_channels(snd_pcm_hw_params_t *params,
1519                             snd_pcm_hw_rule_t *rule)
1520 {
1521         snd_usb_substream_t *subs = rule->private;
1522         struct list_head *p;
1523         snd_interval_t *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
1524         unsigned int rmin, rmax;
1525         int changed;
1526
1527         hwc_debug("hw_rule_channels: (%d,%d)\n", it->min, it->max);
1528         changed = 0;
1529         rmin = rmax = 0;
1530         list_for_each(p, &subs->fmt_list) {
1531                 struct audioformat *fp;
1532                 fp = list_entry(p, struct audioformat, list);
1533                 if (! hw_check_valid_format(params, fp))
1534                         continue;
1535                 if (changed++) {
1536                         if (rmin > fp->channels)
1537                                 rmin = fp->channels;
1538                         if (rmax < fp->channels)
1539                                 rmax = fp->channels;
1540                 } else {
1541                         rmin = fp->channels;
1542                         rmax = fp->channels;
1543                 }
1544         }
1545
1546         if (! changed) {
1547                 hwc_debug("  --> get empty\n");
1548                 it->empty = 1;
1549                 return -EINVAL;
1550         }
1551
1552         changed = 0;
1553         if (it->min < rmin) {
1554                 it->min = rmin;
1555                 it->openmin = 0;
1556                 changed = 1;
1557         }
1558         if (it->max > rmax) {
1559                 it->max = rmax;
1560                 it->openmax = 0;
1561                 changed = 1;
1562         }
1563         if (snd_interval_checkempty(it)) {
1564                 it->empty = 1;
1565                 return -EINVAL;
1566         }
1567         hwc_debug("  --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
1568         return changed;
1569 }
1570
1571 static int hw_rule_format(snd_pcm_hw_params_t *params,
1572                           snd_pcm_hw_rule_t *rule)
1573 {
1574         snd_usb_substream_t *subs = rule->private;
1575         struct list_head *p;
1576         snd_mask_t *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1577         u64 fbits;
1578         u32 oldbits[2];
1579         int changed;
1580
1581         hwc_debug("hw_rule_format: %x:%x\n", fmt->bits[0], fmt->bits[1]);
1582         fbits = 0;
1583         list_for_each(p, &subs->fmt_list) {
1584                 struct audioformat *fp;
1585                 fp = list_entry(p, struct audioformat, list);
1586                 if (! hw_check_valid_format(params, fp))
1587                         continue;
1588                 fbits |= (1ULL << fp->format);
1589         }
1590
1591         oldbits[0] = fmt->bits[0];
1592         oldbits[1] = fmt->bits[1];
1593         fmt->bits[0] &= (u32)fbits;
1594         fmt->bits[1] &= (u32)(fbits >> 32);
1595         if (! fmt->bits[0] && ! fmt->bits[1]) {
1596                 hwc_debug("  --> get empty\n");
1597                 return -EINVAL;
1598         }
1599         changed = (oldbits[0] != fmt->bits[0] || oldbits[1] != fmt->bits[1]);
1600         hwc_debug("  --> %x:%x (changed = %d)\n", fmt->bits[0], fmt->bits[1], changed);
1601         return changed;
1602 }
1603
1604 #define MAX_MASK        64
1605
1606 /*
1607  * check whether the registered audio formats need special hw-constraints
1608  */
1609 static int check_hw_params_convention(snd_usb_substream_t *subs)
1610 {
1611         int i;
1612         u32 *channels;
1613         u32 *rates;
1614         u32 cmaster, rmaster;
1615         u32 rate_min = 0, rate_max = 0;
1616         struct list_head *p;
1617         int err = 1;
1618
1619         channels = kcalloc(MAX_MASK, sizeof(u32), GFP_KERNEL);
1620         rates = kcalloc(MAX_MASK, sizeof(u32), GFP_KERNEL);
1621
1622         list_for_each(p, &subs->fmt_list) {
1623                 struct audioformat *f;
1624                 f = list_entry(p, struct audioformat, list);
1625                 /* unconventional channels? */
1626                 if (f->channels > 32)
1627                         goto __out;
1628                 /* continuous rate min/max matches? */
1629                 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS) {
1630                         if (rate_min && f->rate_min != rate_min)
1631                                 goto __out;
1632                         if (rate_max && f->rate_max != rate_max)
1633                                 goto __out;
1634                         rate_min = f->rate_min;
1635                         rate_max = f->rate_max;
1636                 }
1637                 /* combination of continuous rates and fixed rates? */
1638                 if (rates[f->format] & SNDRV_PCM_RATE_CONTINUOUS) {
1639                         if (f->rates != rates[f->format])
1640                                 goto __out;
1641                 }
1642                 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS) {
1643                         if (rates[f->format] && rates[f->format] != f->rates)
1644                                 goto __out;
1645                 }
1646                 channels[f->format] |= (1 << f->channels);
1647                 rates[f->format] |= f->rates;
1648         }
1649         /* check whether channels and rates match for all formats */
1650         cmaster = rmaster = 0;
1651         for (i = 0; i < MAX_MASK; i++) {
1652                 if (cmaster != channels[i] && cmaster && channels[i])
1653                         goto __out;
1654                 if (rmaster != rates[i] && rmaster && rates[i])
1655                         goto __out;
1656                 if (channels[i])
1657                         cmaster = channels[i];
1658                 if (rates[i])
1659                         rmaster = rates[i];
1660         }
1661         /* check whether channels match for all distinct rates */
1662         memset(channels, 0, MAX_MASK * sizeof(u32));
1663         list_for_each(p, &subs->fmt_list) {
1664                 struct audioformat *f;
1665                 f = list_entry(p, struct audioformat, list);
1666                 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS)
1667                         continue;
1668                 for (i = 0; i < 32; i++) {
1669                         if (f->rates & (1 << i))
1670                                 channels[i] |= (1 << f->channels);
1671                 }
1672         }
1673         cmaster = 0;
1674         for (i = 0; i < 32; i++) {
1675                 if (cmaster != channels[i] && cmaster && channels[i])
1676                         goto __out;
1677                 if (channels[i])
1678                         cmaster = channels[i];
1679         }
1680         err = 0;
1681
1682  __out:
1683         kfree(channels);
1684         kfree(rates);
1685         return err;
1686 }
1687
1688
1689 /*
1690  * set up the runtime hardware information.
1691  */
1692
1693 static int setup_hw_info(snd_pcm_runtime_t *runtime, snd_usb_substream_t *subs)
1694 {
1695         struct list_head *p;
1696         int err;
1697
1698         runtime->hw.formats = subs->formats;
1699
1700         runtime->hw.rate_min = 0x7fffffff;
1701         runtime->hw.rate_max = 0;
1702         runtime->hw.channels_min = 256;
1703         runtime->hw.channels_max = 0;
1704         runtime->hw.rates = 0;
1705         /* check min/max rates and channels */
1706         list_for_each(p, &subs->fmt_list) {
1707                 struct audioformat *fp;
1708                 fp = list_entry(p, struct audioformat, list);
1709                 runtime->hw.rates |= fp->rates;
1710                 if (runtime->hw.rate_min > fp->rate_min)
1711                         runtime->hw.rate_min = fp->rate_min;
1712                 if (runtime->hw.rate_max < fp->rate_max)
1713                         runtime->hw.rate_max = fp->rate_max;
1714                 if (runtime->hw.channels_min > fp->channels)
1715                         runtime->hw.channels_min = fp->channels;
1716                 if (runtime->hw.channels_max < fp->channels)
1717                         runtime->hw.channels_max = fp->channels;
1718                 if (fp->fmt_type == USB_FORMAT_TYPE_II && fp->frame_size > 0) {
1719                         /* FIXME: there might be more than one audio formats... */
1720                         runtime->hw.period_bytes_min = runtime->hw.period_bytes_max =
1721                                 fp->frame_size;
1722                 }
1723         }
1724
1725         /* set the period time minimum 1ms */
1726         snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_TIME,
1727                                      1000 * MIN_PACKS_URB,
1728                                      /*(nrpacks * MAX_URBS) * 1000*/ UINT_MAX);
1729
1730         if (check_hw_params_convention(subs)) {
1731                 hwc_debug("setting extra hw constraints...\n");
1732                 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
1733                                                hw_rule_rate, subs,
1734                                                SNDRV_PCM_HW_PARAM_FORMAT,
1735                                                SNDRV_PCM_HW_PARAM_CHANNELS,
1736                                                -1)) < 0)
1737                         return err;
1738                 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
1739                                                hw_rule_channels, subs,
1740                                                SNDRV_PCM_HW_PARAM_FORMAT,
1741                                                SNDRV_PCM_HW_PARAM_RATE,
1742                                                -1)) < 0)
1743                         return err;
1744                 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
1745                                                hw_rule_format, subs,
1746                                                SNDRV_PCM_HW_PARAM_RATE,
1747                                                SNDRV_PCM_HW_PARAM_CHANNELS,
1748                                                -1)) < 0)
1749                         return err;
1750         }
1751         return 0;
1752 }
1753
1754 static int snd_usb_pcm_open(snd_pcm_substream_t *substream, int direction,
1755                             snd_pcm_hardware_t *hw)
1756 {
1757         snd_usb_stream_t *as = snd_pcm_substream_chip(substream);
1758         snd_pcm_runtime_t *runtime = substream->runtime;
1759         snd_usb_substream_t *subs = &as->substream[direction];
1760
1761         subs->interface = -1;
1762         subs->format = 0;
1763         runtime->hw = *hw;
1764         runtime->private_data = subs;
1765         subs->pcm_substream = substream;
1766         return setup_hw_info(runtime, subs);
1767 }
1768
1769 static int snd_usb_pcm_close(snd_pcm_substream_t *substream, int direction)
1770 {
1771         snd_usb_stream_t *as = snd_pcm_substream_chip(substream);
1772         snd_usb_substream_t *subs = &as->substream[direction];
1773
1774         if (subs->interface >= 0) {
1775                 usb_set_interface(subs->dev, subs->interface, 0);
1776                 subs->interface = -1;
1777         }
1778         subs->pcm_substream = NULL;
1779         return 0;
1780 }
1781
1782 static int snd_usb_playback_open(snd_pcm_substream_t *substream)
1783 {
1784         return snd_usb_pcm_open(substream, SNDRV_PCM_STREAM_PLAYBACK, &snd_usb_playback);
1785 }
1786
1787 static int snd_usb_playback_close(snd_pcm_substream_t *substream)
1788 {
1789         return snd_usb_pcm_close(substream, SNDRV_PCM_STREAM_PLAYBACK);
1790 }
1791
1792 static int snd_usb_capture_open(snd_pcm_substream_t *substream)
1793 {
1794         return snd_usb_pcm_open(substream, SNDRV_PCM_STREAM_CAPTURE, &snd_usb_capture);
1795 }
1796
1797 static int snd_usb_capture_close(snd_pcm_substream_t *substream)
1798 {
1799         return snd_usb_pcm_close(substream, SNDRV_PCM_STREAM_CAPTURE);
1800 }
1801
1802 static snd_pcm_ops_t snd_usb_playback_ops = {
1803         .open =         snd_usb_playback_open,
1804         .close =        snd_usb_playback_close,
1805         .ioctl =        snd_pcm_lib_ioctl,
1806         .hw_params =    snd_usb_hw_params,
1807         .hw_free =      snd_usb_hw_free,
1808         .prepare =      snd_usb_pcm_prepare,
1809         .trigger =      snd_usb_pcm_trigger,
1810         .pointer =      snd_usb_pcm_pointer,
1811 };
1812
1813 static snd_pcm_ops_t snd_usb_capture_ops = {
1814         .open =         snd_usb_capture_open,
1815         .close =        snd_usb_capture_close,
1816         .ioctl =        snd_pcm_lib_ioctl,
1817         .hw_params =    snd_usb_hw_params,
1818         .hw_free =      snd_usb_hw_free,
1819         .prepare =      snd_usb_pcm_prepare,
1820         .trigger =      snd_usb_pcm_trigger,
1821         .pointer =      snd_usb_pcm_pointer,
1822 };
1823
1824
1825
1826 /*
1827  * helper functions
1828  */
1829
1830 /*
1831  * combine bytes and get an integer value
1832  */
1833 unsigned int snd_usb_combine_bytes(unsigned char *bytes, int size)
1834 {
1835         switch (size) {
1836         case 1:  return *bytes;
1837         case 2:  return combine_word(bytes);
1838         case 3:  return combine_triple(bytes);
1839         case 4:  return combine_quad(bytes);
1840         default: return 0;
1841         }
1842 }
1843
1844 /*
1845  * parse descriptor buffer and return the pointer starting the given
1846  * descriptor type.
1847  */
1848 void *snd_usb_find_desc(void *descstart, int desclen, void *after, u8 dtype)
1849 {
1850         u8 *p, *end, *next;
1851
1852         p = descstart;
1853         end = p + desclen;
1854         for (; p < end;) {
1855                 if (p[0] < 2)
1856                         return NULL;
1857                 next = p + p[0];
1858                 if (next > end)
1859                         return NULL;
1860                 if (p[1] == dtype && (!after || (void *)p > after)) {
1861                         return p;
1862                 }
1863                 p = next;
1864         }
1865         return NULL;
1866 }
1867
1868 /*
1869  * find a class-specified interface descriptor with the given subtype.
1870  */
1871 void *snd_usb_find_csint_desc(void *buffer, int buflen, void *after, u8 dsubtype)
1872 {
1873         unsigned char *p = after;
1874
1875         while ((p = snd_usb_find_desc(buffer, buflen, p,
1876                                       USB_DT_CS_INTERFACE)) != NULL) {
1877                 if (p[0] >= 3 && p[2] == dsubtype)
1878                         return p;
1879         }
1880         return NULL;
1881 }
1882
1883 /*
1884  * Wrapper for usb_control_msg().
1885  * Allocates a temp buffer to prevent dmaing from/to the stack.
1886  */
1887 int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
1888                     __u8 requesttype, __u16 value, __u16 index, void *data,
1889                     __u16 size, int timeout)
1890 {
1891         int err;
1892         void *buf = NULL;
1893
1894         if (size > 0) {
1895                 buf = kmalloc(size, GFP_KERNEL);
1896                 if (!buf)
1897                         return -ENOMEM;
1898                 memcpy(buf, data, size);
1899         }
1900         err = usb_control_msg(dev, pipe, request, requesttype,
1901                               value, index, buf, size, timeout);
1902         if (size > 0) {
1903                 memcpy(data, buf, size);
1904                 kfree(buf);
1905         }
1906         return err;
1907 }
1908
1909
1910 /*
1911  * entry point for linux usb interface
1912  */
1913
1914 static int usb_audio_probe(struct usb_interface *intf,
1915                            const struct usb_device_id *id);
1916 static void usb_audio_disconnect(struct usb_interface *intf);
1917
1918 static struct usb_device_id usb_audio_ids [] = {
1919 #include "usbquirks.h"
1920     { .match_flags = (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS),
1921       .bInterfaceClass = USB_CLASS_AUDIO,
1922       .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL },
1923     { }                                         /* Terminating entry */
1924 };
1925
1926 MODULE_DEVICE_TABLE (usb, usb_audio_ids);
1927
1928 static struct usb_driver usb_audio_driver = {
1929         .owner =        THIS_MODULE,
1930         .name =         "snd-usb-audio",
1931         .probe =        usb_audio_probe,
1932         .disconnect =   usb_audio_disconnect,
1933         .id_table =     usb_audio_ids,
1934 };
1935
1936
1937 /*
1938  * proc interface for list the supported pcm formats
1939  */
1940 static void proc_dump_substream_formats(snd_usb_substream_t *subs, snd_info_buffer_t *buffer)
1941 {
1942         struct list_head *p;
1943         static char *sync_types[4] = {
1944                 "NONE", "ASYNC", "ADAPTIVE", "SYNC"
1945         };
1946
1947         list_for_each(p, &subs->fmt_list) {
1948                 struct audioformat *fp;
1949                 fp = list_entry(p, struct audioformat, list);
1950                 snd_iprintf(buffer, "  Interface %d\n", fp->iface);
1951                 snd_iprintf(buffer, "    Altset %d\n", fp->altsetting);
1952                 snd_iprintf(buffer, "    Format: %s\n", snd_pcm_format_name(fp->format));
1953                 snd_iprintf(buffer, "    Channels: %d\n", fp->channels);
1954                 snd_iprintf(buffer, "    Endpoint: %d %s (%s)\n",
1955                             fp->endpoint & USB_ENDPOINT_NUMBER_MASK,
1956                             fp->endpoint & USB_DIR_IN ? "IN" : "OUT",
1957                             sync_types[(fp->ep_attr & EP_ATTR_MASK) >> 2]);
1958                 if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS) {
1959                         snd_iprintf(buffer, "    Rates: %d - %d (continuous)\n",
1960                                     fp->rate_min, fp->rate_max);
1961                 } else {
1962                         unsigned int i;
1963                         snd_iprintf(buffer, "    Rates: ");
1964                         for (i = 0; i < fp->nr_rates; i++) {
1965                                 if (i > 0)
1966                                         snd_iprintf(buffer, ", ");
1967                                 snd_iprintf(buffer, "%d", fp->rate_table[i]);
1968                         }
1969                         snd_iprintf(buffer, "\n");
1970                 }
1971                 // snd_iprintf(buffer, "    Max Packet Size = %d\n", fp->maxpacksize);
1972                 // snd_iprintf(buffer, "    EP Attribute = 0x%x\n", fp->attributes);
1973         }
1974 }
1975
1976 static void proc_dump_substream_status(snd_usb_substream_t *subs, snd_info_buffer_t *buffer)
1977 {
1978         if (subs->running) {
1979                 unsigned int i;
1980                 snd_iprintf(buffer, "  Status: Running\n");
1981                 snd_iprintf(buffer, "    Interface = %d\n", subs->interface);
1982                 snd_iprintf(buffer, "    Altset = %d\n", subs->format);
1983                 snd_iprintf(buffer, "    URBs = %d [ ", subs->nurbs);
1984                 for (i = 0; i < subs->nurbs; i++)
1985                         snd_iprintf(buffer, "%d ", subs->dataurb[i].packets);
1986                 snd_iprintf(buffer, "]\n");
1987                 snd_iprintf(buffer, "    Packet Size = %d\n", subs->curpacksize);
1988                 snd_iprintf(buffer, "    Momentary freq = %u Hz (%#x.%04x)\n",
1989                             snd_usb_get_speed(subs->dev) == USB_SPEED_FULL
1990                             ? get_full_speed_hz(subs->freqm)
1991                             : get_high_speed_hz(subs->freqm),
1992                             subs->freqm >> 16, subs->freqm & 0xffff);
1993         } else {
1994                 snd_iprintf(buffer, "  Status: Stop\n");
1995         }
1996 }
1997
1998 static void proc_pcm_format_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
1999 {
2000         snd_usb_stream_t *stream = entry->private_data;
2001
2002         snd_iprintf(buffer, "%s : %s\n", stream->chip->card->longname, stream->pcm->name);
2003
2004         if (stream->substream[SNDRV_PCM_STREAM_PLAYBACK].num_formats) {
2005                 snd_iprintf(buffer, "\nPlayback:\n");
2006                 proc_dump_substream_status(&stream->substream[SNDRV_PCM_STREAM_PLAYBACK], buffer);
2007                 proc_dump_substream_formats(&stream->substream[SNDRV_PCM_STREAM_PLAYBACK], buffer);
2008         }
2009         if (stream->substream[SNDRV_PCM_STREAM_CAPTURE].num_formats) {
2010                 snd_iprintf(buffer, "\nCapture:\n");
2011                 proc_dump_substream_status(&stream->substream[SNDRV_PCM_STREAM_CAPTURE], buffer);
2012                 proc_dump_substream_formats(&stream->substream[SNDRV_PCM_STREAM_CAPTURE], buffer);
2013         }
2014 }
2015
2016 static void proc_pcm_format_add(snd_usb_stream_t *stream)
2017 {
2018         snd_info_entry_t *entry;
2019         char name[32];
2020         snd_card_t *card = stream->chip->card;
2021
2022         sprintf(name, "stream%d", stream->pcm_index);
2023         if (! snd_card_proc_new(card, name, &entry))
2024                 snd_info_set_text_ops(entry, stream, 1024, proc_pcm_format_read);
2025 }
2026
2027
2028 /*
2029  * initialize the substream instance.
2030  */
2031
2032 static void init_substream(snd_usb_stream_t *as, int stream, struct audioformat *fp)
2033 {
2034         snd_usb_substream_t *subs = &as->substream[stream];
2035
2036         INIT_LIST_HEAD(&subs->fmt_list);
2037         spin_lock_init(&subs->lock);
2038
2039         subs->stream = as;
2040         subs->direction = stream;
2041         subs->dev = as->chip->dev;
2042         if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
2043                 subs->ops = audio_urb_ops[stream];
2044         else
2045                 subs->ops = audio_urb_ops_high_speed[stream];
2046         snd_pcm_lib_preallocate_pages(as->pcm->streams[stream].substream,
2047                                       SNDRV_DMA_TYPE_CONTINUOUS,
2048                                       snd_dma_continuous_data(GFP_KERNEL),
2049                                       64 * 1024, 128 * 1024);
2050         snd_pcm_set_ops(as->pcm, stream,
2051                         stream == SNDRV_PCM_STREAM_PLAYBACK ?
2052                         &snd_usb_playback_ops : &snd_usb_capture_ops);
2053
2054         list_add_tail(&fp->list, &subs->fmt_list);
2055         subs->formats |= 1ULL << fp->format;
2056         subs->endpoint = fp->endpoint;
2057         subs->num_formats++;
2058         subs->fmt_type = fp->fmt_type;
2059 }
2060
2061
2062 /*
2063  * free a substream
2064  */
2065 static void free_substream(snd_usb_substream_t *subs)
2066 {
2067         struct list_head *p, *n;
2068
2069         if (! subs->num_formats)
2070                 return; /* not initialized */
2071         list_for_each_safe(p, n, &subs->fmt_list) {
2072                 struct audioformat *fp = list_entry(p, struct audioformat, list);
2073                 kfree(fp->rate_table);
2074                 kfree(fp);
2075         }
2076 }
2077
2078
2079 /*
2080  * free a usb stream instance
2081  */
2082 static void snd_usb_audio_stream_free(snd_usb_stream_t *stream)
2083 {
2084         free_substream(&stream->substream[0]);
2085         free_substream(&stream->substream[1]);
2086         list_del(&stream->list);
2087         kfree(stream);
2088 }
2089
2090 static void snd_usb_audio_pcm_free(snd_pcm_t *pcm)
2091 {
2092         snd_usb_stream_t *stream = pcm->private_data;
2093         if (stream) {
2094                 stream->pcm = NULL;
2095                 snd_pcm_lib_preallocate_free_for_all(pcm);
2096                 snd_usb_audio_stream_free(stream);
2097         }
2098 }
2099
2100
2101 /*
2102  * add this endpoint to the chip instance.
2103  * if a stream with the same endpoint already exists, append to it.
2104  * if not, create a new pcm stream.
2105  */
2106 static int add_audio_endpoint(snd_usb_audio_t *chip, int stream, struct audioformat *fp)
2107 {
2108         struct list_head *p;
2109         snd_usb_stream_t *as;
2110         snd_usb_substream_t *subs;
2111         snd_pcm_t *pcm;
2112         int err;
2113
2114         list_for_each(p, &chip->pcm_list) {
2115                 as = list_entry(p, snd_usb_stream_t, list);
2116                 if (as->fmt_type != fp->fmt_type)
2117                         continue;
2118                 subs = &as->substream[stream];
2119                 if (! subs->endpoint)
2120                         continue;
2121                 if (subs->endpoint == fp->endpoint) {
2122                         list_add_tail(&fp->list, &subs->fmt_list);
2123                         subs->num_formats++;
2124                         subs->formats |= 1ULL << fp->format;
2125                         return 0;
2126                 }
2127         }
2128         /* look for an empty stream */
2129         list_for_each(p, &chip->pcm_list) {
2130                 as = list_entry(p, snd_usb_stream_t, list);
2131                 if (as->fmt_type != fp->fmt_type)
2132                         continue;
2133                 subs = &as->substream[stream];
2134                 if (subs->endpoint)
2135                         continue;
2136                 err = snd_pcm_new_stream(as->pcm, stream, 1);
2137                 if (err < 0)
2138                         return err;
2139                 init_substream(as, stream, fp);
2140                 return 0;
2141         }
2142
2143         /* create a new pcm */
2144         as = kmalloc(sizeof(*as), GFP_KERNEL);
2145         if (! as)
2146                 return -ENOMEM;
2147         memset(as, 0, sizeof(*as));
2148         as->pcm_index = chip->pcm_devs;
2149         as->chip = chip;
2150         as->fmt_type = fp->fmt_type;
2151         err = snd_pcm_new(chip->card, "USB Audio", chip->pcm_devs,
2152                           stream == SNDRV_PCM_STREAM_PLAYBACK ? 1 : 0,
2153                           stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1,
2154                           &pcm);
2155         if (err < 0) {
2156                 kfree(as);
2157                 return err;
2158         }
2159         as->pcm = pcm;
2160         pcm->private_data = as;
2161         pcm->private_free = snd_usb_audio_pcm_free;
2162         pcm->info_flags = 0;
2163         if (chip->pcm_devs > 0)
2164                 sprintf(pcm->name, "USB Audio #%d", chip->pcm_devs);
2165         else
2166                 strcpy(pcm->name, "USB Audio");
2167
2168         init_substream(as, stream, fp);
2169
2170         list_add(&as->list, &chip->pcm_list);
2171         chip->pcm_devs++;
2172
2173         proc_pcm_format_add(as);
2174
2175         return 0;
2176 }
2177
2178
2179 /*
2180  * check if the device uses big-endian samples
2181  */
2182 static int is_big_endian_format(snd_usb_audio_t *chip, struct audioformat *fp)
2183 {
2184         switch (chip->usb_id) {
2185         case USB_ID(0x0763, 0x2001): /* M-Audio Quattro: captured data only */
2186                 if (fp->endpoint & USB_DIR_IN)
2187                         return 1;
2188                 break;
2189         case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
2190                 return 1;
2191         }
2192         return 0;
2193 }
2194
2195 /*
2196  * parse the audio format type I descriptor
2197  * and returns the corresponding pcm format
2198  *
2199  * @dev: usb device
2200  * @fp: audioformat record
2201  * @format: the format tag (wFormatTag)
2202  * @fmt: the format type descriptor
2203  */
2204 static int parse_audio_format_i_type(snd_usb_audio_t *chip, struct audioformat *fp,
2205                                      int format, unsigned char *fmt)
2206 {
2207         int pcm_format;
2208         int sample_width, sample_bytes;
2209
2210         /* FIXME: correct endianess and sign? */
2211         pcm_format = -1;
2212         sample_width = fmt[6];
2213         sample_bytes = fmt[5];
2214         switch (format) {
2215         case 0: /* some devices don't define this correctly... */
2216                 snd_printdd(KERN_INFO "%d:%u:%d : format type 0 is detected, processed as PCM\n",
2217                             chip->dev->devnum, fp->iface, fp->altsetting);
2218                 /* fall-through */
2219         case USB_AUDIO_FORMAT_PCM:
2220                 if (sample_width > sample_bytes * 8) {
2221                         snd_printk(KERN_INFO "%d:%u:%d : sample bitwidth %d in over sample bytes %d\n",
2222                                    chip->dev->devnum, fp->iface, fp->altsetting,
2223                                    sample_width, sample_bytes);
2224                 }
2225                 /* check the format byte size */
2226                 switch (fmt[5]) {
2227                 case 1:
2228                         pcm_format = SNDRV_PCM_FORMAT_S8;
2229                         break;
2230                 case 2:
2231                         if (is_big_endian_format(chip, fp))
2232                                 pcm_format = SNDRV_PCM_FORMAT_S16_BE; /* grrr, big endian!! */
2233                         else
2234                                 pcm_format = SNDRV_PCM_FORMAT_S16_LE;
2235                         break;
2236                 case 3:
2237                         if (is_big_endian_format(chip, fp))
2238                                 pcm_format = SNDRV_PCM_FORMAT_S24_3BE; /* grrr, big endian!! */
2239                         else
2240                                 pcm_format = SNDRV_PCM_FORMAT_S24_3LE;
2241                         break;
2242                 case 4:
2243                         pcm_format = SNDRV_PCM_FORMAT_S32_LE;
2244                         break;
2245                 default:
2246                         snd_printk(KERN_INFO "%d:%u:%d : unsupported sample bitwidth %d in %d bytes\n",
2247                                    chip->dev->devnum, fp->iface,
2248                                    fp->altsetting, sample_width, sample_bytes);
2249                         break;
2250                 }
2251                 break;
2252         case USB_AUDIO_FORMAT_PCM8:
2253                 /* Dallas DS4201 workaround */
2254                 if (chip->usb_id == USB_ID(0x04fa, 0x4201))
2255                         pcm_format = SNDRV_PCM_FORMAT_S8;
2256                 else
2257                         pcm_format = SNDRV_PCM_FORMAT_U8;
2258                 break;
2259         case USB_AUDIO_FORMAT_IEEE_FLOAT:
2260                 pcm_format = SNDRV_PCM_FORMAT_FLOAT_LE;
2261                 break;
2262         case USB_AUDIO_FORMAT_ALAW:
2263                 pcm_format = SNDRV_PCM_FORMAT_A_LAW;
2264                 break;
2265         case USB_AUDIO_FORMAT_MU_LAW:
2266                 pcm_format = SNDRV_PCM_FORMAT_MU_LAW;
2267                 break;
2268         default:
2269                 snd_printk(KERN_INFO "%d:%u:%d : unsupported format type %d\n",
2270                            chip->dev->devnum, fp->iface, fp->altsetting, format);
2271                 break;
2272         }
2273         return pcm_format;
2274 }
2275
2276
2277 /*
2278  * parse the format descriptor and stores the possible sample rates
2279  * on the audioformat table.
2280  *
2281  * @dev: usb device
2282  * @fp: audioformat record
2283  * @fmt: the format descriptor
2284  * @offset: the start offset of descriptor pointing the rate type
2285  *          (7 for type I and II, 8 for type II)
2286  */
2287 static int parse_audio_format_rates(snd_usb_audio_t *chip, struct audioformat *fp,
2288                                     unsigned char *fmt, int offset)
2289 {
2290         int nr_rates = fmt[offset];
2291         if (fmt[0] < offset + 1 + 3 * (nr_rates ? nr_rates : 2)) {
2292                 snd_printk(KERN_ERR "%d:%u:%d : invalid FORMAT_TYPE desc\n",
2293                                    chip->dev->devnum, fp->iface, fp->altsetting);
2294                 return -1;
2295         }
2296
2297         if (nr_rates) {
2298                 /*
2299                  * build the rate table and bitmap flags
2300                  */
2301                 int r, idx, c;
2302                 /* this table corresponds to the SNDRV_PCM_RATE_XXX bit */
2303                 static unsigned int conv_rates[] = {
2304                         5512, 8000, 11025, 16000, 22050, 32000, 44100, 48000,
2305                         64000, 88200, 96000, 176400, 192000
2306                 };
2307                 fp->rate_table = kmalloc(sizeof(int) * nr_rates, GFP_KERNEL);
2308                 if (fp->rate_table == NULL) {
2309                         snd_printk(KERN_ERR "cannot malloc\n");
2310                         return -1;
2311                 }
2312
2313                 fp->nr_rates = nr_rates;
2314                 fp->rate_min = fp->rate_max = combine_triple(&fmt[8]);
2315                 for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) {
2316                         unsigned int rate = fp->rate_table[r] = combine_triple(&fmt[idx]);
2317                         if (rate < fp->rate_min)
2318                                 fp->rate_min = rate;
2319                         else if (rate > fp->rate_max)
2320                                 fp->rate_max = rate;
2321                         for (c = 0; c < (int)ARRAY_SIZE(conv_rates); c++) {
2322                                 if (rate == conv_rates[c]) {
2323                                         fp->rates |= (1 << c);
2324                                         break;
2325                                 }
2326                         }
2327                 }
2328         } else {
2329                 /* continuous rates */
2330                 fp->rates = SNDRV_PCM_RATE_CONTINUOUS;
2331                 fp->rate_min = combine_triple(&fmt[offset + 1]);
2332                 fp->rate_max = combine_triple(&fmt[offset + 4]);
2333         }
2334         return 0;
2335 }
2336
2337 /*
2338  * parse the format type I and III descriptors
2339  */
2340 static int parse_audio_format_i(snd_usb_audio_t *chip, struct audioformat *fp,
2341                                 int format, unsigned char *fmt)
2342 {
2343         int pcm_format;
2344
2345         if (fmt[3] == USB_FORMAT_TYPE_III) {
2346                 /* FIXME: the format type is really IECxxx
2347                  *        but we give normal PCM format to get the existing
2348                  *        apps working...
2349                  */
2350                 pcm_format = SNDRV_PCM_FORMAT_S16_LE;
2351         } else {
2352                 pcm_format = parse_audio_format_i_type(chip, fp, format, fmt);
2353                 if (pcm_format < 0)
2354                         return -1;
2355         }
2356         fp->format = pcm_format;
2357         fp->channels = fmt[4];
2358         if (fp->channels < 1) {
2359                 snd_printk(KERN_ERR "%d:%u:%d : invalid channels %d\n",
2360                            chip->dev->devnum, fp->iface, fp->altsetting, fp->channels);
2361                 return -1;
2362         }
2363         return parse_audio_format_rates(chip, fp, fmt, 7);
2364 }
2365
2366 /*
2367  * prase the format type II descriptor
2368  */
2369 static int parse_audio_format_ii(snd_usb_audio_t *chip, struct audioformat *fp,
2370                                  int format, unsigned char *fmt)
2371 {
2372         int brate, framesize;
2373         switch (format) {
2374         case USB_AUDIO_FORMAT_AC3:
2375                 /* FIXME: there is no AC3 format defined yet */
2376                 // fp->format = SNDRV_PCM_FORMAT_AC3;
2377                 fp->format = SNDRV_PCM_FORMAT_U8; /* temporarily hack to receive byte streams */
2378                 break;
2379         case USB_AUDIO_FORMAT_MPEG:
2380                 fp->format = SNDRV_PCM_FORMAT_MPEG;
2381                 break;
2382         default:
2383                 snd_printd(KERN_INFO "%d:%u:%d : unknown format tag 0x%x is detected.  processed as MPEG.\n",
2384                            chip->dev->devnum, fp->iface, fp->altsetting, format);
2385                 fp->format = SNDRV_PCM_FORMAT_MPEG;
2386                 break;
2387         }
2388         fp->channels = 1;
2389         brate = combine_word(&fmt[4]);  /* fmt[4,5] : wMaxBitRate (in kbps) */
2390         framesize = combine_word(&fmt[6]); /* fmt[6,7]: wSamplesPerFrame */
2391         snd_printd(KERN_INFO "found format II with max.bitrate = %d, frame size=%d\n", brate, framesize);
2392         fp->frame_size = framesize;
2393         return parse_audio_format_rates(chip, fp, fmt, 8); /* fmt[8..] sample rates */
2394 }
2395
2396 static int parse_audio_format(snd_usb_audio_t *chip, struct audioformat *fp,
2397                               int format, unsigned char *fmt, int stream)
2398 {
2399         int err;
2400
2401         switch (fmt[3]) {
2402         case USB_FORMAT_TYPE_I:
2403         case USB_FORMAT_TYPE_III:
2404                 err = parse_audio_format_i(chip, fp, format, fmt);
2405                 break;
2406         case USB_FORMAT_TYPE_II:
2407                 err = parse_audio_format_ii(chip, fp, format, fmt);
2408                 break;
2409         default:
2410                 snd_printd(KERN_INFO "%d:%u:%d : format type %d is not supported yet\n",
2411                            chip->dev->devnum, fp->iface, fp->altsetting, fmt[3]);
2412                 return -1;
2413         }
2414         fp->fmt_type = fmt[3];
2415         if (err < 0)
2416                 return err;
2417 #if 1
2418         /* FIXME: temporary hack for extigy/audigy 2 nx */
2419         /* extigy apparently supports sample rates other than 48k
2420          * but not in ordinary way.  so we enable only 48k atm.
2421          */
2422         if (chip->usb_id == USB_ID(0x041e, 0x3000) ||
2423             chip->usb_id == USB_ID(0x041e, 0x3020)) {
2424                 if (fmt[3] == USB_FORMAT_TYPE_I &&
2425                     fp->rates != SNDRV_PCM_RATE_48000 &&
2426                     fp->rates != SNDRV_PCM_RATE_96000)
2427                         return -1;
2428         }
2429 #endif
2430         return 0;
2431 }
2432
2433 static int parse_audio_endpoints(snd_usb_audio_t *chip, int iface_no)
2434 {
2435         struct usb_device *dev;
2436         struct usb_interface *iface;
2437         struct usb_host_interface *alts;
2438         struct usb_interface_descriptor *altsd;
2439         int i, altno, err, stream;
2440         int format;
2441         struct audioformat *fp;
2442         unsigned char *fmt, *csep;
2443
2444         dev = chip->dev;
2445
2446         /* parse the interface's altsettings */
2447         iface = usb_ifnum_to_if(dev, iface_no);
2448         for (i = 0; i < iface->num_altsetting; i++) {
2449                 alts = &iface->altsetting[i];
2450                 altsd = get_iface_desc(alts);
2451                 /* skip invalid one */
2452                 if ((altsd->bInterfaceClass != USB_CLASS_AUDIO &&
2453                      altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
2454                     (altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIO_STREAMING &&
2455                      altsd->bInterfaceSubClass != USB_SUBCLASS_VENDOR_SPEC) ||
2456                     altsd->bNumEndpoints < 1 ||
2457                     le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0)
2458                         continue;
2459                 /* must be isochronous */
2460                 if ((get_endpoint(alts, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) !=
2461                     USB_ENDPOINT_XFER_ISOC)
2462                         continue;
2463                 /* check direction */
2464                 stream = (get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN) ?
2465                         SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
2466                 altno = altsd->bAlternateSetting;
2467
2468                 /* get audio formats */
2469                 fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, AS_GENERAL);
2470                 if (!fmt) {
2471                         snd_printk(KERN_ERR "%d:%u:%d : AS_GENERAL descriptor not found\n",
2472                                    dev->devnum, iface_no, altno);
2473                         continue;
2474                 }
2475
2476                 if (fmt[0] < 7) {
2477                         snd_printk(KERN_ERR "%d:%u:%d : invalid AS_GENERAL desc\n",
2478                                    dev->devnum, iface_no, altno);
2479                         continue;
2480                 }
2481
2482                 format = (fmt[6] << 8) | fmt[5]; /* remember the format value */
2483
2484                 /* get format type */
2485                 fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, FORMAT_TYPE);
2486                 if (!fmt) {
2487                         snd_printk(KERN_ERR "%d:%u:%d : no FORMAT_TYPE desc\n",
2488                                    dev->devnum, iface_no, altno);
2489                         continue;
2490                 }
2491                 if (fmt[0] < 8) {
2492                         snd_printk(KERN_ERR "%d:%u:%d : invalid FORMAT_TYPE desc\n",
2493                                    dev->devnum, iface_no, altno);
2494                         continue;
2495                 }
2496
2497                 csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT);
2498                 /* Creamware Noah has this descriptor after the 2nd endpoint */
2499                 if (!csep && altsd->bNumEndpoints >= 2)
2500                         csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDPOINT);
2501                 if (!csep || csep[0] < 7 || csep[2] != EP_GENERAL) {
2502                         snd_printk(KERN_ERR "%d:%u:%d : no or invalid class specific endpoint descriptor\n",
2503                                    dev->devnum, iface_no, altno);
2504                         continue;
2505                 }
2506
2507                 fp = kmalloc(sizeof(*fp), GFP_KERNEL);
2508                 if (! fp) {
2509                         snd_printk(KERN_ERR "cannot malloc\n");
2510                         return -ENOMEM;
2511                 }
2512
2513                 memset(fp, 0, sizeof(*fp));
2514                 fp->iface = iface_no;
2515                 fp->altsetting = altno;
2516                 fp->altset_idx = i;
2517                 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
2518                 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
2519                 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2520                 if (snd_usb_get_speed(dev) == USB_SPEED_HIGH)
2521                         fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1)
2522                                         * (fp->maxpacksize & 0x7ff);
2523                 fp->attributes = csep[3];
2524
2525                 /* some quirks for attributes here */
2526
2527                 switch (chip->usb_id) {
2528                 case USB_ID(0x0a92, 0x0053): /* AudioTrak Optoplay */
2529                         /* Optoplay sets the sample rate attribute although
2530                          * it seems not supporting it in fact.
2531                          */
2532                         fp->attributes &= ~EP_CS_ATTR_SAMPLE_RATE;
2533                         break;
2534                 case USB_ID(0x041e, 0x3020): /* Creative SB Audigy 2 NX */
2535                 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
2536                         /* doesn't set the sample rate attribute, but supports it */
2537                         fp->attributes |= EP_CS_ATTR_SAMPLE_RATE;
2538                         break;
2539                 case USB_ID(0x047f, 0x0ca1): /* plantronics headset */
2540                 case USB_ID(0x077d, 0x07af): /* Griffin iMic (note that there is
2541                                                 an older model 77d:223) */
2542                 /*
2543                  * plantronics headset and Griffin iMic have set adaptive-in
2544                  * although it's really not...
2545                  */
2546                         fp->ep_attr &= ~EP_ATTR_MASK;
2547                         if (stream == SNDRV_PCM_STREAM_PLAYBACK)
2548                                 fp->ep_attr |= EP_ATTR_ADAPTIVE;
2549                         else
2550                                 fp->ep_attr |= EP_ATTR_SYNC;
2551                         break;
2552                 }
2553
2554                 /* ok, let's parse further... */
2555                 if (parse_audio_format(chip, fp, format, fmt, stream) < 0) {
2556                         kfree(fp->rate_table);
2557                         kfree(fp);
2558                         continue;
2559                 }
2560
2561                 snd_printdd(KERN_INFO "%d:%u:%d: add audio endpoint 0x%x\n", dev->devnum, iface_no, i, fp->endpoint);
2562                 err = add_audio_endpoint(chip, stream, fp);
2563                 if (err < 0) {
2564                         kfree(fp->rate_table);
2565                         kfree(fp);
2566                         return err;
2567                 }
2568                 /* try to set the interface... */
2569                 usb_set_interface(chip->dev, iface_no, altno);
2570                 init_usb_pitch(chip->dev, iface_no, alts, fp);
2571                 init_usb_sample_rate(chip->dev, iface_no, alts, fp, fp->rate_max);
2572         }
2573         return 0;
2574 }
2575
2576
2577 /*
2578  * disconnect streams
2579  * called from snd_usb_audio_disconnect()
2580  */
2581 static void snd_usb_stream_disconnect(struct list_head *head)
2582 {
2583         int idx;
2584         snd_usb_stream_t *as;
2585         snd_usb_substream_t *subs;
2586
2587         as = list_entry(head, snd_usb_stream_t, list);
2588         for (idx = 0; idx < 2; idx++) {
2589                 subs = &as->substream[idx];
2590                 if (!subs->num_formats)
2591                         return;
2592                 release_substream_urbs(subs, 1);
2593                 subs->interface = -1;
2594         }
2595 }
2596
2597 /*
2598  * parse audio control descriptor and create pcm/midi streams
2599  */
2600 static int snd_usb_create_streams(snd_usb_audio_t *chip, int ctrlif)
2601 {
2602         struct usb_device *dev = chip->dev;
2603         struct usb_host_interface *host_iface;
2604         struct usb_interface *iface;
2605         unsigned char *p1;
2606         int i, j;
2607
2608         /* find audiocontrol interface */
2609         host_iface = &usb_ifnum_to_if(dev, ctrlif)->altsetting[0];
2610         if (!(p1 = snd_usb_find_csint_desc(host_iface->extra, host_iface->extralen, NULL, HEADER))) {
2611                 snd_printk(KERN_ERR "cannot find HEADER\n");
2612                 return -EINVAL;
2613         }
2614         if (! p1[7] || p1[0] < 8 + p1[7]) {
2615                 snd_printk(KERN_ERR "invalid HEADER\n");
2616                 return -EINVAL;
2617         }
2618
2619         /*
2620          * parse all USB audio streaming interfaces
2621          */
2622         for (i = 0; i < p1[7]; i++) {
2623                 struct usb_host_interface *alts;
2624                 struct usb_interface_descriptor *altsd;
2625                 j = p1[8 + i];
2626                 iface = usb_ifnum_to_if(dev, j);
2627                 if (!iface) {
2628                         snd_printk(KERN_ERR "%d:%u:%d : does not exist\n",
2629                                    dev->devnum, ctrlif, j);
2630                         continue;
2631                 }
2632                 if (usb_interface_claimed(iface)) {
2633                         snd_printdd(KERN_INFO "%d:%d:%d: skipping, already claimed\n", dev->devnum, ctrlif, j);
2634                         continue;
2635                 }
2636                 alts = &iface->altsetting[0];
2637                 altsd = get_iface_desc(alts);
2638                 if ((altsd->bInterfaceClass == USB_CLASS_AUDIO ||
2639                      altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC) &&
2640                     altsd->bInterfaceSubClass == USB_SUBCLASS_MIDI_STREAMING) {
2641                         if (snd_usb_create_midi_interface(chip, iface, NULL) < 0) {
2642                                 snd_printk(KERN_ERR "%d:%u:%d: cannot create sequencer device\n", dev->devnum, ctrlif, j);
2643                                 continue;
2644                         }
2645                         usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1L);
2646                         continue;
2647                 }
2648                 if ((altsd->bInterfaceClass != USB_CLASS_AUDIO &&
2649                      altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
2650                     altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIO_STREAMING) {
2651                         snd_printdd(KERN_ERR "%d:%u:%d: skipping non-supported interface %d\n", dev->devnum, ctrlif, j, altsd->bInterfaceClass);
2652                         /* skip non-supported classes */
2653                         continue;
2654                 }
2655                 if (! parse_audio_endpoints(chip, j)) {
2656                         usb_set_interface(dev, j, 0); /* reset the current interface */
2657                         usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1L);
2658                 }
2659         }
2660
2661         return 0;
2662 }
2663
2664 /*
2665  * create a stream for an endpoint/altsetting without proper descriptors
2666  */
2667 static int create_fixed_stream_quirk(snd_usb_audio_t *chip,
2668                                      struct usb_interface *iface,
2669                                      const snd_usb_audio_quirk_t *quirk)
2670 {
2671         struct audioformat *fp;
2672         struct usb_host_interface *alts;
2673         int stream, err;
2674         int *rate_table = NULL;
2675
2676         fp = kmalloc(sizeof(*fp), GFP_KERNEL);
2677         if (! fp) {
2678                 snd_printk(KERN_ERR "cannot malloc\n");
2679                 return -ENOMEM;
2680         }
2681         memcpy(fp, quirk->data, sizeof(*fp));
2682         if (fp->nr_rates > 0) {
2683                 rate_table = kmalloc(sizeof(int) * fp->nr_rates, GFP_KERNEL);
2684                 if (!rate_table) {
2685                         kfree(fp);
2686                         return -ENOMEM;
2687                 }
2688                 memcpy(rate_table, fp->rate_table, sizeof(int) * fp->nr_rates);
2689                 fp->rate_table = rate_table;
2690         }
2691
2692         stream = (fp->endpoint & USB_DIR_IN)
2693                 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
2694         err = add_audio_endpoint(chip, stream, fp);
2695         if (err < 0) {
2696                 kfree(fp);
2697                 kfree(rate_table);
2698                 return err;
2699         }
2700         if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
2701             fp->altset_idx >= iface->num_altsetting) {
2702                 kfree(fp);
2703                 kfree(rate_table);
2704                 return -EINVAL;
2705         }
2706         alts = &iface->altsetting[fp->altset_idx];
2707         usb_set_interface(chip->dev, fp->iface, 0);
2708         init_usb_pitch(chip->dev, fp->iface, alts, fp);
2709         init_usb_sample_rate(chip->dev, fp->iface, alts, fp, fp->rate_max);
2710         return 0;
2711 }
2712
2713 /*
2714  * create a stream for an interface with proper descriptors
2715  */
2716 static int create_standard_interface_quirk(snd_usb_audio_t *chip,
2717                                            struct usb_interface *iface,
2718                                            const snd_usb_audio_quirk_t *quirk)
2719 {
2720         struct usb_host_interface *alts;
2721         struct usb_interface_descriptor *altsd;
2722         int err;
2723
2724         alts = &iface->altsetting[0];
2725         altsd = get_iface_desc(alts);
2726         switch (quirk->type) {
2727         case QUIRK_AUDIO_STANDARD_INTERFACE:
2728                 err = parse_audio_endpoints(chip, altsd->bInterfaceNumber);
2729                 if (!err)
2730                         usb_set_interface(chip->dev, altsd->bInterfaceNumber, 0); /* reset the current interface */
2731                 break;
2732         case QUIRK_MIDI_STANDARD_INTERFACE:
2733                 err = snd_usb_create_midi_interface(chip, iface, NULL);
2734                 break;
2735         default:
2736                 snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
2737                 return -ENXIO;
2738         }
2739         if (err < 0) {
2740                 snd_printk(KERN_ERR "cannot setup if %d: error %d\n",
2741                            altsd->bInterfaceNumber, err);
2742                 return err;
2743         }
2744         return 0;
2745 }
2746
2747 /*
2748  * Create a stream for an Edirol UA-700/UA-25 interface.  The only way
2749  * to detect the sample rate is by looking at wMaxPacketSize.
2750  */
2751 static int create_ua700_ua25_quirk(snd_usb_audio_t *chip,
2752                                    struct usb_interface *iface,
2753                                    const snd_usb_audio_quirk_t *quirk)
2754 {
2755         static const struct audioformat ua_format = {
2756                 .format = SNDRV_PCM_FORMAT_S24_3LE,
2757                 .channels = 2,
2758                 .fmt_type = USB_FORMAT_TYPE_I,
2759                 .altsetting = 1,
2760                 .altset_idx = 1,
2761                 .rates = SNDRV_PCM_RATE_CONTINUOUS,
2762         };
2763         struct usb_host_interface *alts;
2764         struct usb_interface_descriptor *altsd;
2765         struct audioformat *fp;
2766         int stream, err;
2767
2768         /* both PCM and MIDI interfaces have 2 altsettings */
2769         if (iface->num_altsetting != 2)
2770                 return -ENXIO;
2771         alts = &iface->altsetting[1];
2772         altsd = get_iface_desc(alts);
2773
2774         if (altsd->bNumEndpoints == 2) {
2775                 static const snd_usb_midi_endpoint_info_t ua700_ep = {
2776                         .out_cables = 0x0003,
2777                         .in_cables  = 0x0003
2778                 };
2779                 static const snd_usb_audio_quirk_t ua700_quirk = {
2780                         .type = QUIRK_MIDI_FIXED_ENDPOINT,
2781                         .data = &ua700_ep
2782                 };
2783                 static const snd_usb_midi_endpoint_info_t ua25_ep = {
2784                         .out_cables = 0x0001,
2785                         .in_cables  = 0x0001
2786                 };
2787                 static const snd_usb_audio_quirk_t ua25_quirk = {
2788                         .type = QUIRK_MIDI_FIXED_ENDPOINT,
2789                         .data = &ua25_ep
2790                 };
2791                 if (chip->usb_id == USB_ID(0x0582, 0x002b))
2792                         return snd_usb_create_midi_interface(chip, iface,
2793                                                              &ua700_quirk);
2794                 else
2795                         return snd_usb_create_midi_interface(chip, iface,
2796                                                              &ua25_quirk);
2797         }
2798
2799         if (altsd->bNumEndpoints != 1)
2800                 return -ENXIO;
2801
2802         fp = kmalloc(sizeof(*fp), GFP_KERNEL);
2803         if (!fp)
2804                 return -ENOMEM;
2805         memcpy(fp, &ua_format, sizeof(*fp));
2806
2807         fp->iface = altsd->bInterfaceNumber;
2808         fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
2809         fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
2810         fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2811
2812         switch (fp->maxpacksize) {
2813         case 0x120:
2814                 fp->rate_max = fp->rate_min = 44100;
2815                 break;
2816         case 0x138:
2817         case 0x140:
2818                 fp->rate_max = fp->rate_min = 48000;
2819                 break;
2820         case 0x258:
2821         case 0x260:
2822                 fp->rate_max = fp->rate_min = 96000;
2823                 break;
2824         default:
2825                 snd_printk(KERN_ERR "unknown sample rate\n");
2826                 kfree(fp);
2827                 return -ENXIO;
2828         }
2829
2830         stream = (fp->endpoint & USB_DIR_IN)
2831                 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
2832         err = add_audio_endpoint(chip, stream, fp);
2833         if (err < 0) {
2834                 kfree(fp);
2835                 return err;
2836         }
2837         usb_set_interface(chip->dev, fp->iface, 0);
2838         return 0;
2839 }
2840
2841 /*
2842  * Create a stream for an Edirol UA-1000 interface.
2843  */
2844 static int create_ua1000_quirk(snd_usb_audio_t *chip,
2845                                struct usb_interface *iface,
2846                                const snd_usb_audio_quirk_t *quirk)
2847 {
2848         static const struct audioformat ua1000_format = {
2849                 .format = SNDRV_PCM_FORMAT_S32_LE,
2850                 .fmt_type = USB_FORMAT_TYPE_I,
2851                 .altsetting = 1,
2852                 .altset_idx = 1,
2853                 .attributes = 0,
2854                 .rates = SNDRV_PCM_RATE_CONTINUOUS,
2855         };
2856         struct usb_host_interface *alts;
2857         struct usb_interface_descriptor *altsd;
2858         struct audioformat *fp;
2859         int stream, err;
2860
2861         if (iface->num_altsetting != 2)
2862                 return -ENXIO;
2863         alts = &iface->altsetting[1];
2864         altsd = get_iface_desc(alts);
2865         if (alts->extralen != 11 || alts->extra[1] != CS_AUDIO_INTERFACE ||
2866             altsd->bNumEndpoints != 1)
2867                 return -ENXIO;
2868
2869         fp = kmalloc(sizeof(*fp), GFP_KERNEL);
2870         if (!fp)
2871                 return -ENOMEM;
2872         memcpy(fp, &ua1000_format, sizeof(*fp));
2873
2874         fp->channels = alts->extra[4];
2875         fp->iface = altsd->bInterfaceNumber;
2876         fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
2877         fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
2878         fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2879         fp->rate_max = fp->rate_min = combine_triple(&alts->extra[8]);
2880
2881         stream = (fp->endpoint & USB_DIR_IN)
2882                 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
2883         err = add_audio_endpoint(chip, stream, fp);
2884         if (err < 0) {
2885                 kfree(fp);
2886                 return err;
2887         }
2888         /* FIXME: playback must be synchronized to capture */
2889         usb_set_interface(chip->dev, fp->iface, 0);
2890         return 0;
2891 }
2892
2893 static int snd_usb_create_quirk(snd_usb_audio_t *chip,
2894                                 struct usb_interface *iface,
2895                                 const snd_usb_audio_quirk_t *quirk);
2896
2897 /*
2898  * handle the quirks for the contained interfaces
2899  */
2900 static int create_composite_quirk(snd_usb_audio_t *chip,
2901                                   struct usb_interface *iface,
2902                                   const snd_usb_audio_quirk_t *quirk)
2903 {
2904         int probed_ifnum = get_iface_desc(iface->altsetting)->bInterfaceNumber;
2905         int err;
2906
2907         for (quirk = quirk->data; quirk->ifnum >= 0; ++quirk) {
2908                 iface = usb_ifnum_to_if(chip->dev, quirk->ifnum);
2909                 if (!iface)
2910                         continue;
2911                 if (quirk->ifnum != probed_ifnum &&
2912                     usb_interface_claimed(iface))
2913                         continue;
2914                 err = snd_usb_create_quirk(chip, iface, quirk);
2915                 if (err < 0)
2916                         return err;
2917                 if (quirk->ifnum != probed_ifnum)
2918                         usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1L);
2919         }
2920         return 0;
2921 }
2922
2923 static int ignore_interface_quirk(snd_usb_audio_t *chip,
2924                                   struct usb_interface *iface,
2925                                   const snd_usb_audio_quirk_t *quirk)
2926 {
2927         return 0;
2928 }
2929
2930
2931 /*
2932  * boot quirks
2933  */
2934
2935 #define EXTIGY_FIRMWARE_SIZE_OLD 794
2936 #define EXTIGY_FIRMWARE_SIZE_NEW 483
2937
2938 static int snd_usb_extigy_boot_quirk(struct usb_device *dev, struct usb_interface *intf)
2939 {
2940         struct usb_host_config *config = dev->actconfig;
2941         int err;
2942
2943         if (le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_OLD ||
2944             le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_NEW) {
2945                 snd_printdd("sending Extigy boot sequence...\n");
2946                 /* Send message to force it to reconnect with full interface. */
2947                 err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev,0),
2948                                       0x10, 0x43, 0x0001, 0x000a, NULL, 0, 1000);
2949                 if (err < 0) snd_printdd("error sending boot message: %d\n", err);
2950                 err = usb_get_descriptor(dev, USB_DT_DEVICE, 0,
2951                                 &dev->descriptor, sizeof(dev->descriptor));
2952                 config = dev->actconfig;
2953                 if (err < 0) snd_printdd("error usb_get_descriptor: %d\n", err);
2954                 err = usb_reset_configuration(dev);
2955                 if (err < 0) snd_printdd("error usb_reset_configuration: %d\n", err);
2956                 snd_printdd("extigy_boot: new boot length = %d\n",
2957                             le16_to_cpu(get_cfg_desc(config)->wTotalLength));
2958                 return -ENODEV; /* quit this anyway */
2959         }
2960         return 0;
2961 }
2962
2963 static int snd_usb_audigy2nx_boot_quirk(struct usb_device *dev)
2964 {
2965         u8 buf = 1;
2966
2967         snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 0x2a,
2968                         USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
2969                         0, 0, &buf, 1, 1000);
2970         if (buf == 0) {
2971                 snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0x29,
2972                                 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
2973                                 1, 2000, NULL, 0, 1000);
2974                 return -ENODEV;
2975         }
2976         return 0;
2977 }
2978
2979
2980 /*
2981  * audio-interface quirks
2982  *
2983  * returns zero if no standard audio/MIDI parsing is needed.
2984  * returns a postive value if standard audio/midi interfaces are parsed
2985  * after this.
2986  * returns a negative value at error.
2987  */
2988 static int snd_usb_create_quirk(snd_usb_audio_t *chip,
2989                                 struct usb_interface *iface,
2990                                 const snd_usb_audio_quirk_t *quirk)
2991 {
2992         typedef int (*quirk_func_t)(snd_usb_audio_t *, struct usb_interface *,
2993                                     const snd_usb_audio_quirk_t *);
2994         static const quirk_func_t quirk_funcs[] = {
2995                 [QUIRK_IGNORE_INTERFACE] = ignore_interface_quirk,
2996                 [QUIRK_COMPOSITE] = create_composite_quirk,
2997                 [QUIRK_MIDI_STANDARD_INTERFACE] = snd_usb_create_midi_interface,
2998                 [QUIRK_MIDI_FIXED_ENDPOINT] = snd_usb_create_midi_interface,
2999                 [QUIRK_MIDI_YAMAHA] = snd_usb_create_midi_interface,
3000                 [QUIRK_MIDI_MIDIMAN] = snd_usb_create_midi_interface,
3001                 [QUIRK_MIDI_NOVATION] = snd_usb_create_midi_interface,
3002                 [QUIRK_MIDI_RAW] = snd_usb_create_midi_interface,
3003                 [QUIRK_MIDI_EMAGIC] = snd_usb_create_midi_interface,
3004                 [QUIRK_MIDI_MIDITECH] = snd_usb_create_midi_interface,
3005                 [QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_interface_quirk,
3006                 [QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
3007                 [QUIRK_AUDIO_EDIROL_UA700_UA25] = create_ua700_ua25_quirk,
3008                 [QUIRK_AUDIO_EDIROL_UA1000] = create_ua1000_quirk,
3009         };
3010
3011         if (quirk->type < QUIRK_TYPE_COUNT) {
3012                 return quirk_funcs[quirk->type](chip, iface, quirk);
3013         } else {
3014                 snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
3015                 return -ENXIO;
3016         }
3017 }
3018
3019
3020 /*
3021  * common proc files to show the usb device info
3022  */
3023 static void proc_audio_usbbus_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
3024 {
3025         snd_usb_audio_t *chip = entry->private_data;
3026         if (! chip->shutdown)
3027                 snd_iprintf(buffer, "%03d/%03d\n", chip->dev->bus->busnum, chip->dev->devnum);
3028 }
3029
3030 static void proc_audio_usbid_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
3031 {
3032         snd_usb_audio_t *chip = entry->private_data;
3033         if (! chip->shutdown)
3034                 snd_iprintf(buffer, "%04x:%04x\n", 
3035                             USB_ID_VENDOR(chip->usb_id),
3036                             USB_ID_PRODUCT(chip->usb_id));
3037 }
3038
3039 static void snd_usb_audio_create_proc(snd_usb_audio_t *chip)
3040 {
3041         snd_info_entry_t *entry;
3042         if (! snd_card_proc_new(chip->card, "usbbus", &entry))
3043                 snd_info_set_text_ops(entry, chip, 1024, proc_audio_usbbus_read);
3044         if (! snd_card_proc_new(chip->card, "usbid", &entry))
3045                 snd_info_set_text_ops(entry, chip, 1024, proc_audio_usbid_read);
3046 }
3047
3048 /*
3049  * free the chip instance
3050  *
3051  * here we have to do not much, since pcm and controls are already freed
3052  *
3053  */
3054
3055 static int snd_usb_audio_free(snd_usb_audio_t *chip)
3056 {
3057         kfree(chip);
3058         return 0;
3059 }
3060
3061 static int snd_usb_audio_dev_free(snd_device_t *device)
3062 {
3063         snd_usb_audio_t *chip = device->device_data;
3064         return snd_usb_audio_free(chip);
3065 }
3066
3067
3068 /*
3069  * create a chip instance and set its names.
3070  */
3071 static int snd_usb_audio_create(struct usb_device *dev, int idx,
3072                                 const snd_usb_audio_quirk_t *quirk,
3073                                 snd_usb_audio_t **rchip)
3074 {
3075         snd_card_t *card;
3076         snd_usb_audio_t *chip;
3077         int err, len;
3078         char component[14];
3079         static snd_device_ops_t ops = {
3080                 .dev_free =     snd_usb_audio_dev_free,
3081         };
3082
3083         *rchip = NULL;
3084
3085         if (snd_usb_get_speed(dev) != USB_SPEED_FULL &&
3086             snd_usb_get_speed(dev) != USB_SPEED_HIGH) {
3087                 snd_printk(KERN_ERR "unknown device speed %d\n", snd_usb_get_speed(dev));
3088                 return -ENXIO;
3089         }
3090
3091         card = snd_card_new(index[idx], id[idx], THIS_MODULE, 0);
3092         if (card == NULL) {
3093                 snd_printk(KERN_ERR "cannot create card instance %d\n", idx);
3094                 return -ENOMEM;
3095         }
3096
3097         chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
3098         if (! chip) {
3099                 snd_card_free(card);
3100                 return -ENOMEM;
3101         }
3102
3103         chip->index = idx;
3104         chip->dev = dev;
3105         chip->card = card;
3106         chip->usb_id = USB_ID(le16_to_cpu(dev->descriptor.idVendor),
3107                               le16_to_cpu(dev->descriptor.idProduct));
3108         INIT_LIST_HEAD(&chip->pcm_list);
3109         INIT_LIST_HEAD(&chip->midi_list);
3110         INIT_LIST_HEAD(&chip->mixer_list);
3111
3112         if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
3113                 snd_usb_audio_free(chip);
3114                 snd_card_free(card);
3115                 return err;
3116         }
3117
3118         strcpy(card->driver, "USB-Audio");
3119         sprintf(component, "USB%04x:%04x",
3120                 USB_ID_VENDOR(chip->usb_id), USB_ID_PRODUCT(chip->usb_id));
3121         snd_component_add(card, component);
3122
3123         /* retrieve the device string as shortname */
3124         if (quirk && quirk->product_name) {
3125                 strlcpy(card->shortname, quirk->product_name, sizeof(card->shortname));
3126         } else {
3127                 if (!dev->descriptor.iProduct ||
3128                     usb_string(dev, dev->descriptor.iProduct,
3129                                card->shortname, sizeof(card->shortname)) <= 0) {
3130                         /* no name available from anywhere, so use ID */
3131                         sprintf(card->shortname, "USB Device %#04x:%#04x",
3132                                 USB_ID_VENDOR(chip->usb_id),
3133                                 USB_ID_PRODUCT(chip->usb_id));
3134                 }
3135         }
3136
3137         /* retrieve the vendor and device strings as longname */
3138         if (quirk && quirk->vendor_name) {
3139                 len = strlcpy(card->longname, quirk->vendor_name, sizeof(card->longname));
3140         } else {
3141                 if (dev->descriptor.iManufacturer)
3142                         len = usb_string(dev, dev->descriptor.iManufacturer,
3143                                          card->longname, sizeof(card->longname));
3144                 else
3145                         len = 0;
3146                 /* we don't really care if there isn't any vendor string */
3147         }
3148         if (len > 0)
3149                 strlcat(card->longname, " ", sizeof(card->longname));
3150
3151         strlcat(card->longname, card->shortname, sizeof(card->longname));
3152
3153         len = strlcat(card->longname, " at ", sizeof(card->longname));
3154
3155         if (len < sizeof(card->longname))
3156                 usb_make_path(dev, card->longname + len, sizeof(card->longname) - len);
3157
3158         strlcat(card->longname,
3159                 snd_usb_get_speed(dev) == USB_SPEED_FULL ? ", full speed" : ", high speed",
3160                 sizeof(card->longname));
3161
3162         snd_usb_audio_create_proc(chip);
3163
3164         *rchip = chip;
3165         return 0;
3166 }
3167
3168
3169 /*
3170  * probe the active usb device
3171  *
3172  * note that this can be called multiple times per a device, when it
3173  * includes multiple audio control interfaces.
3174  *
3175  * thus we check the usb device pointer and creates the card instance
3176  * only at the first time.  the successive calls of this function will
3177  * append the pcm interface to the corresponding card.
3178  */
3179 static void *snd_usb_audio_probe(struct usb_device *dev,
3180                                  struct usb_interface *intf,
3181                                  const struct usb_device_id *usb_id)
3182 {
3183         struct usb_host_config *config = dev->actconfig;
3184         const snd_usb_audio_quirk_t *quirk = (const snd_usb_audio_quirk_t *)usb_id->driver_info;
3185         int i, err;
3186         snd_usb_audio_t *chip;
3187         struct usb_host_interface *alts;
3188         int ifnum;
3189         u32 id;
3190
3191         alts = &intf->altsetting[0];
3192         ifnum = get_iface_desc(alts)->bInterfaceNumber;
3193         id = USB_ID(le16_to_cpu(dev->descriptor.idVendor),
3194                     le16_to_cpu(dev->descriptor.idProduct));
3195
3196         if (quirk && quirk->ifnum >= 0 && ifnum != quirk->ifnum)
3197                 goto __err_val;
3198
3199         /* SB Extigy needs special boot-up sequence */
3200         /* if more models come, this will go to the quirk list. */
3201         if (id == USB_ID(0x041e, 0x3000)) {
3202                 if (snd_usb_extigy_boot_quirk(dev, intf) < 0)
3203                         goto __err_val;
3204                 config = dev->actconfig;
3205         }
3206         /* SB Audigy 2 NX needs its own boot-up magic, too */
3207         if (id == USB_ID(0x041e, 0x3020)) {
3208                 if (snd_usb_audigy2nx_boot_quirk(dev) < 0)
3209                         goto __err_val;
3210         }
3211
3212         /*
3213          * found a config.  now register to ALSA
3214          */