|
@@ -662,7 +662,6 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
|
|
|
* (fp->maxpacksize & 0x7ff);
|
|
|
fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no);
|
|
|
fp->clock = clock;
|
|
|
- fp->chmap = convert_chmap(num_channels, chconfig, protocol);
|
|
|
|
|
|
/* some quirks for attributes here */
|
|
|
|
|
@@ -698,12 +697,16 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
|
|
|
/* ok, let's parse further... */
|
|
|
if (snd_usb_parse_audio_format(chip, fp, format, fmt, stream) < 0) {
|
|
|
kfree(fp->rate_table);
|
|
|
- kfree(fp->chmap);
|
|
|
kfree(fp);
|
|
|
fp = NULL;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ /* Create chmap */
|
|
|
+ if (fp->channels != num_channels)
|
|
|
+ chconfig = 0;
|
|
|
+ fp->chmap = convert_chmap(fp->channels, chconfig, protocol);
|
|
|
+
|
|
|
snd_printdd(KERN_INFO "%d:%u:%d: add audio endpoint %#x\n", dev->devnum, iface_no, altno, fp->endpoint);
|
|
|
err = snd_usb_add_audio_stream(chip, stream, fp);
|
|
|
if (err < 0) {
|