diff options
Diffstat (limited to 'sound/usb/card.c')
| -rw-r--r-- | sound/usb/card.c | 15 | 
1 files changed, 15 insertions, 0 deletions
| diff --git a/sound/usb/card.c b/sound/usb/card.c index 803953a9bff..2da8ad75fd9 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -244,6 +244,21 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)  			usb_ifnum_to_if(dev, ctrlif)->intf_assoc;  		if (!assoc) { +			/* +			 * Firmware writers cannot count to three.  So to find +			 * the IAD on the NuForce UDH-100, also check the next +			 * interface. +			 */ +			struct usb_interface *iface = +				usb_ifnum_to_if(dev, ctrlif + 1); +			if (iface && +			    iface->intf_assoc && +			    iface->intf_assoc->bFunctionClass == USB_CLASS_AUDIO && +			    iface->intf_assoc->bFunctionProtocol == UAC_VERSION_2) +				assoc = iface->intf_assoc; +		} + +		if (!assoc) {  			snd_printk(KERN_ERR "Audio class v2 interfaces need an interface association\n");  			return -EINVAL;  		} |