GNU Linux-libre 5.10.76-gnu1
[releases.git] / sound / usb / format.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  */
4
5 #include <linux/init.h>
6 #include <linux/slab.h>
7 #include <linux/usb.h>
8 #include <linux/usb/audio.h>
9 #include <linux/usb/audio-v2.h>
10 #include <linux/usb/audio-v3.h>
11
12 #include <sound/core.h>
13 #include <sound/pcm.h>
14
15 #include "usbaudio.h"
16 #include "card.h"
17 #include "quirks.h"
18 #include "helper.h"
19 #include "debug.h"
20 #include "clock.h"
21 #include "format.h"
22
23 /*
24  * parse the audio format type I descriptor
25  * and returns the corresponding pcm format
26  *
27  * @dev: usb device
28  * @fp: audioformat record
29  * @format: the format tag (wFormatTag)
30  * @fmt: the format type descriptor (v1/v2) or AudioStreaming descriptor (v3)
31  */
32 static u64 parse_audio_format_i_type(struct snd_usb_audio *chip,
33                                      struct audioformat *fp,
34                                      u64 format, void *_fmt)
35 {
36         int sample_width, sample_bytes;
37         u64 pcm_formats = 0;
38
39         switch (fp->protocol) {
40         case UAC_VERSION_1:
41         default: {
42                 struct uac_format_type_i_discrete_descriptor *fmt = _fmt;
43                 if (format >= 64)
44                         return 0; /* invalid format */
45                 sample_width = fmt->bBitResolution;
46                 sample_bytes = fmt->bSubframeSize;
47                 format = 1ULL << format;
48                 break;
49         }
50
51         case UAC_VERSION_2: {
52                 struct uac_format_type_i_ext_descriptor *fmt = _fmt;
53                 sample_width = fmt->bBitResolution;
54                 sample_bytes = fmt->bSubslotSize;
55
56                 if (format & UAC2_FORMAT_TYPE_I_RAW_DATA) {
57                         pcm_formats |= SNDRV_PCM_FMTBIT_SPECIAL;
58                         /* flag potentially raw DSD capable altsettings */
59                         fp->dsd_raw = true;
60                 }
61
62                 format <<= 1;
63                 break;
64         }
65         case UAC_VERSION_3: {
66                 struct uac3_as_header_descriptor *as = _fmt;
67
68                 sample_width = as->bBitResolution;
69                 sample_bytes = as->bSubslotSize;
70
71                 if (format & UAC3_FORMAT_TYPE_I_RAW_DATA)
72                         pcm_formats |= SNDRV_PCM_FMTBIT_SPECIAL;
73
74                 format <<= 1;
75                 break;
76         }
77         }
78
79         fp->fmt_bits = sample_width;
80
81         if ((pcm_formats == 0) &&
82             (format == 0 || format == (1 << UAC_FORMAT_TYPE_I_UNDEFINED))) {
83                 /* some devices don't define this correctly... */
84                 usb_audio_info(chip, "%u:%d : format type 0 is detected, processed as PCM\n",
85                         fp->iface, fp->altsetting);
86                 format = 1 << UAC_FORMAT_TYPE_I_PCM;
87         }
88         if (format & (1 << UAC_FORMAT_TYPE_I_PCM)) {
89                 if (((chip->usb_id == USB_ID(0x0582, 0x0016)) ||
90                      /* Edirol SD-90 */
91                      (chip->usb_id == USB_ID(0x0582, 0x000c))) &&
92                      /* Roland SC-D70 */
93                     sample_width == 24 && sample_bytes == 2)
94                         sample_bytes = 3;
95                 else if (sample_width > sample_bytes * 8) {
96                         usb_audio_info(chip, "%u:%d : sample bitwidth %d in over sample bytes %d\n",
97                                  fp->iface, fp->altsetting,
98                                  sample_width, sample_bytes);
99                 }
100                 /* check the format byte size */
101                 switch (sample_bytes) {
102                 case 1:
103                         pcm_formats |= SNDRV_PCM_FMTBIT_S8;
104                         break;
105                 case 2:
106                         if (snd_usb_is_big_endian_format(chip, fp))
107                                 pcm_formats |= SNDRV_PCM_FMTBIT_S16_BE; /* grrr, big endian!! */
108                         else
109                                 pcm_formats |= SNDRV_PCM_FMTBIT_S16_LE;
110                         break;
111                 case 3:
112                         if (snd_usb_is_big_endian_format(chip, fp))
113                                 pcm_formats |= SNDRV_PCM_FMTBIT_S24_3BE; /* grrr, big endian!! */
114                         else
115                                 pcm_formats |= SNDRV_PCM_FMTBIT_S24_3LE;
116                         break;
117                 case 4:
118                         pcm_formats |= SNDRV_PCM_FMTBIT_S32_LE;
119                         break;
120                 default:
121                         usb_audio_info(chip,
122                                  "%u:%d : unsupported sample bitwidth %d in %d bytes\n",
123                                  fp->iface, fp->altsetting,
124                                  sample_width, sample_bytes);
125                         break;
126                 }
127         }
128         if (format & (1 << UAC_FORMAT_TYPE_I_PCM8)) {
129                 /* Dallas DS4201 workaround: it advertises U8 format, but really
130                    supports S8. */
131                 if (chip->usb_id == USB_ID(0x04fa, 0x4201))
132                         pcm_formats |= SNDRV_PCM_FMTBIT_S8;
133                 else
134                         pcm_formats |= SNDRV_PCM_FMTBIT_U8;
135         }
136         if (format & (1 << UAC_FORMAT_TYPE_I_IEEE_FLOAT)) {
137                 pcm_formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
138         }
139         if (format & (1 << UAC_FORMAT_TYPE_I_ALAW)) {
140                 pcm_formats |= SNDRV_PCM_FMTBIT_A_LAW;
141         }
142         if (format & (1 << UAC_FORMAT_TYPE_I_MULAW)) {
143                 pcm_formats |= SNDRV_PCM_FMTBIT_MU_LAW;
144         }
145         if (format & ~0x3f) {
146                 usb_audio_info(chip,
147                          "%u:%d : unsupported format bits %#llx\n",
148                          fp->iface, fp->altsetting, format);
149         }
150
151         pcm_formats |= snd_usb_interface_dsd_format_quirks(chip, fp, sample_bytes);
152
153         return pcm_formats;
154 }
155
156 static int set_fixed_rate(struct audioformat *fp, int rate, int rate_bits)
157 {
158         kfree(fp->rate_table);
159         fp->rate_table = kmalloc(sizeof(int), GFP_KERNEL);
160         if (!fp->rate_table)
161                 return -ENOMEM;
162         fp->nr_rates = 1;
163         fp->rate_min = rate;
164         fp->rate_max = rate;
165         fp->rates = rate_bits;
166         fp->rate_table[0] = rate;
167         return 0;
168 }
169
170 /*
171  * parse the format descriptor and stores the possible sample rates
172  * on the audioformat table (audio class v1).
173  *
174  * @dev: usb device
175  * @fp: audioformat record
176  * @fmt: the format descriptor
177  * @offset: the start offset of descriptor pointing the rate type
178  *          (7 for type I and II, 8 for type II)
179  */
180 static int parse_audio_format_rates_v1(struct snd_usb_audio *chip, struct audioformat *fp,
181                                        unsigned char *fmt, int offset)
182 {
183         int nr_rates = fmt[offset];
184
185         if (fmt[0] < offset + 1 + 3 * (nr_rates ? nr_rates : 2)) {
186                 usb_audio_err(chip,
187                         "%u:%d : invalid UAC_FORMAT_TYPE desc\n",
188                         fp->iface, fp->altsetting);
189                 return -EINVAL;
190         }
191
192         if (nr_rates) {
193                 /*
194                  * build the rate table and bitmap flags
195                  */
196                 int r, idx;
197
198                 fp->rate_table = kmalloc_array(nr_rates, sizeof(int),
199                                                GFP_KERNEL);
200                 if (fp->rate_table == NULL)
201                         return -ENOMEM;
202
203                 fp->nr_rates = 0;
204                 fp->rate_min = fp->rate_max = 0;
205                 for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) {
206                         unsigned int rate = combine_triple(&fmt[idx]);
207                         if (!rate)
208                                 continue;
209                         /* C-Media CM6501 mislabels its 96 kHz altsetting */
210                         /* Terratec Aureon 7.1 USB C-Media 6206, too */
211                         /* Ozone Z90 USB C-Media, too */
212                         if (rate == 48000 && nr_rates == 1 &&
213                             (chip->usb_id == USB_ID(0x0d8c, 0x0201) ||
214                              chip->usb_id == USB_ID(0x0d8c, 0x0102) ||
215                              chip->usb_id == USB_ID(0x0d8c, 0x0078) ||
216                              chip->usb_id == USB_ID(0x0ccd, 0x00b1)) &&
217                             fp->altsetting == 5 && fp->maxpacksize == 392)
218                                 rate = 96000;
219                         /* Creative VF0420/VF0470 Live Cams report 16 kHz instead of 8kHz */
220                         if (rate == 16000 &&
221                             (chip->usb_id == USB_ID(0x041e, 0x4064) ||
222                              chip->usb_id == USB_ID(0x041e, 0x4068)))
223                                 rate = 8000;
224
225                         fp->rate_table[fp->nr_rates] = rate;
226                         if (!fp->rate_min || rate < fp->rate_min)
227                                 fp->rate_min = rate;
228                         if (!fp->rate_max || rate > fp->rate_max)
229                                 fp->rate_max = rate;
230                         fp->rates |= snd_pcm_rate_to_rate_bit(rate);
231                         fp->nr_rates++;
232                 }
233                 if (!fp->nr_rates) {
234                         hwc_debug("All rates were zero. Skipping format!\n");
235                         return -EINVAL;
236                 }
237         } else {
238                 /* continuous rates */
239                 fp->rates = SNDRV_PCM_RATE_CONTINUOUS;
240                 fp->rate_min = combine_triple(&fmt[offset + 1]);
241                 fp->rate_max = combine_triple(&fmt[offset + 4]);
242         }
243
244         /* Jabra Evolve 65 headset */
245         if (chip->usb_id == USB_ID(0x0b0e, 0x030b)) {
246                 /* only 48kHz for playback while keeping 16kHz for capture */
247                 if (fp->nr_rates != 1)
248                         return set_fixed_rate(fp, 48000, SNDRV_PCM_RATE_48000);
249         }
250
251         return 0;
252 }
253
254
255 /*
256  * Presonus Studio 1810c supports a limited set of sampling
257  * rates per altsetting but reports the full set each time.
258  * If we don't filter out the unsupported rates and attempt
259  * to configure the card, it will hang refusing to do any
260  * further audio I/O until a hard reset is performed.
261  *
262  * The list of supported rates per altsetting (set of available
263  * I/O channels) is described in the owner's manual, section 2.2.
264  */
265 static bool s1810c_valid_sample_rate(struct audioformat *fp,
266                                      unsigned int rate)
267 {
268         switch (fp->altsetting) {
269         case 1:
270                 /* All ADAT ports available */
271                 return rate <= 48000;
272         case 2:
273                 /* Half of ADAT ports available */
274                 return (rate == 88200 || rate == 96000);
275         case 3:
276                 /* Analog I/O only (no S/PDIF nor ADAT) */
277                 return rate >= 176400;
278         default:
279                 return false;
280         }
281         return false;
282 }
283
284 /*
285  * Many Focusrite devices supports a limited set of sampling rates per
286  * altsetting. Maximum rate is exposed in the last 4 bytes of Format Type
287  * descriptor which has a non-standard bLength = 10.
288  */
289 static bool focusrite_valid_sample_rate(struct snd_usb_audio *chip,
290                                         struct audioformat *fp,
291                                         unsigned int rate)
292 {
293         struct usb_interface *iface;
294         struct usb_host_interface *alts;
295         unsigned char *fmt;
296         unsigned int max_rate;
297
298         iface = usb_ifnum_to_if(chip->dev, fp->iface);
299         if (!iface)
300                 return true;
301
302         alts = &iface->altsetting[fp->altset_idx];
303         fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen,
304                                       NULL, UAC_FORMAT_TYPE);
305         if (!fmt)
306                 return true;
307
308         if (fmt[0] == 10) { /* bLength */
309                 max_rate = combine_quad(&fmt[6]);
310
311                 /* Validate max rate */
312                 if (max_rate != 48000 &&
313                     max_rate != 96000 &&
314                     max_rate != 192000 &&
315                     max_rate != 384000) {
316
317                         usb_audio_info(chip,
318                                 "%u:%d : unexpected max rate: %u\n",
319                                 fp->iface, fp->altsetting, max_rate);
320
321                         return true;
322                 }
323
324                 return rate <= max_rate;
325         }
326
327         return true;
328 }
329
330 /*
331  * Helper function to walk the array of sample rate triplets reported by
332  * the device. The problem is that we need to parse whole array first to
333  * get to know how many sample rates we have to expect.
334  * Then fp->rate_table can be allocated and filled.
335  */
336 static int parse_uac2_sample_rate_range(struct snd_usb_audio *chip,
337                                         struct audioformat *fp, int nr_triplets,
338                                         const unsigned char *data)
339 {
340         int i, nr_rates = 0;
341
342         fp->rates = fp->rate_min = fp->rate_max = 0;
343
344         for (i = 0; i < nr_triplets; i++) {
345                 int min = combine_quad(&data[2 + 12 * i]);
346                 int max = combine_quad(&data[6 + 12 * i]);
347                 int res = combine_quad(&data[10 + 12 * i]);
348                 unsigned int rate;
349
350                 if ((max < 0) || (min < 0) || (res < 0) || (max < min))
351                         continue;
352
353                 /*
354                  * for ranges with res == 1, we announce a continuous sample
355                  * rate range, and this function should return 0 for no further
356                  * parsing.
357                  */
358                 if (res == 1) {
359                         fp->rate_min = min;
360                         fp->rate_max = max;
361                         fp->rates = SNDRV_PCM_RATE_CONTINUOUS;
362                         return 0;
363                 }
364
365                 for (rate = min; rate <= max; rate += res) {
366
367                         /* Filter out invalid rates on Presonus Studio 1810c */
368                         if (chip->usb_id == USB_ID(0x0194f, 0x010c) &&
369                             !s1810c_valid_sample_rate(fp, rate))
370                                 goto skip_rate;
371
372                         /* Filter out invalid rates on Focusrite devices */
373                         if (USB_ID_VENDOR(chip->usb_id) == 0x1235 &&
374                             !focusrite_valid_sample_rate(chip, fp, rate))
375                                 goto skip_rate;
376
377                         if (fp->rate_table)
378                                 fp->rate_table[nr_rates] = rate;
379                         if (!fp->rate_min || rate < fp->rate_min)
380                                 fp->rate_min = rate;
381                         if (!fp->rate_max || rate > fp->rate_max)
382                                 fp->rate_max = rate;
383                         fp->rates |= snd_pcm_rate_to_rate_bit(rate);
384
385                         nr_rates++;
386                         if (nr_rates >= MAX_NR_RATES) {
387                                 usb_audio_err(chip, "invalid uac2 rates\n");
388                                 break;
389                         }
390
391 skip_rate:
392                         /* avoid endless loop */
393                         if (res == 0)
394                                 break;
395                 }
396         }
397
398         return nr_rates;
399 }
400
401 /* Line6 Helix series and the Rode Rodecaster Pro don't support the
402  * UAC2_CS_RANGE usb function call. Return a static table of known
403  * clock rates.
404  */
405 static int line6_parse_audio_format_rates_quirk(struct snd_usb_audio *chip,
406                                                 struct audioformat *fp)
407 {
408         switch (chip->usb_id) {
409         case USB_ID(0x0e41, 0x4241): /* Line6 Helix */
410         case USB_ID(0x0e41, 0x4242): /* Line6 Helix Rack */
411         case USB_ID(0x0e41, 0x4244): /* Line6 Helix LT */
412         case USB_ID(0x0e41, 0x4246): /* Line6 HX-Stomp */
413         case USB_ID(0x0e41, 0x4247): /* Line6 Pod Go */
414         case USB_ID(0x0e41, 0x4248): /* Line6 Helix >= fw 2.82 */
415         case USB_ID(0x0e41, 0x4249): /* Line6 Helix Rack >= fw 2.82 */
416         case USB_ID(0x0e41, 0x424a): /* Line6 Helix LT >= fw 2.82 */
417         case USB_ID(0x19f7, 0x0011): /* Rode Rodecaster Pro */
418                 return set_fixed_rate(fp, 48000, SNDRV_PCM_RATE_48000);
419         }
420
421         return -ENODEV;
422 }
423
424 /*
425  * parse the format descriptor and stores the possible sample rates
426  * on the audioformat table (audio class v2 and v3).
427  */
428 static int parse_audio_format_rates_v2v3(struct snd_usb_audio *chip,
429                                        struct audioformat *fp)
430 {
431         struct usb_device *dev = chip->dev;
432         unsigned char tmp[2], *data;
433         int nr_triplets, data_size, ret = 0, ret_l6;
434         int clock = snd_usb_clock_find_source(chip, fp, false);
435
436         if (clock < 0) {
437                 dev_err(&dev->dev,
438                         "%s(): unable to find clock source (clock %d)\n",
439                                 __func__, clock);
440                 goto err;
441         }
442
443         /* get the number of sample rates first by only fetching 2 bytes */
444         ret = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_RANGE,
445                               USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
446                               UAC2_CS_CONTROL_SAM_FREQ << 8,
447                               snd_usb_ctrl_intf(chip) | (clock << 8),
448                               tmp, sizeof(tmp));
449
450         if (ret < 0) {
451                 /* line6 helix devices don't support UAC2_CS_CONTROL_SAM_FREQ call */
452                 ret_l6 = line6_parse_audio_format_rates_quirk(chip, fp);
453                 if (ret_l6 == -ENODEV) {
454                         /* no line6 device found continue showing the error */
455                         dev_err(&dev->dev,
456                                 "%s(): unable to retrieve number of sample rates (clock %d)\n",
457                                 __func__, clock);
458                         goto err;
459                 }
460                 if (ret_l6 == 0) {
461                         dev_info(&dev->dev,
462                                 "%s(): unable to retrieve number of sample rates: set it to a predefined value (clock %d).\n",
463                                 __func__, clock);
464                         return 0;
465                 }
466                 ret = ret_l6;
467                 goto err;
468         }
469
470         nr_triplets = (tmp[1] << 8) | tmp[0];
471         data_size = 2 + 12 * nr_triplets;
472         data = kzalloc(data_size, GFP_KERNEL);
473         if (!data) {
474                 ret = -ENOMEM;
475                 goto err;
476         }
477
478         /* now get the full information */
479         ret = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_RANGE,
480                               USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
481                               UAC2_CS_CONTROL_SAM_FREQ << 8,
482                               snd_usb_ctrl_intf(chip) | (clock << 8),
483                               data, data_size);
484
485         if (ret < 0) {
486                 dev_err(&dev->dev,
487                         "%s(): unable to retrieve sample rate range (clock %d)\n",
488                                 __func__, clock);
489                 ret = -EINVAL;
490                 goto err_free;
491         }
492
493         /* Call the triplet parser, and make sure fp->rate_table is NULL.
494          * We just use the return value to know how many sample rates we
495          * will have to deal with. */
496         kfree(fp->rate_table);
497         fp->rate_table = NULL;
498         fp->nr_rates = parse_uac2_sample_rate_range(chip, fp, nr_triplets, data);
499
500         if (fp->nr_rates == 0) {
501                 /* SNDRV_PCM_RATE_CONTINUOUS */
502                 ret = 0;
503                 goto err_free;
504         }
505
506         fp->rate_table = kmalloc_array(fp->nr_rates, sizeof(int), GFP_KERNEL);
507         if (!fp->rate_table) {
508                 ret = -ENOMEM;
509                 goto err_free;
510         }
511
512         /* Call the triplet parser again, but this time, fp->rate_table is
513          * allocated, so the rates will be stored */
514         parse_uac2_sample_rate_range(chip, fp, nr_triplets, data);
515
516 err_free:
517         kfree(data);
518 err:
519         return ret;
520 }
521
522 /*
523  * parse the format type I and III descriptors
524  */
525 static int parse_audio_format_i(struct snd_usb_audio *chip,
526                                 struct audioformat *fp, u64 format,
527                                 void *_fmt)
528 {
529         snd_pcm_format_t pcm_format;
530         unsigned int fmt_type;
531         int ret;
532
533         switch (fp->protocol) {
534         default:
535         case UAC_VERSION_1:
536         case UAC_VERSION_2: {
537                 struct uac_format_type_i_continuous_descriptor *fmt = _fmt;
538
539                 fmt_type = fmt->bFormatType;
540                 break;
541         }
542         case UAC_VERSION_3: {
543                 /* fp->fmt_type is already set in this case */
544                 fmt_type = fp->fmt_type;
545                 break;
546         }
547         }
548
549         if (fmt_type == UAC_FORMAT_TYPE_III) {
550                 /* FIXME: the format type is really IECxxx
551                  *        but we give normal PCM format to get the existing
552                  *        apps working...
553                  */
554                 switch (chip->usb_id) {
555
556                 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
557                         if (chip->setup == 0x00 && 
558                             fp->altsetting == 6)
559                                 pcm_format = SNDRV_PCM_FORMAT_S16_BE;
560                         else
561                                 pcm_format = SNDRV_PCM_FORMAT_S16_LE;
562                         break;
563                 default:
564                         pcm_format = SNDRV_PCM_FORMAT_S16_LE;
565                 }
566                 fp->formats = pcm_format_to_bits(pcm_format);
567         } else {
568                 fp->formats = parse_audio_format_i_type(chip, fp, format, _fmt);
569                 if (!fp->formats)
570                         return -EINVAL;
571         }
572
573         /* gather possible sample rates */
574         /* audio class v1 reports possible sample rates as part of the
575          * proprietary class specific descriptor.
576          * audio class v2 uses class specific EP0 range requests for that.
577          */
578         switch (fp->protocol) {
579         default:
580         case UAC_VERSION_1: {
581                 struct uac_format_type_i_continuous_descriptor *fmt = _fmt;
582
583                 fp->channels = fmt->bNrChannels;
584                 ret = parse_audio_format_rates_v1(chip, fp, (unsigned char *) fmt, 7);
585                 break;
586         }
587         case UAC_VERSION_2:
588         case UAC_VERSION_3: {
589                 /* fp->channels is already set in this case */
590                 ret = parse_audio_format_rates_v2v3(chip, fp);
591                 break;
592         }
593         }
594
595         if (fp->channels < 1) {
596                 usb_audio_err(chip,
597                         "%u:%d : invalid channels %d\n",
598                         fp->iface, fp->altsetting, fp->channels);
599                 return -EINVAL;
600         }
601
602         return ret;
603 }
604
605 /*
606  * parse the format type II descriptor
607  */
608 static int parse_audio_format_ii(struct snd_usb_audio *chip,
609                                  struct audioformat *fp,
610                                  u64 format, void *_fmt)
611 {
612         int brate, framesize, ret;
613
614         switch (format) {
615         case UAC_FORMAT_TYPE_II_AC3:
616                 /* FIXME: there is no AC3 format defined yet */
617                 // fp->formats = SNDRV_PCM_FMTBIT_AC3;
618                 fp->formats = SNDRV_PCM_FMTBIT_U8; /* temporary hack to receive byte streams */
619                 break;
620         case UAC_FORMAT_TYPE_II_MPEG:
621                 fp->formats = SNDRV_PCM_FMTBIT_MPEG;
622                 break;
623         default:
624                 usb_audio_info(chip,
625                          "%u:%d : unknown format tag %#llx is detected.  processed as MPEG.\n",
626                          fp->iface, fp->altsetting, format);
627                 fp->formats = SNDRV_PCM_FMTBIT_MPEG;
628                 break;
629         }
630
631         fp->channels = 1;
632
633         switch (fp->protocol) {
634         default:
635         case UAC_VERSION_1: {
636                 struct uac_format_type_ii_discrete_descriptor *fmt = _fmt;
637                 brate = le16_to_cpu(fmt->wMaxBitRate);
638                 framesize = le16_to_cpu(fmt->wSamplesPerFrame);
639                 usb_audio_info(chip, "found format II with max.bitrate = %d, frame size=%d\n", brate, framesize);
640                 fp->frame_size = framesize;
641                 ret = parse_audio_format_rates_v1(chip, fp, _fmt, 8); /* fmt[8..] sample rates */
642                 break;
643         }
644         case UAC_VERSION_2: {
645                 struct uac_format_type_ii_ext_descriptor *fmt = _fmt;
646                 brate = le16_to_cpu(fmt->wMaxBitRate);
647                 framesize = le16_to_cpu(fmt->wSamplesPerFrame);
648                 usb_audio_info(chip, "found format II with max.bitrate = %d, frame size=%d\n", brate, framesize);
649                 fp->frame_size = framesize;
650                 ret = parse_audio_format_rates_v2v3(chip, fp);
651                 break;
652         }
653         }
654
655         return ret;
656 }
657
658 int snd_usb_parse_audio_format(struct snd_usb_audio *chip,
659                                struct audioformat *fp, u64 format,
660                                struct uac_format_type_i_continuous_descriptor *fmt,
661                                int stream)
662 {
663         int err;
664
665         switch (fmt->bFormatType) {
666         case UAC_FORMAT_TYPE_I:
667         case UAC_FORMAT_TYPE_III:
668                 err = parse_audio_format_i(chip, fp, format, fmt);
669                 break;
670         case UAC_FORMAT_TYPE_II:
671                 err = parse_audio_format_ii(chip, fp, format, fmt);
672                 break;
673         default:
674                 usb_audio_info(chip,
675                          "%u:%d : format type %d is not supported yet\n",
676                          fp->iface, fp->altsetting,
677                          fmt->bFormatType);
678                 return -ENOTSUPP;
679         }
680         fp->fmt_type = fmt->bFormatType;
681         if (err < 0)
682                 return err;
683 #if 1
684         /* FIXME: temporary hack for extigy/audigy 2 nx/zs */
685         /* extigy apparently supports sample rates other than 48k
686          * but not in ordinary way.  so we enable only 48k atm.
687          */
688         if (chip->usb_id == USB_ID(0x041e, 0x3000) ||
689             chip->usb_id == USB_ID(0x041e, 0x3020) ||
690             chip->usb_id == USB_ID(0x041e, 0x3061)) {
691                 if (fmt->bFormatType == UAC_FORMAT_TYPE_I &&
692                     fp->rates != SNDRV_PCM_RATE_48000 &&
693                     fp->rates != SNDRV_PCM_RATE_96000)
694                         return -ENOTSUPP;
695         }
696 #endif
697         return 0;
698 }
699
700 int snd_usb_parse_audio_format_v3(struct snd_usb_audio *chip,
701                                struct audioformat *fp,
702                                struct uac3_as_header_descriptor *as,
703                                int stream)
704 {
705         u64 format = le64_to_cpu(as->bmFormats);
706         int err;
707
708         /*
709          * Type I format bits are D0..D6
710          * This test works because type IV is not supported
711          */
712         if (format & 0x7f)
713                 fp->fmt_type = UAC_FORMAT_TYPE_I;
714         else
715                 fp->fmt_type = UAC_FORMAT_TYPE_III;
716
717         err = parse_audio_format_i(chip, fp, format, as);
718         if (err < 0)
719                 return err;
720
721         return 0;
722 }