Re: [alsa-devel] [PATCH][RESEND] Add a USB audio quirk for the NuForce UDH-100 device.
David Helstroom wrote:
Interface 1 does not exist
Please try the patch below.
Regards, Clemens
--8<---------------------------------------------------------------->8-- ALSA: usb-audio: add a workaround for the NuForce UDH-100
The NuForce UDH-100 numbers its interfaces incorrectly, which makes the interface associations come out wrong, which results in the driver erroring out with the message "Audio class v2 interfaces need an interface association".
Work around this by searching for the interface association descriptor also in some other place where it might have ended up.
Reported-by: Dave Helstroom helstroom@google.com Signed-off-by: Clemens Ladisch clemens@ladisch.de --- sound/usb/card.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/sound/usb/card.c b/sound/usb/card.c index df2f6d0..34dc3e8 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -245,6 +245,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; }
At Mon, 11 Mar 2013 20:15:34 +0100, Clemens Ladisch wrote:
David Helstroom wrote:
Interface 1 does not exist
Please try the patch below.
Since the patch seems working, I merge it now.
thanks,
Takashi
Regards, Clemens
--8<---------------------------------------------------------------->8-- ALSA: usb-audio: add a workaround for the NuForce UDH-100
The NuForce UDH-100 numbers its interfaces incorrectly, which makes the interface associations come out wrong, which results in the driver erroring out with the message "Audio class v2 interfaces need an interface association".
Work around this by searching for the interface association descriptor also in some other place where it might have ended up.
Reported-by: Dave Helstroom helstroom@google.com Signed-off-by: Clemens Ladisch clemens@ladisch.de
sound/usb/card.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/sound/usb/card.c b/sound/usb/card.c index df2f6d0..34dc3e8 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -245,6 +245,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;
participants (2)
-
Clemens Ladisch
-
Takashi Iwai