ALSA: jack: Unregister input device at disconnection
[sfrench/cifs-2.6.git] / sound / usb / quirks.c
1 /*
2  *   This program is free software; you can redistribute it and/or modify
3  *   it under the terms of the GNU General Public License as published by
4  *   the Free Software Foundation; either version 2 of the License, or
5  *   (at your option) any later version.
6  *
7  *   This program is distributed in the hope that it will be useful,
8  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *   GNU General Public License for more details.
11  *
12  *   You should have received a copy of the GNU General Public License
13  *   along with this program; if not, write to the Free Software
14  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
15  */
16
17 #include <linux/init.h>
18 #include <linux/slab.h>
19 #include <linux/usb.h>
20 #include <linux/usb/audio.h>
21 #include <linux/usb/midi.h>
22
23 #include <sound/control.h>
24 #include <sound/core.h>
25 #include <sound/info.h>
26 #include <sound/pcm.h>
27
28 #include "usbaudio.h"
29 #include "card.h"
30 #include "mixer.h"
31 #include "mixer_quirks.h"
32 #include "midi.h"
33 #include "quirks.h"
34 #include "helper.h"
35 #include "endpoint.h"
36 #include "pcm.h"
37 #include "clock.h"
38 #include "stream.h"
39
40 /*
41  * handle the quirks for the contained interfaces
42  */
43 static int create_composite_quirk(struct snd_usb_audio *chip,
44                                   struct usb_interface *iface,
45                                   struct usb_driver *driver,
46                                   const struct snd_usb_audio_quirk *quirk)
47 {
48         int probed_ifnum = get_iface_desc(iface->altsetting)->bInterfaceNumber;
49         int err;
50
51         for (quirk = quirk->data; quirk->ifnum >= 0; ++quirk) {
52                 iface = usb_ifnum_to_if(chip->dev, quirk->ifnum);
53                 if (!iface)
54                         continue;
55                 if (quirk->ifnum != probed_ifnum &&
56                     usb_interface_claimed(iface))
57                         continue;
58                 err = snd_usb_create_quirk(chip, iface, driver, quirk);
59                 if (err < 0)
60                         return err;
61                 if (quirk->ifnum != probed_ifnum)
62                         usb_driver_claim_interface(driver, iface, (void *)-1L);
63         }
64         return 0;
65 }
66
67 static int ignore_interface_quirk(struct snd_usb_audio *chip,
68                                   struct usb_interface *iface,
69                                   struct usb_driver *driver,
70                                   const struct snd_usb_audio_quirk *quirk)
71 {
72         return 0;
73 }
74
75
76 /*
77  * Allow alignment on audio sub-slot (channel samples) rather than
78  * on audio slots (audio frames)
79  */
80 static int create_align_transfer_quirk(struct snd_usb_audio *chip,
81                                        struct usb_interface *iface,
82                                        struct usb_driver *driver,
83                                        const struct snd_usb_audio_quirk *quirk)
84 {
85         chip->txfr_quirk = 1;
86         return 1;       /* Continue with creating streams and mixer */
87 }
88
89 static int create_any_midi_quirk(struct snd_usb_audio *chip,
90                                  struct usb_interface *intf,
91                                  struct usb_driver *driver,
92                                  const struct snd_usb_audio_quirk *quirk)
93 {
94         return snd_usbmidi_create(chip->card, intf, &chip->midi_list, quirk);
95 }
96
97 /*
98  * create a stream for an interface with proper descriptors
99  */
100 static int create_standard_audio_quirk(struct snd_usb_audio *chip,
101                                        struct usb_interface *iface,
102                                        struct usb_driver *driver,
103                                        const struct snd_usb_audio_quirk *quirk)
104 {
105         struct usb_host_interface *alts;
106         struct usb_interface_descriptor *altsd;
107         int err;
108
109         alts = &iface->altsetting[0];
110         altsd = get_iface_desc(alts);
111         err = snd_usb_parse_audio_interface(chip, altsd->bInterfaceNumber);
112         if (err < 0) {
113                 snd_printk(KERN_ERR "cannot setup if %d: error %d\n",
114                            altsd->bInterfaceNumber, err);
115                 return err;
116         }
117         /* reset the current interface */
118         usb_set_interface(chip->dev, altsd->bInterfaceNumber, 0);
119         return 0;
120 }
121
122 /*
123  * create a stream for an endpoint/altsetting without proper descriptors
124  */
125 static int create_fixed_stream_quirk(struct snd_usb_audio *chip,
126                                      struct usb_interface *iface,
127                                      struct usb_driver *driver,
128                                      const struct snd_usb_audio_quirk *quirk)
129 {
130         struct audioformat *fp;
131         struct usb_host_interface *alts;
132         struct usb_interface_descriptor *altsd;
133         int stream, err;
134         unsigned *rate_table = NULL;
135
136         fp = kmemdup(quirk->data, sizeof(*fp), GFP_KERNEL);
137         if (!fp) {
138                 snd_printk(KERN_ERR "cannot memdup\n");
139                 return -ENOMEM;
140         }
141         if (fp->nr_rates > MAX_NR_RATES) {
142                 kfree(fp);
143                 return -EINVAL;
144         }
145         if (fp->nr_rates > 0) {
146                 rate_table = kmemdup(fp->rate_table,
147                                      sizeof(int) * fp->nr_rates, GFP_KERNEL);
148                 if (!rate_table) {
149                         kfree(fp);
150                         return -ENOMEM;
151                 }
152                 fp->rate_table = rate_table;
153         }
154
155         stream = (fp->endpoint & USB_DIR_IN)
156                 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
157         err = snd_usb_add_audio_stream(chip, stream, fp);
158         if (err < 0) {
159                 kfree(fp);
160                 kfree(rate_table);
161                 return err;
162         }
163         if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
164             fp->altset_idx >= iface->num_altsetting) {
165                 kfree(fp);
166                 kfree(rate_table);
167                 return -EINVAL;
168         }
169         alts = &iface->altsetting[fp->altset_idx];
170         altsd = get_iface_desc(alts);
171         fp->protocol = altsd->bInterfaceProtocol;
172
173         if (fp->datainterval == 0)
174                 fp->datainterval = snd_usb_parse_datainterval(chip, alts);
175         if (fp->maxpacksize == 0)
176                 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
177         usb_set_interface(chip->dev, fp->iface, 0);
178         snd_usb_init_pitch(chip, fp->iface, alts, fp);
179         snd_usb_init_sample_rate(chip, fp->iface, alts, fp, fp->rate_max);
180         return 0;
181 }
182
183 static int create_auto_pcm_quirk(struct snd_usb_audio *chip,
184                                  struct usb_interface *iface,
185                                  struct usb_driver *driver)
186 {
187         struct usb_host_interface *alts;
188         struct usb_interface_descriptor *altsd;
189         struct usb_endpoint_descriptor *epd;
190         struct uac1_as_header_descriptor *ashd;
191         struct uac_format_type_i_discrete_descriptor *fmtd;
192
193         /*
194          * Most Roland/Yamaha audio streaming interfaces have more or less
195          * standard descriptors, but older devices might lack descriptors, and
196          * future ones might change, so ensure that we fail silently if the
197          * interface doesn't look exactly right.
198          */
199
200         /* must have a non-zero altsetting for streaming */
201         if (iface->num_altsetting < 2)
202                 return -ENODEV;
203         alts = &iface->altsetting[1];
204         altsd = get_iface_desc(alts);
205
206         /* must have an isochronous endpoint for streaming */
207         if (altsd->bNumEndpoints < 1)
208                 return -ENODEV;
209         epd = get_endpoint(alts, 0);
210         if (!usb_endpoint_xfer_isoc(epd))
211                 return -ENODEV;
212
213         /* must have format descriptors */
214         ashd = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL,
215                                        UAC_AS_GENERAL);
216         fmtd = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL,
217                                        UAC_FORMAT_TYPE);
218         if (!ashd || ashd->bLength < 7 ||
219             !fmtd || fmtd->bLength < 8)
220                 return -ENODEV;
221
222         return create_standard_audio_quirk(chip, iface, driver, NULL);
223 }
224
225 static int create_yamaha_midi_quirk(struct snd_usb_audio *chip,
226                                     struct usb_interface *iface,
227                                     struct usb_driver *driver,
228                                     struct usb_host_interface *alts)
229 {
230         static const struct snd_usb_audio_quirk yamaha_midi_quirk = {
231                 .type = QUIRK_MIDI_YAMAHA
232         };
233         struct usb_midi_in_jack_descriptor *injd;
234         struct usb_midi_out_jack_descriptor *outjd;
235
236         /* must have some valid jack descriptors */
237         injd = snd_usb_find_csint_desc(alts->extra, alts->extralen,
238                                        NULL, USB_MS_MIDI_IN_JACK);
239         outjd = snd_usb_find_csint_desc(alts->extra, alts->extralen,
240                                         NULL, USB_MS_MIDI_OUT_JACK);
241         if (!injd && !outjd)
242                 return -ENODEV;
243         if (injd && (injd->bLength < 5 ||
244                      (injd->bJackType != USB_MS_EMBEDDED &&
245                       injd->bJackType != USB_MS_EXTERNAL)))
246                 return -ENODEV;
247         if (outjd && (outjd->bLength < 6 ||
248                       (outjd->bJackType != USB_MS_EMBEDDED &&
249                        outjd->bJackType != USB_MS_EXTERNAL)))
250                 return -ENODEV;
251         return create_any_midi_quirk(chip, iface, driver, &yamaha_midi_quirk);
252 }
253
254 static int create_roland_midi_quirk(struct snd_usb_audio *chip,
255                                     struct usb_interface *iface,
256                                     struct usb_driver *driver,
257                                     struct usb_host_interface *alts)
258 {
259         static const struct snd_usb_audio_quirk roland_midi_quirk = {
260                 .type = QUIRK_MIDI_ROLAND
261         };
262         u8 *roland_desc = NULL;
263
264         /* might have a vendor-specific descriptor <06 24 F1 02 ...> */
265         for (;;) {
266                 roland_desc = snd_usb_find_csint_desc(alts->extra,
267                                                       alts->extralen,
268                                                       roland_desc, 0xf1);
269                 if (!roland_desc)
270                         return -ENODEV;
271                 if (roland_desc[0] < 6 || roland_desc[3] != 2)
272                         continue;
273                 return create_any_midi_quirk(chip, iface, driver,
274                                              &roland_midi_quirk);
275         }
276 }
277
278 static int create_std_midi_quirk(struct snd_usb_audio *chip,
279                                  struct usb_interface *iface,
280                                  struct usb_driver *driver,
281                                  struct usb_host_interface *alts)
282 {
283         struct usb_ms_header_descriptor *mshd;
284         struct usb_ms_endpoint_descriptor *msepd;
285
286         /* must have the MIDIStreaming interface header descriptor*/
287         mshd = (struct usb_ms_header_descriptor *)alts->extra;
288         if (alts->extralen < 7 ||
289             mshd->bLength < 7 ||
290             mshd->bDescriptorType != USB_DT_CS_INTERFACE ||
291             mshd->bDescriptorSubtype != USB_MS_HEADER)
292                 return -ENODEV;
293         /* must have the MIDIStreaming endpoint descriptor*/
294         msepd = (struct usb_ms_endpoint_descriptor *)alts->endpoint[0].extra;
295         if (alts->endpoint[0].extralen < 4 ||
296             msepd->bLength < 4 ||
297             msepd->bDescriptorType != USB_DT_CS_ENDPOINT ||
298             msepd->bDescriptorSubtype != UAC_MS_GENERAL ||
299             msepd->bNumEmbMIDIJack < 1 ||
300             msepd->bNumEmbMIDIJack > 16)
301                 return -ENODEV;
302
303         return create_any_midi_quirk(chip, iface, driver, NULL);
304 }
305
306 static int create_auto_midi_quirk(struct snd_usb_audio *chip,
307                                   struct usb_interface *iface,
308                                   struct usb_driver *driver)
309 {
310         struct usb_host_interface *alts;
311         struct usb_interface_descriptor *altsd;
312         struct usb_endpoint_descriptor *epd;
313         int err;
314
315         alts = &iface->altsetting[0];
316         altsd = get_iface_desc(alts);
317
318         /* must have at least one bulk/interrupt endpoint for streaming */
319         if (altsd->bNumEndpoints < 1)
320                 return -ENODEV;
321         epd = get_endpoint(alts, 0);
322         if (!usb_endpoint_xfer_bulk(epd) &&
323             !usb_endpoint_xfer_int(epd))
324                 return -ENODEV;
325
326         switch (USB_ID_VENDOR(chip->usb_id)) {
327         case 0x0499: /* Yamaha */
328                 err = create_yamaha_midi_quirk(chip, iface, driver, alts);
329                 if (err != -ENODEV)
330                         return err;
331                 break;
332         case 0x0582: /* Roland */
333                 err = create_roland_midi_quirk(chip, iface, driver, alts);
334                 if (err != -ENODEV)
335                         return err;
336                 break;
337         }
338
339         return create_std_midi_quirk(chip, iface, driver, alts);
340 }
341
342 static int create_autodetect_quirk(struct snd_usb_audio *chip,
343                                    struct usb_interface *iface,
344                                    struct usb_driver *driver)
345 {
346         int err;
347
348         err = create_auto_pcm_quirk(chip, iface, driver);
349         if (err == -ENODEV)
350                 err = create_auto_midi_quirk(chip, iface, driver);
351         return err;
352 }
353
354 static int create_autodetect_quirks(struct snd_usb_audio *chip,
355                                     struct usb_interface *iface,
356                                     struct usb_driver *driver,
357                                     const struct snd_usb_audio_quirk *quirk)
358 {
359         int probed_ifnum = get_iface_desc(iface->altsetting)->bInterfaceNumber;
360         int ifcount, ifnum, err;
361
362         err = create_autodetect_quirk(chip, iface, driver);
363         if (err < 0)
364                 return err;
365
366         /*
367          * ALSA PCM playback/capture devices cannot be registered in two steps,
368          * so we have to claim the other corresponding interface here.
369          */
370         ifcount = chip->dev->actconfig->desc.bNumInterfaces;
371         for (ifnum = 0; ifnum < ifcount; ifnum++) {
372                 if (ifnum == probed_ifnum || quirk->ifnum >= 0)
373                         continue;
374                 iface = usb_ifnum_to_if(chip->dev, ifnum);
375                 if (!iface ||
376                     usb_interface_claimed(iface) ||
377                     get_iface_desc(iface->altsetting)->bInterfaceClass !=
378                                                         USB_CLASS_VENDOR_SPEC)
379                         continue;
380
381                 err = create_autodetect_quirk(chip, iface, driver);
382                 if (err >= 0)
383                         usb_driver_claim_interface(driver, iface, (void *)-1L);
384         }
385
386         return 0;
387 }
388
389 /*
390  * Create a stream for an Edirol UA-700/UA-25/UA-4FX interface.  
391  * The only way to detect the sample rate is by looking at wMaxPacketSize.
392  */
393 static int create_uaxx_quirk(struct snd_usb_audio *chip,
394                              struct usb_interface *iface,
395                              struct usb_driver *driver,
396                              const struct snd_usb_audio_quirk *quirk)
397 {
398         static const struct audioformat ua_format = {
399                 .formats = SNDRV_PCM_FMTBIT_S24_3LE,
400                 .channels = 2,
401                 .fmt_type = UAC_FORMAT_TYPE_I,
402                 .altsetting = 1,
403                 .altset_idx = 1,
404                 .rates = SNDRV_PCM_RATE_CONTINUOUS,
405         };
406         struct usb_host_interface *alts;
407         struct usb_interface_descriptor *altsd;
408         struct audioformat *fp;
409         int stream, err;
410
411         /* both PCM and MIDI interfaces have 2 or more altsettings */
412         if (iface->num_altsetting < 2)
413                 return -ENXIO;
414         alts = &iface->altsetting[1];
415         altsd = get_iface_desc(alts);
416
417         if (altsd->bNumEndpoints == 2) {
418                 static const struct snd_usb_midi_endpoint_info ua700_ep = {
419                         .out_cables = 0x0003,
420                         .in_cables  = 0x0003
421                 };
422                 static const struct snd_usb_audio_quirk ua700_quirk = {
423                         .type = QUIRK_MIDI_FIXED_ENDPOINT,
424                         .data = &ua700_ep
425                 };
426                 static const struct snd_usb_midi_endpoint_info uaxx_ep = {
427                         .out_cables = 0x0001,
428                         .in_cables  = 0x0001
429                 };
430                 static const struct snd_usb_audio_quirk uaxx_quirk = {
431                         .type = QUIRK_MIDI_FIXED_ENDPOINT,
432                         .data = &uaxx_ep
433                 };
434                 const struct snd_usb_audio_quirk *quirk =
435                         chip->usb_id == USB_ID(0x0582, 0x002b)
436                         ? &ua700_quirk : &uaxx_quirk;
437                 return snd_usbmidi_create(chip->card, iface,
438                                           &chip->midi_list, quirk);
439         }
440
441         if (altsd->bNumEndpoints != 1)
442                 return -ENXIO;
443
444         fp = kmemdup(&ua_format, sizeof(*fp), GFP_KERNEL);
445         if (!fp)
446                 return -ENOMEM;
447
448         fp->iface = altsd->bInterfaceNumber;
449         fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
450         fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
451         fp->datainterval = 0;
452         fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
453
454         switch (fp->maxpacksize) {
455         case 0x120:
456                 fp->rate_max = fp->rate_min = 44100;
457                 break;
458         case 0x138:
459         case 0x140:
460                 fp->rate_max = fp->rate_min = 48000;
461                 break;
462         case 0x258:
463         case 0x260:
464                 fp->rate_max = fp->rate_min = 96000;
465                 break;
466         default:
467                 snd_printk(KERN_ERR "unknown sample rate\n");
468                 kfree(fp);
469                 return -ENXIO;
470         }
471
472         stream = (fp->endpoint & USB_DIR_IN)
473                 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
474         err = snd_usb_add_audio_stream(chip, stream, fp);
475         if (err < 0) {
476                 kfree(fp);
477                 return err;
478         }
479         usb_set_interface(chip->dev, fp->iface, 0);
480         return 0;
481 }
482
483 /*
484  * Create a standard mixer for the specified interface.
485  */
486 static int create_standard_mixer_quirk(struct snd_usb_audio *chip,
487                                        struct usb_interface *iface,
488                                        struct usb_driver *driver,
489                                        const struct snd_usb_audio_quirk *quirk)
490 {
491         if (quirk->ifnum < 0)
492                 return 0;
493
494         return snd_usb_create_mixer(chip, quirk->ifnum, 0);
495 }
496
497 /*
498  * audio-interface quirks
499  *
500  * returns zero if no standard audio/MIDI parsing is needed.
501  * returns a positive value if standard audio/midi interfaces are parsed
502  * after this.
503  * returns a negative value at error.
504  */
505 int snd_usb_create_quirk(struct snd_usb_audio *chip,
506                          struct usb_interface *iface,
507                          struct usb_driver *driver,
508                          const struct snd_usb_audio_quirk *quirk)
509 {
510         typedef int (*quirk_func_t)(struct snd_usb_audio *,
511                                     struct usb_interface *,
512                                     struct usb_driver *,
513                                     const struct snd_usb_audio_quirk *);
514         static const quirk_func_t quirk_funcs[] = {
515                 [QUIRK_IGNORE_INTERFACE] = ignore_interface_quirk,
516                 [QUIRK_COMPOSITE] = create_composite_quirk,
517                 [QUIRK_AUTODETECT] = create_autodetect_quirks,
518                 [QUIRK_MIDI_STANDARD_INTERFACE] = create_any_midi_quirk,
519                 [QUIRK_MIDI_FIXED_ENDPOINT] = create_any_midi_quirk,
520                 [QUIRK_MIDI_YAMAHA] = create_any_midi_quirk,
521                 [QUIRK_MIDI_ROLAND] = create_any_midi_quirk,
522                 [QUIRK_MIDI_MIDIMAN] = create_any_midi_quirk,
523                 [QUIRK_MIDI_NOVATION] = create_any_midi_quirk,
524                 [QUIRK_MIDI_RAW_BYTES] = create_any_midi_quirk,
525                 [QUIRK_MIDI_EMAGIC] = create_any_midi_quirk,
526                 [QUIRK_MIDI_CME] = create_any_midi_quirk,
527                 [QUIRK_MIDI_AKAI] = create_any_midi_quirk,
528                 [QUIRK_MIDI_FTDI] = create_any_midi_quirk,
529                 [QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk,
530                 [QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
531                 [QUIRK_AUDIO_EDIROL_UAXX] = create_uaxx_quirk,
532                 [QUIRK_AUDIO_ALIGN_TRANSFER] = create_align_transfer_quirk,
533                 [QUIRK_AUDIO_STANDARD_MIXER] = create_standard_mixer_quirk,
534         };
535
536         if (quirk->type < QUIRK_TYPE_COUNT) {
537                 return quirk_funcs[quirk->type](chip, iface, driver, quirk);
538         } else {
539                 snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
540                 return -ENXIO;
541         }
542 }
543
544 /*
545  * boot quirks
546  */
547
548 #define EXTIGY_FIRMWARE_SIZE_OLD 794
549 #define EXTIGY_FIRMWARE_SIZE_NEW 483
550
551 static int snd_usb_extigy_boot_quirk(struct usb_device *dev, struct usb_interface *intf)
552 {
553         struct usb_host_config *config = dev->actconfig;
554         int err;
555
556         if (le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_OLD ||
557             le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_NEW) {
558                 snd_printdd("sending Extigy boot sequence...\n");
559                 /* Send message to force it to reconnect with full interface. */
560                 err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev,0),
561                                       0x10, 0x43, 0x0001, 0x000a, NULL, 0);
562                 if (err < 0) snd_printdd("error sending boot message: %d\n", err);
563                 err = usb_get_descriptor(dev, USB_DT_DEVICE, 0,
564                                 &dev->descriptor, sizeof(dev->descriptor));
565                 config = dev->actconfig;
566                 if (err < 0) snd_printdd("error usb_get_descriptor: %d\n", err);
567                 err = usb_reset_configuration(dev);
568                 if (err < 0) snd_printdd("error usb_reset_configuration: %d\n", err);
569                 snd_printdd("extigy_boot: new boot length = %d\n",
570                             le16_to_cpu(get_cfg_desc(config)->wTotalLength));
571                 return -ENODEV; /* quit this anyway */
572         }
573         return 0;
574 }
575
576 static int snd_usb_audigy2nx_boot_quirk(struct usb_device *dev)
577 {
578         u8 buf = 1;
579
580         snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 0x2a,
581                         USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
582                         0, 0, &buf, 1);
583         if (buf == 0) {
584                 snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0x29,
585                                 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
586                                 1, 2000, NULL, 0);
587                 return -ENODEV;
588         }
589         return 0;
590 }
591
592 static int snd_usb_fasttrackpro_boot_quirk(struct usb_device *dev)
593 {
594         int err;
595
596         if (dev->actconfig->desc.bConfigurationValue == 1) {
597                 snd_printk(KERN_INFO "usb-audio: "
598                            "Fast Track Pro switching to config #2\n");
599                 /* This function has to be available by the usb core module.
600                  * if it is not avialable the boot quirk has to be left out
601                  * and the configuration has to be set by udev or hotplug
602                  * rules
603                  */
604                 err = usb_driver_set_configuration(dev, 2);
605                 if (err < 0)
606                         snd_printdd("error usb_driver_set_configuration: %d\n",
607                                     err);
608                 /* Always return an error, so that we stop creating a device
609                    that will just be destroyed and recreated with a new
610                    configuration */
611                 return -ENODEV;
612         } else
613                 snd_printk(KERN_INFO "usb-audio: Fast Track Pro config OK\n");
614
615         return 0;
616 }
617
618 /*
619  * C-Media CM106/CM106+ have four 16-bit internal registers that are nicely
620  * documented in the device's data sheet.
621  */
622 static int snd_usb_cm106_write_int_reg(struct usb_device *dev, int reg, u16 value)
623 {
624         u8 buf[4];
625         buf[0] = 0x20;
626         buf[1] = value & 0xff;
627         buf[2] = (value >> 8) & 0xff;
628         buf[3] = reg;
629         return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), USB_REQ_SET_CONFIGURATION,
630                                USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
631                                0, 0, &buf, 4);
632 }
633
634 static int snd_usb_cm106_boot_quirk(struct usb_device *dev)
635 {
636         /*
637          * Enable line-out driver mode, set headphone source to front
638          * channels, enable stereo mic.
639          */
640         return snd_usb_cm106_write_int_reg(dev, 2, 0x8004);
641 }
642
643 /*
644  * C-Media CM6206 is based on CM106 with two additional
645  * registers that are not documented in the data sheet.
646  * Values here are chosen based on sniffing USB traffic
647  * under Windows.
648  */
649 static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
650 {
651         int err  = 0, reg;
652         int val[] = {0x2004, 0x3000, 0xf800, 0x143f, 0x0000, 0x3000};
653
654         for (reg = 0; reg < ARRAY_SIZE(val); reg++) {
655                 err = snd_usb_cm106_write_int_reg(dev, reg, val[reg]);
656                 if (err < 0)
657                         return err;
658         }
659
660         return err;
661 }
662
663 /*
664  * Novation Twitch DJ controller
665  */
666 static int snd_usb_twitch_boot_quirk(struct usb_device *dev)
667 {
668         /* preemptively set up the device because otherwise the
669          * raw MIDI endpoints are not active */
670         usb_set_interface(dev, 0, 1);
671         return 0;
672 }
673
674 /*
675  * This call will put the synth in "USB send" mode, i.e it will send MIDI
676  * messages through USB (this is disabled at startup). The synth will
677  * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB
678  * sign on its LCD. Values here are chosen based on sniffing USB traffic
679  * under Windows.
680  */
681 static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
682 {
683         int err, actual_length;
684
685         /* "midi send" enable */
686         static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
687
688         void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
689         if (!buf)
690                 return -ENOMEM;
691         err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
692                         ARRAY_SIZE(seq), &actual_length, 1000);
693         kfree(buf);
694         if (err < 0)
695                 return err;
696
697         return 0;
698 }
699
700 /*
701  * Some sound cards from Native Instruments are in fact compliant to the USB
702  * audio standard of version 2 and other approved USB standards, even though
703  * they come up as vendor-specific device when first connected.
704  *
705  * However, they can be told to come up with a new set of descriptors
706  * upon their next enumeration, and the interfaces announced by the new
707  * descriptors will then be handled by the kernel's class drivers. As the
708  * product ID will also change, no further checks are required.
709  */
710
711 static int snd_usb_nativeinstruments_boot_quirk(struct usb_device *dev)
712 {
713         int ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
714                                   0xaf, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
715                                   1, 0, NULL, 0, 1000);
716
717         if (ret < 0)
718                 return ret;
719
720         usb_reset_device(dev);
721
722         /* return -EAGAIN, so the creation of an audio interface for this
723          * temporary device is aborted. The device will reconnect with a
724          * new product ID */
725         return -EAGAIN;
726 }
727
728 static void mbox2_setup_48_24_magic(struct usb_device *dev)
729 {
730         u8 srate[3];
731         u8 temp[12];
732
733         /* Choose 48000Hz permanently */
734         srate[0] = 0x80;
735         srate[1] = 0xbb;
736         srate[2] = 0x00;
737
738         /* Send the magic! */
739         snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
740                 0x01, 0x22, 0x0100, 0x0085, &temp, 0x0003);
741         snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
742                 0x81, 0xa2, 0x0100, 0x0085, &srate, 0x0003);
743         snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
744                 0x81, 0xa2, 0x0100, 0x0086, &srate, 0x0003);
745         snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
746                 0x81, 0xa2, 0x0100, 0x0003, &srate, 0x0003);
747         return;
748 }
749
750 /* Digidesign Mbox 2 needs to load firmware onboard
751  * and driver must wait a few seconds for initialisation.
752  */
753
754 #define MBOX2_FIRMWARE_SIZE    646
755 #define MBOX2_BOOT_LOADING     0x01 /* Hard coded into the device */
756 #define MBOX2_BOOT_READY       0x02 /* Hard coded into the device */
757
758 static int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
759 {
760         struct usb_host_config *config = dev->actconfig;
761         int err;
762         u8 bootresponse[0x12];
763         int fwsize;
764         int count;
765
766         fwsize = le16_to_cpu(get_cfg_desc(config)->wTotalLength);
767
768         if (fwsize != MBOX2_FIRMWARE_SIZE) {
769                 snd_printk(KERN_ERR "usb-audio: Invalid firmware size=%d.\n", fwsize);
770                 return -ENODEV;
771         }
772
773         snd_printd("usb-audio: Sending Digidesign Mbox 2 boot sequence...\n");
774
775         count = 0;
776         bootresponse[0] = MBOX2_BOOT_LOADING;
777         while ((bootresponse[0] == MBOX2_BOOT_LOADING) && (count < 10)) {
778                 msleep(500); /* 0.5 second delay */
779                 snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
780                         /* Control magic - load onboard firmware */
781                         0x85, 0xc0, 0x0001, 0x0000, &bootresponse, 0x0012);
782                 if (bootresponse[0] == MBOX2_BOOT_READY)
783                         break;
784                 snd_printd("usb-audio: device not ready, resending boot sequence...\n");
785                 count++;
786         }
787
788         if (bootresponse[0] != MBOX2_BOOT_READY) {
789                 snd_printk(KERN_ERR "usb-audio: Unknown bootresponse=%d, or timed out, ignoring device.\n", bootresponse[0]);
790                 return -ENODEV;
791         }
792
793         snd_printdd("usb-audio: device initialised!\n");
794
795         err = usb_get_descriptor(dev, USB_DT_DEVICE, 0,
796                 &dev->descriptor, sizeof(dev->descriptor));
797         config = dev->actconfig;
798         if (err < 0)
799                 snd_printd("error usb_get_descriptor: %d\n", err);
800
801         err = usb_reset_configuration(dev);
802         if (err < 0)
803                 snd_printd("error usb_reset_configuration: %d\n", err);
804         snd_printdd("mbox2_boot: new boot length = %d\n",
805                 le16_to_cpu(get_cfg_desc(config)->wTotalLength));
806
807         mbox2_setup_48_24_magic(dev);
808
809         snd_printk(KERN_INFO "usb-audio: Digidesign Mbox 2: 24bit 48kHz");
810
811         return 0; /* Successful boot */
812 }
813
814 /*
815  * Setup quirks
816  */
817 #define MAUDIO_SET              0x01 /* parse device_setup */
818 #define MAUDIO_SET_COMPATIBLE   0x80 /* use only "win-compatible" interfaces */
819 #define MAUDIO_SET_DTS          0x02 /* enable DTS Digital Output */
820 #define MAUDIO_SET_96K          0x04 /* 48-96KHz rate if set, 8-48KHz otherwise */
821 #define MAUDIO_SET_24B          0x08 /* 24bits sample if set, 16bits otherwise */
822 #define MAUDIO_SET_DI           0x10 /* enable Digital Input */
823 #define MAUDIO_SET_MASK         0x1f /* bit mask for setup value */
824 #define MAUDIO_SET_24B_48K_DI    0x19 /* 24bits+48KHz+Digital Input */
825 #define MAUDIO_SET_24B_48K_NOTDI 0x09 /* 24bits+48KHz+No Digital Input */
826 #define MAUDIO_SET_16B_48K_DI    0x11 /* 16bits+48KHz+Digital Input */
827 #define MAUDIO_SET_16B_48K_NOTDI 0x01 /* 16bits+48KHz+No Digital Input */
828
829 static int quattro_skip_setting_quirk(struct snd_usb_audio *chip,
830                                       int iface, int altno)
831 {
832         /* Reset ALL ifaces to 0 altsetting.
833          * Call it for every possible altsetting of every interface.
834          */
835         usb_set_interface(chip->dev, iface, 0);
836         if (chip->setup & MAUDIO_SET) {
837                 if (chip->setup & MAUDIO_SET_COMPATIBLE) {
838                         if (iface != 1 && iface != 2)
839                                 return 1; /* skip all interfaces but 1 and 2 */
840                 } else {
841                         unsigned int mask;
842                         if (iface == 1 || iface == 2)
843                                 return 1; /* skip interfaces 1 and 2 */
844                         if ((chip->setup & MAUDIO_SET_96K) && altno != 1)
845                                 return 1; /* skip this altsetting */
846                         mask = chip->setup & MAUDIO_SET_MASK;
847                         if (mask == MAUDIO_SET_24B_48K_DI && altno != 2)
848                                 return 1; /* skip this altsetting */
849                         if (mask == MAUDIO_SET_24B_48K_NOTDI && altno != 3)
850                                 return 1; /* skip this altsetting */
851                         if (mask == MAUDIO_SET_16B_48K_NOTDI && altno != 4)
852                                 return 1; /* skip this altsetting */
853                 }
854         }
855         snd_printdd(KERN_INFO
856                     "using altsetting %d for interface %d config %d\n",
857                     altno, iface, chip->setup);
858         return 0; /* keep this altsetting */
859 }
860
861 static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip,
862                                          int iface,
863                                          int altno)
864 {
865         /* Reset ALL ifaces to 0 altsetting.
866          * Call it for every possible altsetting of every interface.
867          */
868         usb_set_interface(chip->dev, iface, 0);
869
870         if (chip->setup & MAUDIO_SET) {
871                 unsigned int mask;
872                 if ((chip->setup & MAUDIO_SET_DTS) && altno != 6)
873                         return 1; /* skip this altsetting */
874                 if ((chip->setup & MAUDIO_SET_96K) && altno != 1)
875                         return 1; /* skip this altsetting */
876                 mask = chip->setup & MAUDIO_SET_MASK;
877                 if (mask == MAUDIO_SET_24B_48K_DI && altno != 2)
878                         return 1; /* skip this altsetting */
879                 if (mask == MAUDIO_SET_24B_48K_NOTDI && altno != 3)
880                         return 1; /* skip this altsetting */
881                 if (mask == MAUDIO_SET_16B_48K_DI && altno != 4)
882                         return 1; /* skip this altsetting */
883                 if (mask == MAUDIO_SET_16B_48K_NOTDI && altno != 5)
884                         return 1; /* skip this altsetting */
885         }
886
887         return 0; /* keep this altsetting */
888 }
889
890 static int fasttrackpro_skip_setting_quirk(struct snd_usb_audio *chip,
891                                            int iface, int altno)
892 {
893         /* Reset ALL ifaces to 0 altsetting.
894          * Call it for every possible altsetting of every interface.
895          */
896         usb_set_interface(chip->dev, iface, 0);
897
898         /* possible configuration where both inputs and only one output is
899          *used is not supported by the current setup
900          */
901         if (chip->setup & (MAUDIO_SET | MAUDIO_SET_24B)) {
902                 if (chip->setup & MAUDIO_SET_96K) {
903                         if (altno != 3 && altno != 6)
904                                 return 1;
905                 } else if (chip->setup & MAUDIO_SET_DI) {
906                         if (iface == 4)
907                                 return 1; /* no analog input */
908                         if (altno != 2 && altno != 5)
909                                 return 1; /* enable only altsets 2 and 5 */
910                 } else {
911                         if (iface == 5)
912                                 return 1; /* disable digialt input */
913                         if (altno != 2 && altno != 5)
914                                 return 1; /* enalbe only altsets 2 and 5 */
915                 }
916         } else {
917                 /* keep only 16-Bit mode */
918                 if (altno != 1)
919                         return 1;
920         }
921
922         snd_printdd(KERN_INFO
923                     "using altsetting %d for interface %d config %d\n",
924                     altno, iface, chip->setup);
925         return 0; /* keep this altsetting */
926 }
927
928 int snd_usb_apply_interface_quirk(struct snd_usb_audio *chip,
929                                   int iface,
930                                   int altno)
931 {
932         /* audiophile usb: skip altsets incompatible with device_setup */
933         if (chip->usb_id == USB_ID(0x0763, 0x2003))
934                 return audiophile_skip_setting_quirk(chip, iface, altno);
935         /* quattro usb: skip altsets incompatible with device_setup */
936         if (chip->usb_id == USB_ID(0x0763, 0x2001))
937                 return quattro_skip_setting_quirk(chip, iface, altno);
938         /* fasttrackpro usb: skip altsets incompatible with device_setup */
939         if (chip->usb_id == USB_ID(0x0763, 0x2012))
940                 return fasttrackpro_skip_setting_quirk(chip, iface, altno);
941
942         return 0;
943 }
944
945 int snd_usb_apply_boot_quirk(struct usb_device *dev,
946                              struct usb_interface *intf,
947                              const struct snd_usb_audio_quirk *quirk)
948 {
949         u32 id = USB_ID(le16_to_cpu(dev->descriptor.idVendor),
950                         le16_to_cpu(dev->descriptor.idProduct));
951
952         switch (id) {
953         case USB_ID(0x041e, 0x3000):
954                 /* SB Extigy needs special boot-up sequence */
955                 /* if more models come, this will go to the quirk list. */
956                 return snd_usb_extigy_boot_quirk(dev, intf);
957
958         case USB_ID(0x041e, 0x3020):
959                 /* SB Audigy 2 NX needs its own boot-up magic, too */
960                 return snd_usb_audigy2nx_boot_quirk(dev);
961
962         case USB_ID(0x10f5, 0x0200):
963                 /* C-Media CM106 / Turtle Beach Audio Advantage Roadie */
964                 return snd_usb_cm106_boot_quirk(dev);
965
966         case USB_ID(0x0d8c, 0x0102):
967                 /* C-Media CM6206 / CM106-Like Sound Device */
968         case USB_ID(0x0ccd, 0x00b1): /* Terratec Aureon 7.1 USB */
969                 return snd_usb_cm6206_boot_quirk(dev);
970
971         case USB_ID(0x0dba, 0x3000):
972                 /* Digidesign Mbox 2 */
973                 return snd_usb_mbox2_boot_quirk(dev);
974
975         case USB_ID(0x1235, 0x0018):
976                 /* Focusrite Novation Twitch */
977                 return snd_usb_twitch_boot_quirk(dev);
978
979         case USB_ID(0x133e, 0x0815):
980                 /* Access Music VirusTI Desktop */
981                 return snd_usb_accessmusic_boot_quirk(dev);
982
983         case USB_ID(0x17cc, 0x1000): /* Komplete Audio 6 */
984         case USB_ID(0x17cc, 0x1010): /* Traktor Audio 6 */
985         case USB_ID(0x17cc, 0x1020): /* Traktor Audio 10 */
986                 return snd_usb_nativeinstruments_boot_quirk(dev);
987         case USB_ID(0x0763, 0x2012):  /* M-Audio Fast Track Pro USB */
988                 return snd_usb_fasttrackpro_boot_quirk(dev);
989         }
990
991         return 0;
992 }
993
994 /*
995  * check if the device uses big-endian samples
996  */
997 int snd_usb_is_big_endian_format(struct snd_usb_audio *chip, struct audioformat *fp)
998 {
999         /* it depends on altsetting whether the device is big-endian or not */
1000         switch (chip->usb_id) {
1001         case USB_ID(0x0763, 0x2001): /* M-Audio Quattro: captured data only */
1002                 if (fp->altsetting == 2 || fp->altsetting == 3 ||
1003                         fp->altsetting == 5 || fp->altsetting == 6)
1004                         return 1;
1005                 break;
1006         case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
1007                 if (chip->setup == 0x00 ||
1008                         fp->altsetting == 1 || fp->altsetting == 2 ||
1009                         fp->altsetting == 3)
1010                         return 1;
1011                 break;
1012         case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro */
1013                 if (fp->altsetting == 2 || fp->altsetting == 3 ||
1014                         fp->altsetting == 5 || fp->altsetting == 6)
1015                         return 1;
1016                 break;
1017         }
1018         return 0;
1019 }
1020
1021 /*
1022  * For E-Mu 0404USB/0202USB/TrackerPre/0204 sample rate should be set for device,
1023  * not for interface.
1024  */
1025
1026 enum {
1027         EMU_QUIRK_SR_44100HZ = 0,
1028         EMU_QUIRK_SR_48000HZ,
1029         EMU_QUIRK_SR_88200HZ,
1030         EMU_QUIRK_SR_96000HZ,
1031         EMU_QUIRK_SR_176400HZ,
1032         EMU_QUIRK_SR_192000HZ
1033 };
1034
1035 static void set_format_emu_quirk(struct snd_usb_substream *subs,
1036                                  struct audioformat *fmt)
1037 {
1038         unsigned char emu_samplerate_id = 0;
1039
1040         /* When capture is active
1041          * sample rate shouldn't be changed
1042          * by playback substream
1043          */
1044         if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) {
1045                 if (subs->stream->substream[SNDRV_PCM_STREAM_CAPTURE].interface != -1)
1046                         return;
1047         }
1048
1049         switch (fmt->rate_min) {
1050         case 48000:
1051                 emu_samplerate_id = EMU_QUIRK_SR_48000HZ;
1052                 break;
1053         case 88200:
1054                 emu_samplerate_id = EMU_QUIRK_SR_88200HZ;
1055                 break;
1056         case 96000:
1057                 emu_samplerate_id = EMU_QUIRK_SR_96000HZ;
1058                 break;
1059         case 176400:
1060                 emu_samplerate_id = EMU_QUIRK_SR_176400HZ;
1061                 break;
1062         case 192000:
1063                 emu_samplerate_id = EMU_QUIRK_SR_192000HZ;
1064                 break;
1065         default:
1066                 emu_samplerate_id = EMU_QUIRK_SR_44100HZ;
1067                 break;
1068         }
1069         snd_emuusb_set_samplerate(subs->stream->chip, emu_samplerate_id);
1070         subs->pkt_offset_adj = (emu_samplerate_id >= EMU_QUIRK_SR_176400HZ) ? 4 : 0;
1071 }
1072
1073 void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
1074                               struct audioformat *fmt)
1075 {
1076         switch (subs->stream->chip->usb_id) {
1077         case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */
1078         case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */
1079         case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */
1080         case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */
1081                 set_format_emu_quirk(subs, fmt);
1082                 break;
1083         }
1084 }
1085
1086 void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
1087 {
1088         /*
1089          * "Playback Design" products send bogus feedback data at the start
1090          * of the stream. Ignore them.
1091          */
1092         if ((le16_to_cpu(ep->chip->dev->descriptor.idVendor) == 0x23ba) &&
1093             ep->type == SND_USB_ENDPOINT_TYPE_SYNC)
1094                 ep->skip_packets = 4;
1095
1096         /*
1097          * M-Audio Fast Track C400/C600 - when packets are not skipped, real
1098          * world latency varies by approx. +/- 50 frames (at 96KHz) each time
1099          * the stream is (re)started. When skipping packets 16 at endpoint
1100          * start up, the real world latency is stable within +/- 1 frame (also
1101          * across power cycles).
1102          */
1103         if ((ep->chip->usb_id == USB_ID(0x0763, 0x2030) ||
1104              ep->chip->usb_id == USB_ID(0x0763, 0x2031)) &&
1105             ep->type == SND_USB_ENDPOINT_TYPE_DATA)
1106                 ep->skip_packets = 16;
1107 }
1108
1109 void snd_usb_set_interface_quirk(struct usb_device *dev)
1110 {
1111         /*
1112          * "Playback Design" products need a 50ms delay after setting the
1113          * USB interface.
1114          */
1115         if (le16_to_cpu(dev->descriptor.idVendor) == 0x23ba)
1116                 mdelay(50);
1117 }
1118
1119 void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
1120                            __u8 request, __u8 requesttype, __u16 value,
1121                            __u16 index, void *data, __u16 size)
1122 {
1123         /*
1124          * "Playback Design" products need a 20ms delay after each
1125          * class compliant request
1126          */
1127         if ((le16_to_cpu(dev->descriptor.idVendor) == 0x23ba) &&
1128             (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1129                 mdelay(20);
1130 }
1131
1132 /*
1133  * snd_usb_interface_dsd_format_quirks() is called from format.c to
1134  * augment the PCM format bit-field for DSD types. The UAC standards
1135  * don't have a designated bit field to denote DSD-capable interfaces,
1136  * hence all hardware that is known to support this format has to be
1137  * listed here.
1138  */
1139 u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
1140                                         struct audioformat *fp,
1141                                         unsigned int sample_bytes)
1142 {
1143         /* Playback Designs */
1144         if (le16_to_cpu(chip->dev->descriptor.idVendor) == 0x23ba) {
1145                 switch (fp->altsetting) {
1146                 case 1:
1147                         fp->dsd_dop = true;
1148                         return SNDRV_PCM_FMTBIT_DSD_U16_LE;
1149                 case 2:
1150                         fp->dsd_bitrev = true;
1151                         return SNDRV_PCM_FMTBIT_DSD_U8;
1152                 case 3:
1153                         fp->dsd_bitrev = true;
1154                         return SNDRV_PCM_FMTBIT_DSD_U16_LE;
1155                 }
1156         }
1157
1158         return 0;
1159 }