linux/sound/usb/quirks.c
<<
>>
Prefs
   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 */
  43static 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_comp)
  47{
  48        int probed_ifnum = get_iface_desc(iface->altsetting)->bInterfaceNumber;
  49        const struct snd_usb_audio_quirk *quirk;
  50        int err;
  51
  52        for (quirk = quirk_comp->data; quirk->ifnum >= 0; ++quirk) {
  53                iface = usb_ifnum_to_if(chip->dev, quirk->ifnum);
  54                if (!iface)
  55                        continue;
  56                if (quirk->ifnum != probed_ifnum &&
  57                    usb_interface_claimed(iface))
  58                        continue;
  59                err = snd_usb_create_quirk(chip, iface, driver, quirk);
  60                if (err < 0)
  61                        return err;
  62        }
  63
  64        for (quirk = quirk_comp->data; quirk->ifnum >= 0; ++quirk) {
  65                iface = usb_ifnum_to_if(chip->dev, quirk->ifnum);
  66                if (!iface)
  67                        continue;
  68                if (quirk->ifnum != probed_ifnum &&
  69                    !usb_interface_claimed(iface))
  70                        usb_driver_claim_interface(driver, iface, (void *)-1L);
  71        }
  72
  73        return 0;
  74}
  75
  76static int ignore_interface_quirk(struct snd_usb_audio *chip,
  77                                  struct usb_interface *iface,
  78                                  struct usb_driver *driver,
  79                                  const struct snd_usb_audio_quirk *quirk)
  80{
  81        return 0;
  82}
  83
  84
  85/*
  86 * Allow alignment on audio sub-slot (channel samples) rather than
  87 * on audio slots (audio frames)
  88 */
  89static int create_align_transfer_quirk(struct snd_usb_audio *chip,
  90                                       struct usb_interface *iface,
  91                                       struct usb_driver *driver,
  92                                       const struct snd_usb_audio_quirk *quirk)
  93{
  94        chip->txfr_quirk = 1;
  95        return 1;       /* Continue with creating streams and mixer */
  96}
  97
  98static int create_any_midi_quirk(struct snd_usb_audio *chip,
  99                                 struct usb_interface *intf,
 100                                 struct usb_driver *driver,
 101                                 const struct snd_usb_audio_quirk *quirk)
 102{
 103        return snd_usbmidi_create(chip->card, intf, &chip->midi_list, quirk);
 104}
 105
 106/*
 107 * create a stream for an interface with proper descriptors
 108 */
 109static int create_standard_audio_quirk(struct snd_usb_audio *chip,
 110                                       struct usb_interface *iface,
 111                                       struct usb_driver *driver,
 112                                       const struct snd_usb_audio_quirk *quirk)
 113{
 114        struct usb_host_interface *alts;
 115        struct usb_interface_descriptor *altsd;
 116        int err;
 117
 118        if (chip->usb_id == USB_ID(0x1686, 0x00dd)) /* Zoom R16/24 */
 119                chip->tx_length_quirk = 1;
 120
 121        alts = &iface->altsetting[0];
 122        altsd = get_iface_desc(alts);
 123        err = snd_usb_parse_audio_interface(chip, altsd->bInterfaceNumber);
 124        if (err < 0) {
 125                usb_audio_err(chip, "cannot setup if %d: error %d\n",
 126                           altsd->bInterfaceNumber, err);
 127                return err;
 128        }
 129        /* reset the current interface */
 130        usb_set_interface(chip->dev, altsd->bInterfaceNumber, 0);
 131        return 0;
 132}
 133
 134/*
 135 * create a stream for an endpoint/altsetting without proper descriptors
 136 */
 137static int create_fixed_stream_quirk(struct snd_usb_audio *chip,
 138                                     struct usb_interface *iface,
 139                                     struct usb_driver *driver,
 140                                     const struct snd_usb_audio_quirk *quirk)
 141{
 142        struct audioformat *fp;
 143        struct usb_host_interface *alts;
 144        struct usb_interface_descriptor *altsd;
 145        int stream, err;
 146        unsigned *rate_table = NULL;
 147
 148        fp = kmemdup(quirk->data, sizeof(*fp), GFP_KERNEL);
 149        if (!fp)
 150                return -ENOMEM;
 151
 152        INIT_LIST_HEAD(&fp->list);
 153        if (fp->nr_rates > MAX_NR_RATES) {
 154                kfree(fp);
 155                return -EINVAL;
 156        }
 157        if (fp->nr_rates > 0) {
 158                rate_table = kmemdup(fp->rate_table,
 159                                     sizeof(int) * fp->nr_rates, GFP_KERNEL);
 160                if (!rate_table) {
 161                        kfree(fp);
 162                        return -ENOMEM;
 163                }
 164                fp->rate_table = rate_table;
 165        }
 166
 167        stream = (fp->endpoint & USB_DIR_IN)
 168                ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
 169        err = snd_usb_add_audio_stream(chip, stream, fp);
 170        if (err < 0)
 171                goto error;
 172        if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
 173            fp->altset_idx >= iface->num_altsetting) {
 174                err = -EINVAL;
 175                goto error;
 176        }
 177        alts = &iface->altsetting[fp->altset_idx];
 178        altsd = get_iface_desc(alts);
 179        if (altsd->bNumEndpoints < 1) {
 180                err = -EINVAL;
 181                goto error;
 182        }
 183
 184        fp->protocol = altsd->bInterfaceProtocol;
 185
 186        if (fp->datainterval == 0)
 187                fp->datainterval = snd_usb_parse_datainterval(chip, alts);
 188        if (fp->maxpacksize == 0)
 189                fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
 190        usb_set_interface(chip->dev, fp->iface, 0);
 191        snd_usb_init_pitch(chip, fp->iface, alts, fp);
 192        snd_usb_init_sample_rate(chip, fp->iface, alts, fp, fp->rate_max);
 193        return 0;
 194
 195 error:
 196        list_del(&fp->list); /* unlink for avoiding double-free */
 197        kfree(fp);
 198        kfree(rate_table);
 199        return err;
 200}
 201
 202static int create_auto_pcm_quirk(struct snd_usb_audio *chip,
 203                                 struct usb_interface *iface,
 204                                 struct usb_driver *driver)
 205{
 206        struct usb_host_interface *alts;
 207        struct usb_interface_descriptor *altsd;
 208        struct usb_endpoint_descriptor *epd;
 209        struct uac1_as_header_descriptor *ashd;
 210        struct uac_format_type_i_discrete_descriptor *fmtd;
 211
 212        /*
 213         * Most Roland/Yamaha audio streaming interfaces have more or less
 214         * standard descriptors, but older devices might lack descriptors, and
 215         * future ones might change, so ensure that we fail silently if the
 216         * interface doesn't look exactly right.
 217         */
 218
 219        /* must have a non-zero altsetting for streaming */
 220        if (iface->num_altsetting < 2)
 221                return -ENODEV;
 222        alts = &iface->altsetting[1];
 223        altsd = get_iface_desc(alts);
 224
 225        /* must have an isochronous endpoint for streaming */
 226        if (altsd->bNumEndpoints < 1)
 227                return -ENODEV;
 228        epd = get_endpoint(alts, 0);
 229        if (!usb_endpoint_xfer_isoc(epd))
 230                return -ENODEV;
 231
 232        /* must have format descriptors */
 233        ashd = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL,
 234                                       UAC_AS_GENERAL);
 235        fmtd = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL,
 236                                       UAC_FORMAT_TYPE);
 237        if (!ashd || ashd->bLength < 7 ||
 238            !fmtd || fmtd->bLength < 8)
 239                return -ENODEV;
 240
 241        return create_standard_audio_quirk(chip, iface, driver, NULL);
 242}
 243
 244static int create_yamaha_midi_quirk(struct snd_usb_audio *chip,
 245                                    struct usb_interface *iface,
 246                                    struct usb_driver *driver,
 247                                    struct usb_host_interface *alts)
 248{
 249        static const struct snd_usb_audio_quirk yamaha_midi_quirk = {
 250                .type = QUIRK_MIDI_YAMAHA
 251        };
 252        struct usb_midi_in_jack_descriptor *injd;
 253        struct usb_midi_out_jack_descriptor *outjd;
 254
 255        /* must have some valid jack descriptors */
 256        injd = snd_usb_find_csint_desc(alts->extra, alts->extralen,
 257                                       NULL, USB_MS_MIDI_IN_JACK);
 258        outjd = snd_usb_find_csint_desc(alts->extra, alts->extralen,
 259                                        NULL, USB_MS_MIDI_OUT_JACK);
 260        if (!injd && !outjd)
 261                return -ENODEV;
 262        if (injd && (injd->bLength < 5 ||
 263                     (injd->bJackType != USB_MS_EMBEDDED &&
 264                      injd->bJackType != USB_MS_EXTERNAL)))
 265                return -ENODEV;
 266        if (outjd && (outjd->bLength < 6 ||
 267                      (outjd->bJackType != USB_MS_EMBEDDED &&
 268                       outjd->bJackType != USB_MS_EXTERNAL)))
 269                return -ENODEV;
 270        return create_any_midi_quirk(chip, iface, driver, &yamaha_midi_quirk);
 271}
 272
 273static int create_roland_midi_quirk(struct snd_usb_audio *chip,
 274                                    struct usb_interface *iface,
 275                                    struct usb_driver *driver,
 276                                    struct usb_host_interface *alts)
 277{
 278        static const struct snd_usb_audio_quirk roland_midi_quirk = {
 279                .type = QUIRK_MIDI_ROLAND
 280        };
 281        u8 *roland_desc = NULL;
 282
 283        /* might have a vendor-specific descriptor <06 24 F1 02 ...> */
 284        for (;;) {
 285                roland_desc = snd_usb_find_csint_desc(alts->extra,
 286                                                      alts->extralen,
 287                                                      roland_desc, 0xf1);
 288                if (!roland_desc)
 289                        return -ENODEV;
 290                if (roland_desc[0] < 6 || roland_desc[3] != 2)
 291                        continue;
 292                return create_any_midi_quirk(chip, iface, driver,
 293                                             &roland_midi_quirk);
 294        }
 295}
 296
 297static int create_std_midi_quirk(struct snd_usb_audio *chip,
 298                                 struct usb_interface *iface,
 299                                 struct usb_driver *driver,
 300                                 struct usb_host_interface *alts)
 301{
 302        struct usb_ms_header_descriptor *mshd;
 303        struct usb_ms_endpoint_descriptor *msepd;
 304
 305        /* must have the MIDIStreaming interface header descriptor*/
 306        mshd = (struct usb_ms_header_descriptor *)alts->extra;
 307        if (alts->extralen < 7 ||
 308            mshd->bLength < 7 ||
 309            mshd->bDescriptorType != USB_DT_CS_INTERFACE ||
 310            mshd->bDescriptorSubtype != USB_MS_HEADER)
 311                return -ENODEV;
 312        /* must have the MIDIStreaming endpoint descriptor*/
 313        msepd = (struct usb_ms_endpoint_descriptor *)alts->endpoint[0].extra;
 314        if (alts->endpoint[0].extralen < 4 ||
 315            msepd->bLength < 4 ||
 316            msepd->bDescriptorType != USB_DT_CS_ENDPOINT ||
 317            msepd->bDescriptorSubtype != UAC_MS_GENERAL ||
 318            msepd->bNumEmbMIDIJack < 1 ||
 319            msepd->bNumEmbMIDIJack > 16)
 320                return -ENODEV;
 321
 322        return create_any_midi_quirk(chip, iface, driver, NULL);
 323}
 324
 325static int create_auto_midi_quirk(struct snd_usb_audio *chip,
 326                                  struct usb_interface *iface,
 327                                  struct usb_driver *driver)
 328{
 329        struct usb_host_interface *alts;
 330        struct usb_interface_descriptor *altsd;
 331        struct usb_endpoint_descriptor *epd;
 332        int err;
 333
 334        alts = &iface->altsetting[0];
 335        altsd = get_iface_desc(alts);
 336
 337        /* must have at least one bulk/interrupt endpoint for streaming */
 338        if (altsd->bNumEndpoints < 1)
 339                return -ENODEV;
 340        epd = get_endpoint(alts, 0);
 341        if (!usb_endpoint_xfer_bulk(epd) &&
 342            !usb_endpoint_xfer_int(epd))
 343                return -ENODEV;
 344
 345        switch (USB_ID_VENDOR(chip->usb_id)) {
 346        case 0x0499: /* Yamaha */
 347                err = create_yamaha_midi_quirk(chip, iface, driver, alts);
 348                if (err != -ENODEV)
 349                        return err;
 350                break;
 351        case 0x0582: /* Roland */
 352                err = create_roland_midi_quirk(chip, iface, driver, alts);
 353                if (err != -ENODEV)
 354                        return err;
 355                break;
 356        }
 357
 358        return create_std_midi_quirk(chip, iface, driver, alts);
 359}
 360
 361static int create_autodetect_quirk(struct snd_usb_audio *chip,
 362                                   struct usb_interface *iface,
 363                                   struct usb_driver *driver)
 364{
 365        int err;
 366
 367        err = create_auto_pcm_quirk(chip, iface, driver);
 368        if (err == -ENODEV)
 369                err = create_auto_midi_quirk(chip, iface, driver);
 370        return err;
 371}
 372
 373static int create_autodetect_quirks(struct snd_usb_audio *chip,
 374                                    struct usb_interface *iface,
 375                                    struct usb_driver *driver,
 376                                    const struct snd_usb_audio_quirk *quirk)
 377{
 378        int probed_ifnum = get_iface_desc(iface->altsetting)->bInterfaceNumber;
 379        int ifcount, ifnum, err;
 380
 381        err = create_autodetect_quirk(chip, iface, driver);
 382        if (err < 0)
 383                return err;
 384
 385        /*
 386         * ALSA PCM playback/capture devices cannot be registered in two steps,
 387         * so we have to claim the other corresponding interface here.
 388         */
 389        ifcount = chip->dev->actconfig->desc.bNumInterfaces;
 390        for (ifnum = 0; ifnum < ifcount; ifnum++) {
 391                if (ifnum == probed_ifnum || quirk->ifnum >= 0)
 392                        continue;
 393                iface = usb_ifnum_to_if(chip->dev, ifnum);
 394                if (!iface ||
 395                    usb_interface_claimed(iface) ||
 396                    get_iface_desc(iface->altsetting)->bInterfaceClass !=
 397                                                        USB_CLASS_VENDOR_SPEC)
 398                        continue;
 399
 400                err = create_autodetect_quirk(chip, iface, driver);
 401                if (err >= 0)
 402                        usb_driver_claim_interface(driver, iface, (void *)-1L);
 403        }
 404
 405        return 0;
 406}
 407
 408/*
 409 * Create a stream for an Edirol UA-700/UA-25/UA-4FX interface.  
 410 * The only way to detect the sample rate is by looking at wMaxPacketSize.
 411 */
 412static int create_uaxx_quirk(struct snd_usb_audio *chip,
 413                             struct usb_interface *iface,
 414                             struct usb_driver *driver,
 415                             const struct snd_usb_audio_quirk *quirk)
 416{
 417        static const struct audioformat ua_format = {
 418                .formats = SNDRV_PCM_FMTBIT_S24_3LE,
 419                .channels = 2,
 420                .fmt_type = UAC_FORMAT_TYPE_I,
 421                .altsetting = 1,
 422                .altset_idx = 1,
 423                .rates = SNDRV_PCM_RATE_CONTINUOUS,
 424        };
 425        struct usb_host_interface *alts;
 426        struct usb_interface_descriptor *altsd;
 427        struct audioformat *fp;
 428        int stream, err;
 429
 430        /* both PCM and MIDI interfaces have 2 or more altsettings */
 431        if (iface->num_altsetting < 2)
 432                return -ENXIO;
 433        alts = &iface->altsetting[1];
 434        altsd = get_iface_desc(alts);
 435
 436        if (altsd->bNumEndpoints == 2) {
 437                static const struct snd_usb_midi_endpoint_info ua700_ep = {
 438                        .out_cables = 0x0003,
 439                        .in_cables  = 0x0003
 440                };
 441                static const struct snd_usb_audio_quirk ua700_quirk = {
 442                        .type = QUIRK_MIDI_FIXED_ENDPOINT,
 443                        .data = &ua700_ep
 444                };
 445                static const struct snd_usb_midi_endpoint_info uaxx_ep = {
 446                        .out_cables = 0x0001,
 447                        .in_cables  = 0x0001
 448                };
 449                static const struct snd_usb_audio_quirk uaxx_quirk = {
 450                        .type = QUIRK_MIDI_FIXED_ENDPOINT,
 451                        .data = &uaxx_ep
 452                };
 453                const struct snd_usb_audio_quirk *quirk =
 454                        chip->usb_id == USB_ID(0x0582, 0x002b)
 455                        ? &ua700_quirk : &uaxx_quirk;
 456                return __snd_usbmidi_create(chip->card, iface,
 457                                          &chip->midi_list, quirk,
 458                                          chip->usb_id);
 459        }
 460
 461        if (altsd->bNumEndpoints != 1)
 462                return -ENXIO;
 463
 464        fp = kmemdup(&ua_format, sizeof(*fp), GFP_KERNEL);
 465        if (!fp)
 466                return -ENOMEM;
 467
 468        fp->iface = altsd->bInterfaceNumber;
 469        fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
 470        fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
 471        fp->datainterval = 0;
 472        fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
 473        INIT_LIST_HEAD(&fp->list);
 474
 475        switch (fp->maxpacksize) {
 476        case 0x120:
 477                fp->rate_max = fp->rate_min = 44100;
 478                break;
 479        case 0x138:
 480        case 0x140:
 481                fp->rate_max = fp->rate_min = 48000;
 482                break;
 483        case 0x258:
 484        case 0x260:
 485                fp->rate_max = fp->rate_min = 96000;
 486                break;
 487        default:
 488                usb_audio_err(chip, "unknown sample rate\n");
 489                kfree(fp);
 490                return -ENXIO;
 491        }
 492
 493        stream = (fp->endpoint & USB_DIR_IN)
 494                ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
 495        err = snd_usb_add_audio_stream(chip, stream, fp);
 496        if (err < 0) {
 497                list_del(&fp->list); /* unlink for avoiding double-free */
 498                kfree(fp);
 499                return err;
 500        }
 501        usb_set_interface(chip->dev, fp->iface, 0);
 502        return 0;
 503}
 504
 505/*
 506 * Create a standard mixer for the specified interface.
 507 */
 508static int create_standard_mixer_quirk(struct snd_usb_audio *chip,
 509                                       struct usb_interface *iface,
 510                                       struct usb_driver *driver,
 511                                       const struct snd_usb_audio_quirk *quirk)
 512{
 513        if (quirk->ifnum < 0)
 514                return 0;
 515
 516        return snd_usb_create_mixer(chip, quirk->ifnum, 0);
 517}
 518
 519/*
 520 * audio-interface quirks
 521 *
 522 * returns zero if no standard audio/MIDI parsing is needed.
 523 * returns a positive value if standard audio/midi interfaces are parsed
 524 * after this.
 525 * returns a negative value at error.
 526 */
 527int snd_usb_create_quirk(struct snd_usb_audio *chip,
 528                         struct usb_interface *iface,
 529                         struct usb_driver *driver,
 530                         const struct snd_usb_audio_quirk *quirk)
 531{
 532        typedef int (*quirk_func_t)(struct snd_usb_audio *,
 533                                    struct usb_interface *,
 534                                    struct usb_driver *,
 535                                    const struct snd_usb_audio_quirk *);
 536        static const quirk_func_t quirk_funcs[] = {
 537                [QUIRK_IGNORE_INTERFACE] = ignore_interface_quirk,
 538                [QUIRK_COMPOSITE] = create_composite_quirk,
 539                [QUIRK_AUTODETECT] = create_autodetect_quirks,
 540                [QUIRK_MIDI_STANDARD_INTERFACE] = create_any_midi_quirk,
 541                [QUIRK_MIDI_FIXED_ENDPOINT] = create_any_midi_quirk,
 542                [QUIRK_MIDI_YAMAHA] = create_any_midi_quirk,
 543                [QUIRK_MIDI_ROLAND] = create_any_midi_quirk,
 544                [QUIRK_MIDI_MIDIMAN] = create_any_midi_quirk,
 545                [QUIRK_MIDI_NOVATION] = create_any_midi_quirk,
 546                [QUIRK_MIDI_RAW_BYTES] = create_any_midi_quirk,
 547                [QUIRK_MIDI_EMAGIC] = create_any_midi_quirk,
 548                [QUIRK_MIDI_CME] = create_any_midi_quirk,
 549                [QUIRK_MIDI_AKAI] = create_any_midi_quirk,
 550                [QUIRK_MIDI_FTDI] = create_any_midi_quirk,
 551                [QUIRK_MIDI_CH345] = create_any_midi_quirk,
 552                [QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk,
 553                [QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
 554                [QUIRK_AUDIO_EDIROL_UAXX] = create_uaxx_quirk,
 555                [QUIRK_AUDIO_ALIGN_TRANSFER] = create_align_transfer_quirk,
 556                [QUIRK_AUDIO_STANDARD_MIXER] = create_standard_mixer_quirk,
 557        };
 558
 559        if (quirk->type < QUIRK_TYPE_COUNT) {
 560                return quirk_funcs[quirk->type](chip, iface, driver, quirk);
 561        } else {
 562                usb_audio_err(chip, "invalid quirk type %d\n", quirk->type);
 563                return -ENXIO;
 564        }
 565}
 566
 567/*
 568 * boot quirks
 569 */
 570
 571#define EXTIGY_FIRMWARE_SIZE_OLD 794
 572#define EXTIGY_FIRMWARE_SIZE_NEW 483
 573
 574static int snd_usb_extigy_boot_quirk(struct usb_device *dev, struct usb_interface *intf)
 575{
 576        struct usb_host_config *config = dev->actconfig;
 577        int err;
 578
 579        if (le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_OLD ||
 580            le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_NEW) {
 581                dev_dbg(&dev->dev, "sending Extigy boot sequence...\n");
 582                /* Send message to force it to reconnect with full interface. */
 583                err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev,0),
 584                                      0x10, 0x43, 0x0001, 0x000a, NULL, 0);
 585                if (err < 0)
 586                        dev_dbg(&dev->dev, "error sending boot message: %d\n", err);
 587                err = usb_get_descriptor(dev, USB_DT_DEVICE, 0,
 588                                &dev->descriptor, sizeof(dev->descriptor));
 589                config = dev->actconfig;
 590                if (err < 0)
 591                        dev_dbg(&dev->dev, "error usb_get_descriptor: %d\n", err);
 592                err = usb_reset_configuration(dev);
 593                if (err < 0)
 594                        dev_dbg(&dev->dev, "error usb_reset_configuration: %d\n", err);
 595                dev_dbg(&dev->dev, "extigy_boot: new boot length = %d\n",
 596                            le16_to_cpu(get_cfg_desc(config)->wTotalLength));
 597                return -ENODEV; /* quit this anyway */
 598        }
 599        return 0;
 600}
 601
 602static int snd_usb_audigy2nx_boot_quirk(struct usb_device *dev)
 603{
 604        u8 buf = 1;
 605
 606        snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 0x2a,
 607                        USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
 608                        0, 0, &buf, 1);
 609        if (buf == 0) {
 610                snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0x29,
 611                                USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
 612                                1, 2000, NULL, 0);
 613                return -ENODEV;
 614        }
 615        return 0;
 616}
 617
 618static int snd_usb_fasttrackpro_boot_quirk(struct usb_device *dev)
 619{
 620        int err;
 621
 622        if (dev->actconfig->desc.bConfigurationValue == 1) {
 623                dev_info(&dev->dev,
 624                           "Fast Track Pro switching to config #2\n");
 625                /* This function has to be available by the usb core module.
 626                 * if it is not avialable the boot quirk has to be left out
 627                 * and the configuration has to be set by udev or hotplug
 628                 * rules
 629                 */
 630                err = usb_driver_set_configuration(dev, 2);
 631                if (err < 0)
 632                        dev_dbg(&dev->dev,
 633                                "error usb_driver_set_configuration: %d\n",
 634                                err);
 635                /* Always return an error, so that we stop creating a device
 636                   that will just be destroyed and recreated with a new
 637                   configuration */
 638                return -ENODEV;
 639        } else
 640                dev_info(&dev->dev, "Fast Track Pro config OK\n");
 641
 642        return 0;
 643}
 644
 645/*
 646 * C-Media CM106/CM106+ have four 16-bit internal registers that are nicely
 647 * documented in the device's data sheet.
 648 */
 649static int snd_usb_cm106_write_int_reg(struct usb_device *dev, int reg, u16 value)
 650{
 651        u8 buf[4];
 652        buf[0] = 0x20;
 653        buf[1] = value & 0xff;
 654        buf[2] = (value >> 8) & 0xff;
 655        buf[3] = reg;
 656        return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), USB_REQ_SET_CONFIGURATION,
 657                               USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
 658                               0, 0, &buf, 4);
 659}
 660
 661static int snd_usb_cm106_boot_quirk(struct usb_device *dev)
 662{
 663        /*
 664         * Enable line-out driver mode, set headphone source to front
 665         * channels, enable stereo mic.
 666         */
 667        return snd_usb_cm106_write_int_reg(dev, 2, 0x8004);
 668}
 669
 670/*
 671 * C-Media CM6206 is based on CM106 with two additional
 672 * registers that are not documented in the data sheet.
 673 * Values here are chosen based on sniffing USB traffic
 674 * under Windows.
 675 */
 676static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
 677{
 678        int err  = 0, reg;
 679        int val[] = {0x2004, 0x3000, 0xf800, 0x143f, 0x0000, 0x3000};
 680
 681        for (reg = 0; reg < ARRAY_SIZE(val); reg++) {
 682                err = snd_usb_cm106_write_int_reg(dev, reg, val[reg]);
 683                if (err < 0)
 684                        return err;
 685        }
 686
 687        return err;
 688}
 689
 690/* quirk for Plantronics GameCom 780 with CM6302 chip */
 691static int snd_usb_gamecon780_boot_quirk(struct usb_device *dev)
 692{
 693        /* set the initial volume and don't change; other values are either
 694         * too loud or silent due to firmware bug (bko#65251)
 695         */
 696        u8 buf[2] = { 0x74, 0xe3 };
 697        return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR,
 698                        USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
 699                        UAC_FU_VOLUME << 8, 9 << 8, buf, 2);
 700}
 701
 702/*
 703 * Novation Twitch DJ controller
 704 * Focusrite Novation Saffire 6 USB audio card
 705 */
 706static int snd_usb_novation_boot_quirk(struct usb_device *dev)
 707{
 708        /* preemptively set up the device because otherwise the
 709         * raw MIDI endpoints are not active */
 710        usb_set_interface(dev, 0, 1);
 711        return 0;
 712}
 713
 714/*
 715 * This call will put the synth in "USB send" mode, i.e it will send MIDI
 716 * messages through USB (this is disabled at startup). The synth will
 717 * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB
 718 * sign on its LCD. Values here are chosen based on sniffing USB traffic
 719 * under Windows.
 720 */
 721static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
 722{
 723        int err, actual_length;
 724
 725        /* "midi send" enable */
 726        static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
 727
 728        void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
 729        if (!buf)
 730                return -ENOMEM;
 731        err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
 732                        ARRAY_SIZE(seq), &actual_length, 1000);
 733        kfree(buf);
 734        if (err < 0)
 735                return err;
 736
 737        return 0;
 738}
 739
 740/*
 741 * Some sound cards from Native Instruments are in fact compliant to the USB
 742 * audio standard of version 2 and other approved USB standards, even though
 743 * they come up as vendor-specific device when first connected.
 744 *
 745 * However, they can be told to come up with a new set of descriptors
 746 * upon their next enumeration, and the interfaces announced by the new
 747 * descriptors will then be handled by the kernel's class drivers. As the
 748 * product ID will also change, no further checks are required.
 749 */
 750
 751static int snd_usb_nativeinstruments_boot_quirk(struct usb_device *dev)
 752{
 753        int ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 754                                  0xaf, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 755                                  1, 0, NULL, 0, 1000);
 756
 757        if (ret < 0)
 758                return ret;
 759
 760        usb_reset_device(dev);
 761
 762        /* return -EAGAIN, so the creation of an audio interface for this
 763         * temporary device is aborted. The device will reconnect with a
 764         * new product ID */
 765        return -EAGAIN;
 766}
 767
 768static void mbox2_setup_48_24_magic(struct usb_device *dev)
 769{
 770        u8 srate[3];
 771        u8 temp[12];
 772
 773        /* Choose 48000Hz permanently */
 774        srate[0] = 0x80;
 775        srate[1] = 0xbb;
 776        srate[2] = 0x00;
 777
 778        /* Send the magic! */
 779        snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
 780                0x01, 0x22, 0x0100, 0x0085, &temp, 0x0003);
 781        snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
 782                0x81, 0xa2, 0x0100, 0x0085, &srate, 0x0003);
 783        snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
 784                0x81, 0xa2, 0x0100, 0x0086, &srate, 0x0003);
 785        snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
 786                0x81, 0xa2, 0x0100, 0x0003, &srate, 0x0003);
 787        return;
 788}
 789
 790/* Digidesign Mbox 2 needs to load firmware onboard
 791 * and driver must wait a few seconds for initialisation.
 792 */
 793
 794#define MBOX2_FIRMWARE_SIZE    646
 795#define MBOX2_BOOT_LOADING     0x01 /* Hard coded into the device */
 796#define MBOX2_BOOT_READY       0x02 /* Hard coded into the device */
 797
 798static int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
 799{
 800        struct usb_host_config *config = dev->actconfig;
 801        int err;
 802        u8 bootresponse[0x12];
 803        int fwsize;
 804        int count;
 805
 806        fwsize = le16_to_cpu(get_cfg_desc(config)->wTotalLength);
 807
 808        if (fwsize != MBOX2_FIRMWARE_SIZE) {
 809                dev_err(&dev->dev, "Invalid firmware size=%d.\n", fwsize);
 810                return -ENODEV;
 811        }
 812
 813        dev_dbg(&dev->dev, "Sending Digidesign Mbox 2 boot sequence...\n");
 814
 815        count = 0;
 816        bootresponse[0] = MBOX2_BOOT_LOADING;
 817        while ((bootresponse[0] == MBOX2_BOOT_LOADING) && (count < 10)) {
 818                msleep(500); /* 0.5 second delay */
 819                snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
 820                        /* Control magic - load onboard firmware */
 821                        0x85, 0xc0, 0x0001, 0x0000, &bootresponse, 0x0012);
 822                if (bootresponse[0] == MBOX2_BOOT_READY)
 823                        break;
 824                dev_dbg(&dev->dev, "device not ready, resending boot sequence...\n");
 825                count++;
 826        }
 827
 828        if (bootresponse[0] != MBOX2_BOOT_READY) {
 829                dev_err(&dev->dev, "Unknown bootresponse=%d, or timed out, ignoring device.\n", bootresponse[0]);
 830                return -ENODEV;
 831        }
 832
 833        dev_dbg(&dev->dev, "device initialised!\n");
 834
 835        err = usb_get_descriptor(dev, USB_DT_DEVICE, 0,
 836                &dev->descriptor, sizeof(dev->descriptor));
 837        config = dev->actconfig;
 838        if (err < 0)
 839                dev_dbg(&dev->dev, "error usb_get_descriptor: %d\n", err);
 840
 841        err = usb_reset_configuration(dev);
 842        if (err < 0)
 843                dev_dbg(&dev->dev, "error usb_reset_configuration: %d\n", err);
 844        dev_dbg(&dev->dev, "mbox2_boot: new boot length = %d\n",
 845                le16_to_cpu(get_cfg_desc(config)->wTotalLength));
 846
 847        mbox2_setup_48_24_magic(dev);
 848
 849        dev_info(&dev->dev, "Digidesign Mbox 2: 24bit 48kHz");
 850
 851        return 0; /* Successful boot */
 852}
 853
 854/*
 855 * Setup quirks
 856 */
 857#define MAUDIO_SET              0x01 /* parse device_setup */
 858#define MAUDIO_SET_COMPATIBLE   0x80 /* use only "win-compatible" interfaces */
 859#define MAUDIO_SET_DTS          0x02 /* enable DTS Digital Output */
 860#define MAUDIO_SET_96K          0x04 /* 48-96KHz rate if set, 8-48KHz otherwise */
 861#define MAUDIO_SET_24B          0x08 /* 24bits sample if set, 16bits otherwise */
 862#define MAUDIO_SET_DI           0x10 /* enable Digital Input */
 863#define MAUDIO_SET_MASK         0x1f /* bit mask for setup value */
 864#define MAUDIO_SET_24B_48K_DI    0x19 /* 24bits+48KHz+Digital Input */
 865#define MAUDIO_SET_24B_48K_NOTDI 0x09 /* 24bits+48KHz+No Digital Input */
 866#define MAUDIO_SET_16B_48K_DI    0x11 /* 16bits+48KHz+Digital Input */
 867#define MAUDIO_SET_16B_48K_NOTDI 0x01 /* 16bits+48KHz+No Digital Input */
 868
 869static int quattro_skip_setting_quirk(struct snd_usb_audio *chip,
 870                                      int iface, int altno)
 871{
 872        /* Reset ALL ifaces to 0 altsetting.
 873         * Call it for every possible altsetting of every interface.
 874         */
 875        usb_set_interface(chip->dev, iface, 0);
 876        if (chip->setup & MAUDIO_SET) {
 877                if (chip->setup & MAUDIO_SET_COMPATIBLE) {
 878                        if (iface != 1 && iface != 2)
 879                                return 1; /* skip all interfaces but 1 and 2 */
 880                } else {
 881                        unsigned int mask;
 882                        if (iface == 1 || iface == 2)
 883                                return 1; /* skip interfaces 1 and 2 */
 884                        if ((chip->setup & MAUDIO_SET_96K) && altno != 1)
 885                                return 1; /* skip this altsetting */
 886                        mask = chip->setup & MAUDIO_SET_MASK;
 887                        if (mask == MAUDIO_SET_24B_48K_DI && altno != 2)
 888                                return 1; /* skip this altsetting */
 889                        if (mask == MAUDIO_SET_24B_48K_NOTDI && altno != 3)
 890                                return 1; /* skip this altsetting */
 891                        if (mask == MAUDIO_SET_16B_48K_NOTDI && altno != 4)
 892                                return 1; /* skip this altsetting */
 893                }
 894        }
 895        usb_audio_dbg(chip,
 896                    "using altsetting %d for interface %d config %d\n",
 897                    altno, iface, chip->setup);
 898        return 0; /* keep this altsetting */
 899}
 900
 901static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip,
 902                                         int iface,
 903                                         int altno)
 904{
 905        /* Reset ALL ifaces to 0 altsetting.
 906         * Call it for every possible altsetting of every interface.
 907         */
 908        usb_set_interface(chip->dev, iface, 0);
 909
 910        if (chip->setup & MAUDIO_SET) {
 911                unsigned int mask;
 912                if ((chip->setup & MAUDIO_SET_DTS) && altno != 6)
 913                        return 1; /* skip this altsetting */
 914                if ((chip->setup & MAUDIO_SET_96K) && altno != 1)
 915                        return 1; /* skip this altsetting */
 916                mask = chip->setup & MAUDIO_SET_MASK;
 917                if (mask == MAUDIO_SET_24B_48K_DI && altno != 2)
 918                        return 1; /* skip this altsetting */
 919                if (mask == MAUDIO_SET_24B_48K_NOTDI && altno != 3)
 920                        return 1; /* skip this altsetting */
 921                if (mask == MAUDIO_SET_16B_48K_DI && altno != 4)
 922                        return 1; /* skip this altsetting */
 923                if (mask == MAUDIO_SET_16B_48K_NOTDI && altno != 5)
 924                        return 1; /* skip this altsetting */
 925        }
 926
 927        return 0; /* keep this altsetting */
 928}
 929
 930static int fasttrackpro_skip_setting_quirk(struct snd_usb_audio *chip,
 931                                           int iface, int altno)
 932{
 933        /* Reset ALL ifaces to 0 altsetting.
 934         * Call it for every possible altsetting of every interface.
 935         */
 936        usb_set_interface(chip->dev, iface, 0);
 937
 938        /* possible configuration where both inputs and only one output is
 939         *used is not supported by the current setup
 940         */
 941        if (chip->setup & (MAUDIO_SET | MAUDIO_SET_24B)) {
 942                if (chip->setup & MAUDIO_SET_96K) {
 943                        if (altno != 3 && altno != 6)
 944                                return 1;
 945                } else if (chip->setup & MAUDIO_SET_DI) {
 946                        if (iface == 4)
 947                                return 1; /* no analog input */
 948                        if (altno != 2 && altno != 5)
 949                                return 1; /* enable only altsets 2 and 5 */
 950                } else {
 951                        if (iface == 5)
 952                                return 1; /* disable digialt input */
 953                        if (altno != 2 && altno != 5)
 954                                return 1; /* enalbe only altsets 2 and 5 */
 955                }
 956        } else {
 957                /* keep only 16-Bit mode */
 958                if (altno != 1)
 959                        return 1;
 960        }
 961
 962        usb_audio_dbg(chip,
 963                    "using altsetting %d for interface %d config %d\n",
 964                    altno, iface, chip->setup);
 965        return 0; /* keep this altsetting */
 966}
 967
 968int snd_usb_apply_interface_quirk(struct snd_usb_audio *chip,
 969                                  int iface,
 970                                  int altno)
 971{
 972        /* audiophile usb: skip altsets incompatible with device_setup */
 973        if (chip->usb_id == USB_ID(0x0763, 0x2003))
 974                return audiophile_skip_setting_quirk(chip, iface, altno);
 975        /* quattro usb: skip altsets incompatible with device_setup */
 976        if (chip->usb_id == USB_ID(0x0763, 0x2001))
 977                return quattro_skip_setting_quirk(chip, iface, altno);
 978        /* fasttrackpro usb: skip altsets incompatible with device_setup */
 979        if (chip->usb_id == USB_ID(0x0763, 0x2012))
 980                return fasttrackpro_skip_setting_quirk(chip, iface, altno);
 981
 982        return 0;
 983}
 984
 985int snd_usb_apply_boot_quirk(struct usb_device *dev,
 986                             struct usb_interface *intf,
 987                             const struct snd_usb_audio_quirk *quirk,
 988                             unsigned int id)
 989{
 990        switch (id) {
 991        case USB_ID(0x041e, 0x3000):
 992                /* SB Extigy needs special boot-up sequence */
 993                /* if more models come, this will go to the quirk list. */
 994                return snd_usb_extigy_boot_quirk(dev, intf);
 995
 996        case USB_ID(0x041e, 0x3020):
 997                /* SB Audigy 2 NX needs its own boot-up magic, too */
 998                return snd_usb_audigy2nx_boot_quirk(dev);
 999
1000        case USB_ID(0x10f5, 0x0200):
1001                /* C-Media CM106 / Turtle Beach Audio Advantage Roadie */
1002                return snd_usb_cm106_boot_quirk(dev);
1003
1004        case USB_ID(0x0d8c, 0x0102):
1005                /* C-Media CM6206 / CM106-Like Sound Device */
1006        case USB_ID(0x0ccd, 0x00b1): /* Terratec Aureon 7.1 USB */
1007                return snd_usb_cm6206_boot_quirk(dev);
1008
1009        case USB_ID(0x0dba, 0x3000):
1010                /* Digidesign Mbox 2 */
1011                return snd_usb_mbox2_boot_quirk(dev);
1012
1013        case USB_ID(0x1235, 0x0010): /* Focusrite Novation Saffire 6 USB */
1014        case USB_ID(0x1235, 0x0018): /* Focusrite Novation Twitch */
1015                return snd_usb_novation_boot_quirk(dev);
1016
1017        case USB_ID(0x133e, 0x0815):
1018                /* Access Music VirusTI Desktop */
1019                return snd_usb_accessmusic_boot_quirk(dev);
1020
1021        case USB_ID(0x17cc, 0x1000): /* Komplete Audio 6 */
1022        case USB_ID(0x17cc, 0x1010): /* Traktor Audio 6 */
1023        case USB_ID(0x17cc, 0x1020): /* Traktor Audio 10 */
1024                return snd_usb_nativeinstruments_boot_quirk(dev);
1025        case USB_ID(0x0763, 0x2012):  /* M-Audio Fast Track Pro USB */
1026                return snd_usb_fasttrackpro_boot_quirk(dev);
1027        case USB_ID(0x047f, 0xc010): /* Plantronics Gamecom 780 */
1028                return snd_usb_gamecon780_boot_quirk(dev);
1029        }
1030
1031        return 0;
1032}
1033
1034/*
1035 * check if the device uses big-endian samples
1036 */
1037int snd_usb_is_big_endian_format(struct snd_usb_audio *chip, struct audioformat *fp)
1038{
1039        /* it depends on altsetting whether the device is big-endian or not */
1040        switch (chip->usb_id) {
1041        case USB_ID(0x0763, 0x2001): /* M-Audio Quattro: captured data only */
1042                if (fp->altsetting == 2 || fp->altsetting == 3 ||
1043                        fp->altsetting == 5 || fp->altsetting == 6)
1044                        return 1;
1045                break;
1046        case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
1047                if (chip->setup == 0x00 ||
1048                        fp->altsetting == 1 || fp->altsetting == 2 ||
1049                        fp->altsetting == 3)
1050                        return 1;
1051                break;
1052        case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro */
1053                if (fp->altsetting == 2 || fp->altsetting == 3 ||
1054                        fp->altsetting == 5 || fp->altsetting == 6)
1055                        return 1;
1056                break;
1057        }
1058        return 0;
1059}
1060
1061/*
1062 * For E-Mu 0404USB/0202USB/TrackerPre/0204 sample rate should be set for device,
1063 * not for interface.
1064 */
1065
1066enum {
1067        EMU_QUIRK_SR_44100HZ = 0,
1068        EMU_QUIRK_SR_48000HZ,
1069        EMU_QUIRK_SR_88200HZ,
1070        EMU_QUIRK_SR_96000HZ,
1071        EMU_QUIRK_SR_176400HZ,
1072        EMU_QUIRK_SR_192000HZ
1073};
1074
1075static void set_format_emu_quirk(struct snd_usb_substream *subs,
1076                                 struct audioformat *fmt)
1077{
1078        unsigned char emu_samplerate_id = 0;
1079
1080        /* When capture is active
1081         * sample rate shouldn't be changed
1082         * by playback substream
1083         */
1084        if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) {
1085                if (subs->stream->substream[SNDRV_PCM_STREAM_CAPTURE].interface != -1)
1086                        return;
1087        }
1088
1089        switch (fmt->rate_min) {
1090        case 48000:
1091                emu_samplerate_id = EMU_QUIRK_SR_48000HZ;
1092                break;
1093        case 88200:
1094                emu_samplerate_id = EMU_QUIRK_SR_88200HZ;
1095                break;
1096        case 96000:
1097                emu_samplerate_id = EMU_QUIRK_SR_96000HZ;
1098                break;
1099        case 176400:
1100                emu_samplerate_id = EMU_QUIRK_SR_176400HZ;
1101                break;
1102        case 192000:
1103                emu_samplerate_id = EMU_QUIRK_SR_192000HZ;
1104                break;
1105        default:
1106                emu_samplerate_id = EMU_QUIRK_SR_44100HZ;
1107                break;
1108        }
1109        snd_emuusb_set_samplerate(subs->stream->chip, emu_samplerate_id);
1110        subs->pkt_offset_adj = (emu_samplerate_id >= EMU_QUIRK_SR_176400HZ) ? 4 : 0;
1111}
1112
1113void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
1114                              struct audioformat *fmt)
1115{
1116        switch (subs->stream->chip->usb_id) {
1117        case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */
1118        case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */
1119        case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */
1120        case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */
1121                set_format_emu_quirk(subs, fmt);
1122                break;
1123        }
1124}
1125
1126bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
1127{
1128        /* devices which do not support reading the sample rate. */
1129        switch (chip->usb_id) {
1130        case USB_ID(0x041E, 0x4080): /* Creative Live Cam VF0610 */
1131        case USB_ID(0x045E, 0x075D): /* MS Lifecam Cinema  */
1132        case USB_ID(0x045E, 0x076D): /* MS Lifecam HD-5000 */
1133        case USB_ID(0x045E, 0x076E): /* MS Lifecam HD-5001 */
1134        case USB_ID(0x045E, 0x076F): /* MS Lifecam HD-6000 */
1135        case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */
1136        case USB_ID(0x045E, 0x0779): /* MS Lifecam HD-3000 */
1137        case USB_ID(0x047F, 0x02F7): /* Plantronics BT-600 */
1138        case USB_ID(0x047F, 0x0415): /* Plantronics BT-300 */
1139        case USB_ID(0x047F, 0xAA05): /* Plantronics DA45 */
1140        case USB_ID(0x047F, 0xC022): /* Plantronics C310 */
1141        case USB_ID(0x047F, 0xC02F): /* Plantronics P610 */
1142        case USB_ID(0x047F, 0xC036): /* Plantronics C520-M */
1143        case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
1144        case USB_ID(0x0556, 0x0014): /* Phoenix Audio TMX320VC */
1145        case USB_ID(0x05A3, 0x9420): /* ELP HD USB Camera */
1146        case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
1147        case USB_ID(0x1395, 0x740a): /* Sennheiser DECT */
1148        case USB_ID(0x1901, 0x0191): /* GE B850V3 CP2114 audio interface */
1149        case USB_ID(0x1de7, 0x0013): /* Phoenix Audio MT202exe */
1150        case USB_ID(0x1de7, 0x0014): /* Phoenix Audio TMX320 */
1151        case USB_ID(0x1de7, 0x0114): /* Phoenix Audio MT202pcs */
1152        case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
1153                return true;
1154        }
1155        return false;
1156}
1157
1158/* Marantz/Denon USB DACs need a vendor cmd to switch
1159 * between PCM and native DSD mode
1160 */
1161static bool is_marantz_denon_dac(unsigned int id)
1162{
1163        switch (id) {
1164        case USB_ID(0x154e, 0x1003): /* Denon DA-300USB */
1165        case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */
1166        case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */
1167                return true;
1168        }
1169        return false;
1170}
1171
1172/* TEAC UD-501/UD-503/NT-503 USB DACs need a vendor cmd to switch
1173 * between PCM/DOP and native DSD mode
1174 */
1175static bool is_teac_50X_dac(unsigned int id)
1176{
1177        switch (id) {
1178        case USB_ID(0x0644, 0x8043): /* TEAC UD-501/UD-503/NT-503 */
1179                return true;
1180        }
1181        return false;
1182}
1183
1184int snd_usb_select_mode_quirk(struct snd_usb_substream *subs,
1185                              struct audioformat *fmt)
1186{
1187        struct usb_device *dev = subs->dev;
1188        int err;
1189
1190        if (is_marantz_denon_dac(subs->stream->chip->usb_id)) {
1191                /* First switch to alt set 0, otherwise the mode switch cmd
1192                 * will not be accepted by the DAC
1193                 */
1194                err = usb_set_interface(dev, fmt->iface, 0);
1195                if (err < 0)
1196                        return err;
1197
1198                mdelay(20); /* Delay needed after setting the interface */
1199
1200                switch (fmt->altsetting) {
1201                case 2: /* DSD mode requested */
1202                case 1: /* PCM mode requested */
1203                        err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0,
1204                                              USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
1205                                              fmt->altsetting - 1, 1, NULL, 0);
1206                        if (err < 0)
1207                                return err;
1208                        break;
1209                }
1210                mdelay(20);
1211        } else if (is_teac_50X_dac(subs->stream->chip->usb_id)) {
1212                /* Vendor mode switch cmd is required. */
1213                switch (fmt->altsetting) {
1214                case 3: /* DSD mode (DSD_U32) requested */
1215                        err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0,
1216                                              USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
1217                                              1, 1, NULL, 0);
1218                        if (err < 0)
1219                                return err;
1220                        break;
1221
1222                case 2: /* PCM or DOP mode (S32) requested */
1223                case 1: /* PCM mode (S16) requested */
1224                        err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0,
1225                                              USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
1226                                              0, 1, NULL, 0);
1227                        if (err < 0)
1228                                return err;
1229                        break;
1230                }
1231        }
1232        return 0;
1233}
1234
1235void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
1236{
1237        /*
1238         * "Playback Design" products send bogus feedback data at the start
1239         * of the stream. Ignore them.
1240         */
1241        if (USB_ID_VENDOR(ep->chip->usb_id) == 0x23ba &&
1242            ep->type == SND_USB_ENDPOINT_TYPE_SYNC)
1243                ep->skip_packets = 4;
1244
1245        /*
1246         * M-Audio Fast Track C400/C600 - when packets are not skipped, real
1247         * world latency varies by approx. +/- 50 frames (at 96KHz) each time
1248         * the stream is (re)started. When skipping packets 16 at endpoint
1249         * start up, the real world latency is stable within +/- 1 frame (also
1250         * across power cycles).
1251         */
1252        if ((ep->chip->usb_id == USB_ID(0x0763, 0x2030) ||
1253             ep->chip->usb_id == USB_ID(0x0763, 0x2031)) &&
1254            ep->type == SND_USB_ENDPOINT_TYPE_DATA)
1255                ep->skip_packets = 16;
1256
1257        /* Work around devices that report unreasonable feedback data */
1258        if ((ep->chip->usb_id == USB_ID(0x0644, 0x8038) ||  /* TEAC UD-H01 */
1259             ep->chip->usb_id == USB_ID(0x1852, 0x5034)) && /* T+A Dac8 */
1260            ep->syncmaxsize == 4)
1261                ep->tenor_fb_quirk = 1;
1262}
1263
1264void snd_usb_set_interface_quirk(struct usb_device *dev)
1265{
1266        struct snd_usb_audio *chip = dev_get_drvdata(&dev->dev);
1267
1268        if (!chip)
1269                return;
1270        /*
1271         * "Playback Design" products need a 50ms delay after setting the
1272         * USB interface.
1273         */
1274        switch (USB_ID_VENDOR(chip->usb_id)) {
1275        case 0x23ba: /* Playback Design */
1276        case 0x0644: /* TEAC Corp. */
1277                mdelay(50);
1278                break;
1279        }
1280}
1281
1282/* quirk applied after snd_usb_ctl_msg(); not applied during boot quirks */
1283void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
1284                           __u8 request, __u8 requesttype, __u16 value,
1285                           __u16 index, void *data, __u16 size)
1286{
1287        struct snd_usb_audio *chip = dev_get_drvdata(&dev->dev);
1288
1289        if (!chip)
1290                return;
1291        /*
1292         * "Playback Design" products need a 20ms delay after each
1293         * class compliant request
1294         */
1295        if (USB_ID_VENDOR(chip->usb_id) == 0x23ba &&
1296            (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1297                mdelay(20);
1298
1299        /*
1300         * "TEAC Corp." products need a 20ms delay after each
1301         * class compliant request
1302         */
1303        if (USB_ID_VENDOR(chip->usb_id) == 0x0644 &&
1304            (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1305                mdelay(20);
1306
1307        /* Marantz/Denon devices with USB DAC functionality need a delay
1308         * after each class compliant request
1309         */
1310        if (is_marantz_denon_dac(chip->usb_id)
1311            && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1312                mdelay(20);
1313
1314        /* Zoom R16/24, Logitech H650e, Jabra 550a needs a tiny delay here,
1315         * otherwise requests like get/set frequency return as failed despite
1316         * actually succeeding.
1317         */
1318        if ((chip->usb_id == USB_ID(0x1686, 0x00dd) ||
1319             chip->usb_id == USB_ID(0x046d, 0x0a46) ||
1320             chip->usb_id == USB_ID(0x0b0e, 0x0349)) &&
1321            (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1322                mdelay(1);
1323}
1324
1325/*
1326 * snd_usb_interface_dsd_format_quirks() is called from format.c to
1327 * augment the PCM format bit-field for DSD types. The UAC standards
1328 * don't have a designated bit field to denote DSD-capable interfaces,
1329 * hence all hardware that is known to support this format has to be
1330 * listed here.
1331 */
1332u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
1333                                        struct audioformat *fp,
1334                                        unsigned int sample_bytes)
1335{
1336        /* Playback Designs */
1337        if (USB_ID_VENDOR(chip->usb_id) == 0x23ba) {
1338                switch (fp->altsetting) {
1339                case 1:
1340                        fp->dsd_dop = true;
1341                        return SNDRV_PCM_FMTBIT_DSD_U16_LE;
1342                case 2:
1343                        fp->dsd_bitrev = true;
1344                        return SNDRV_PCM_FMTBIT_DSD_U8;
1345                case 3:
1346                        fp->dsd_bitrev = true;
1347                        return SNDRV_PCM_FMTBIT_DSD_U16_LE;
1348                }
1349        }
1350
1351        /* XMOS based USB DACs */
1352        switch (chip->usb_id) {
1353        case USB_ID(0x20b1, 0x3008): /* iFi Audio micro/nano iDSD */
1354        case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */
1355        case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */
1356        case USB_ID(0x22d9, 0x0416): /* OPPO HA-1 */
1357        case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */
1358                if (fp->altsetting == 2)
1359                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1360                break;
1361
1362        case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */
1363        case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
1364        case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */
1365        case USB_ID(0x20b1, 0x3023): /* Aune X1S 32BIT/384 DSD DAC */
1366        case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */
1367                if (fp->altsetting == 3)
1368                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1369                break;
1370
1371        /* Amanero Combo384 USB interface with native DSD support */
1372        case USB_ID(0x16d0, 0x071a):
1373                if (fp->altsetting == 2) {
1374                        switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) {
1375                        case 0x199:
1376                                return SNDRV_PCM_FMTBIT_DSD_U32_LE;
1377                        case 0x19b:
1378                        case 0x203:
1379                                return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1380                        default:
1381                                break;
1382                        }
1383                }
1384                break;
1385        case USB_ID(0x16d0, 0x0a23):
1386                if (fp->altsetting == 2)
1387                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1388                break;
1389
1390        default:
1391                break;
1392        }
1393
1394        /* Denon/Marantz devices with USB DAC functionality */
1395        if (is_marantz_denon_dac(chip->usb_id)) {
1396                if (fp->altsetting == 2)
1397                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1398        }
1399
1400        /* TEAC devices with USB DAC functionality */
1401        if (is_teac_50X_dac(chip->usb_id)) {
1402                if (fp->altsetting == 3)
1403                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1404        }
1405
1406        return 0;
1407}
1408