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(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
1132        case USB_ID(0x0556, 0x0014): /* Phoenix Audio TMX320VC */
1133        case USB_ID(0x05A3, 0x9420): /* ELP HD USB Camera */
1134        case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
1135        case USB_ID(0x1395, 0x740a): /* Sennheiser DECT */
1136        case USB_ID(0x1901, 0x0191): /* GE B850V3 CP2114 audio interface */
1137        case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
1138                return true;
1139        }
1140
1141        /* devices of these vendors don't support reading rate, either */
1142        switch (USB_ID_VENDOR(chip->usb_id)) {
1143        case 0x045E: /* MS Lifecam */
1144        case 0x047F: /* Plantronics */
1145        case 0x1de7: /* Phoenix Audio */
1146                return true;
1147        }
1148
1149        return false;
1150}
1151
1152/* ITF-USB DSD based DACs need a vendor cmd to switch
1153 * between PCM and native DSD mode
1154 */
1155static bool is_itf_usb_dsd_dac(unsigned int id)
1156{
1157        switch (id) {
1158        case USB_ID(0x154e, 0x1003): /* Denon DA-300USB */
1159        case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */
1160        case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */
1161        case USB_ID(0x1852, 0x5065): /* Luxman DA-06 */
1162        case USB_ID(0x0644, 0x8043): /* TEAC UD-501/UD-501V2/UD-503/NT-503 */
1163        case USB_ID(0x0644, 0x8044): /* Esoteric D-05X */
1164        case USB_ID(0x0644, 0x804a): /* TEAC UD-301 */
1165                return true;
1166        }
1167        return false;
1168}
1169
1170int snd_usb_select_mode_quirk(struct snd_usb_substream *subs,
1171                              struct audioformat *fmt)
1172{
1173        struct usb_device *dev = subs->dev;
1174        int err;
1175
1176        if (is_itf_usb_dsd_dac(subs->stream->chip->usb_id)) {
1177                /* First switch to alt set 0, otherwise the mode switch cmd
1178                 * will not be accepted by the DAC
1179                 */
1180                err = usb_set_interface(dev, fmt->iface, 0);
1181                if (err < 0)
1182                        return err;
1183
1184                mdelay(20); /* Delay needed after setting the interface */
1185
1186                /* Vendor mode switch cmd is required. */
1187                if (fmt->formats & SNDRV_PCM_FMTBIT_DSD_U32_BE) {
1188                        /* DSD mode (DSD_U32) requested */
1189                        err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0,
1190                                              USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
1191                                              1, 1, NULL, 0);
1192                        if (err < 0)
1193                                return err;
1194
1195                } else {
1196                        /* PCM or DOP mode (S32) requested */
1197                        /* PCM mode (S16) requested */
1198                        err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0,
1199                                              USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_INTERFACE,
1200                                              0, 1, NULL, 0);
1201                        if (err < 0)
1202                                return err;
1203
1204                }
1205                mdelay(20);
1206        }
1207        return 0;
1208}
1209
1210void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
1211{
1212        /*
1213         * "Playback Design" products send bogus feedback data at the start
1214         * of the stream. Ignore them.
1215         */
1216        if (USB_ID_VENDOR(ep->chip->usb_id) == 0x23ba &&
1217            ep->type == SND_USB_ENDPOINT_TYPE_SYNC)
1218                ep->skip_packets = 4;
1219
1220        /*
1221         * M-Audio Fast Track C400/C600 - when packets are not skipped, real
1222         * world latency varies by approx. +/- 50 frames (at 96KHz) each time
1223         * the stream is (re)started. When skipping packets 16 at endpoint
1224         * start up, the real world latency is stable within +/- 1 frame (also
1225         * across power cycles).
1226         */
1227        if ((ep->chip->usb_id == USB_ID(0x0763, 0x2030) ||
1228             ep->chip->usb_id == USB_ID(0x0763, 0x2031)) &&
1229            ep->type == SND_USB_ENDPOINT_TYPE_DATA)
1230                ep->skip_packets = 16;
1231
1232        /* Work around devices that report unreasonable feedback data */
1233        if ((ep->chip->usb_id == USB_ID(0x0644, 0x8038) ||  /* TEAC UD-H01 */
1234             ep->chip->usb_id == USB_ID(0x1852, 0x5034)) && /* T+A Dac8 */
1235            ep->syncmaxsize == 4)
1236                ep->tenor_fb_quirk = 1;
1237}
1238
1239void snd_usb_set_interface_quirk(struct usb_device *dev)
1240{
1241        struct snd_usb_audio *chip = dev_get_drvdata(&dev->dev);
1242
1243        if (!chip)
1244                return;
1245        /*
1246         * "Playback Design" products need a 50ms delay after setting the
1247         * USB interface.
1248         */
1249        switch (USB_ID_VENDOR(chip->usb_id)) {
1250        case 0x23ba: /* Playback Design */
1251        case 0x0644: /* TEAC Corp. */
1252                mdelay(50);
1253                break;
1254        }
1255}
1256
1257/* quirk applied after snd_usb_ctl_msg(); not applied during boot quirks */
1258void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
1259                           __u8 request, __u8 requesttype, __u16 value,
1260                           __u16 index, void *data, __u16 size)
1261{
1262        struct snd_usb_audio *chip = dev_get_drvdata(&dev->dev);
1263
1264        if (!chip)
1265                return;
1266        /*
1267         * "Playback Design" products need a 20ms delay after each
1268         * class compliant request
1269         */
1270        if (USB_ID_VENDOR(chip->usb_id) == 0x23ba &&
1271            (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1272                mdelay(20);
1273
1274        /*
1275         * "TEAC Corp." products need a 20ms delay after each
1276         * class compliant request
1277         */
1278        if (USB_ID_VENDOR(chip->usb_id) == 0x0644 &&
1279            (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1280                mdelay(20);
1281
1282        /* ITF-USB DSD based DACs functionality need a delay
1283         * after each class compliant request
1284         */
1285        if (is_itf_usb_dsd_dac(chip->usb_id)
1286            && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1287                mdelay(20);
1288
1289        /* Zoom R16/24, Logitech H650e, Jabra 550a needs a tiny delay here,
1290         * otherwise requests like get/set frequency return as failed despite
1291         * actually succeeding.
1292         */
1293        if ((chip->usb_id == USB_ID(0x1686, 0x00dd) ||
1294             chip->usb_id == USB_ID(0x046d, 0x0a46) ||
1295             chip->usb_id == USB_ID(0x0b0e, 0x0349)) &&
1296            (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1297                mdelay(1);
1298}
1299
1300/*
1301 * snd_usb_interface_dsd_format_quirks() is called from format.c to
1302 * augment the PCM format bit-field for DSD types. The UAC standards
1303 * don't have a designated bit field to denote DSD-capable interfaces,
1304 * hence all hardware that is known to support this format has to be
1305 * listed here.
1306 */
1307u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
1308                                        struct audioformat *fp,
1309                                        unsigned int sample_bytes)
1310{
1311        struct usb_interface *iface;
1312
1313        /* Playback Designs */
1314        if (USB_ID_VENDOR(chip->usb_id) == 0x23ba) {
1315                switch (fp->altsetting) {
1316                case 1:
1317                        fp->dsd_dop = true;
1318                        return SNDRV_PCM_FMTBIT_DSD_U16_LE;
1319                case 2:
1320                        fp->dsd_bitrev = true;
1321                        return SNDRV_PCM_FMTBIT_DSD_U8;
1322                case 3:
1323                        fp->dsd_bitrev = true;
1324                        return SNDRV_PCM_FMTBIT_DSD_U16_LE;
1325                }
1326        }
1327
1328        /* XMOS based USB DACs */
1329        switch (chip->usb_id) {
1330        case USB_ID(0x20b1, 0x3008): /* iFi Audio micro/nano iDSD */
1331        case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */
1332        case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */
1333        case USB_ID(0x22d9, 0x0416): /* OPPO HA-1 */
1334        case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */
1335                if (fp->altsetting == 2)
1336                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1337                break;
1338
1339        case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */
1340        case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
1341        case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */
1342        case USB_ID(0x20b1, 0x3023): /* Aune X1S 32BIT/384 DSD DAC */
1343        case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */
1344                if (fp->altsetting == 3)
1345                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1346                break;
1347
1348        /* Amanero Combo384 USB based DACs with native DSD support */
1349        case USB_ID(0x16d0, 0x071a):  /* Amanero - Combo384 */
1350        case USB_ID(0x2ab6, 0x0004):  /* T+A DAC8DSD-V2.0, MP1000E-V2.0, MP2000R-V2.0, MP2500R-V2.0, MP3100HV-V2.0 */
1351        case USB_ID(0x2ab6, 0x0005):  /* T+A USB HD Audio 1 */
1352        case USB_ID(0x2ab6, 0x0006):  /* T+A USB HD Audio 2 */
1353                if (fp->altsetting == 2) {
1354                        switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) {
1355                        case 0x199:
1356                                return SNDRV_PCM_FMTBIT_DSD_U32_LE;
1357                        case 0x19b:
1358                        case 0x203:
1359                                return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1360                        default:
1361                                break;
1362                        }
1363                }
1364                break;
1365        case USB_ID(0x16d0, 0x0a23):
1366                if (fp->altsetting == 2)
1367                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1368                break;
1369
1370        default:
1371                break;
1372        }
1373
1374        /* ITF-USB DSD based DACs */
1375        if (is_itf_usb_dsd_dac(chip->usb_id)) {
1376                iface = usb_ifnum_to_if(chip->dev, fp->iface);
1377
1378                /* Altsetting 2 support native DSD if the num of altsets is
1379                 * three (0-2),
1380                 * Altsetting 3 support native DSD if the num of altsets is
1381                 * four (0-3).
1382                 */
1383                if (fp->altsetting == iface->num_altsetting - 1)
1384                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
1385        }
1386
1387        return 0;
1388}
1389
1390void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip,
1391                                          struct audioformat *fp,
1392                                          int stream)
1393{
1394        switch (chip->usb_id) {
1395        case USB_ID(0x0a92, 0x0053): /* AudioTrak Optoplay */
1396                /* Optoplay sets the sample rate attribute although
1397                 * it seems not supporting it in fact.
1398                 */
1399                fp->attributes &= ~UAC_EP_CS_ATTR_SAMPLE_RATE;
1400                break;
1401        case USB_ID(0x041e, 0x3020): /* Creative SB Audigy 2 NX */
1402        case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
1403                /* doesn't set the sample rate attribute, but supports it */
1404                fp->attributes |= UAC_EP_CS_ATTR_SAMPLE_RATE;
1405                break;
1406        case USB_ID(0x0763, 0x2001):  /* M-Audio Quattro USB */
1407        case USB_ID(0x0763, 0x2012):  /* M-Audio Fast Track Pro USB */
1408        case USB_ID(0x047f, 0x0ca1): /* plantronics headset */
1409        case USB_ID(0x077d, 0x07af): /* Griffin iMic (note that there is
1410                                        an older model 77d:223) */
1411        /*
1412         * plantronics headset and Griffin iMic have set adaptive-in
1413         * although it's really not...
1414         */
1415                fp->ep_attr &= ~USB_ENDPOINT_SYNCTYPE;
1416                if (stream == SNDRV_PCM_STREAM_PLAYBACK)
1417                        fp->ep_attr |= USB_ENDPOINT_SYNC_ADAPTIVE;
1418                else
1419                        fp->ep_attr |= USB_ENDPOINT_SYNC_SYNC;
1420                break;
1421        }
1422}
1423