relevant part of original NetBSD commit message which added this:
UQ_AU_INP_ASYNC for input devices that claim to be adaptive, but are
in fact asynchronous (an easy mistake to make unless you read the
specs carefully :)
the specs say no such thing.
the specs say:
a) input adaptive endpoints need a synchronization pipe
b) a device can use implied feedback in lieu of a synch-pipe
c) if bSynchAddress==0, a synch-pipe is not needed
point a) is very blatant in the usb audio spec. point b) is only
mentioned in the general usb spec. point c) is only mentioned once,
in the table describing the layout of the descriptor.
so, yes, this is difficult to understand, because it's hard to find
all the pieces to the puzzle. of NetBSD, FreeBSD, ALSA and OSS, none of
them really handle the case of bSynchAddress==0 correctly. I just
committed a fix to our driver.
anyway, I've googled for descriptor dumps of the devices this quirk
was applied to and found two of three:
yapphone:
http://www.gentooforum.de/artikel/17083/voip-yapphone-wird-nicht-erkannt.html
plantronics:
http://www.mail-archive.com/[email protected]/msg17344.html
as you can see they both have bSynchAddress==0 for the adaptive input
endpoints. I couldn't find the avancelogic device, but I'm certain it's
the same situation.
--
[email protected]
SDF Public Access UNIX System - http://sdf.lonestar.org
Index: usb_quirks.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/usb_quirks.h,v
retrieving revision 1.13
diff -u -p -r1.13 usb_quirks.h
--- usb_quirks.h 29 Jun 2008 10:04:15 -0000 1.13
+++ usb_quirks.h 15 Oct 2009 08:51:37 -0000
@@ -56,8 +56,6 @@ struct usbd_quirks {
#define UQ_POWER_CLAIM 0x00000200
/* don't adjust for fractional samples */
#define UQ_AU_NO_FRAC 0x00000400
- /* input is async despite claim of adaptive */
-#define UQ_AU_INP_ASYNC 0x00000800
/* modem device breaks on cm over data */
#define UQ_ASSUME_CM_OVER_DATA 0x00001000
/* printer has broken bidir mode */
Index: usb_quirks.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/usb_quirks.c,v
retrieving revision 1.52
diff -u -p -r1.52 usb_quirks.c
--- usb_quirks.c 11 May 2009 08:07:42 -0000 1.52
+++ usb_quirks.c 15 Oct 2009 08:51:37 -0000
@@ -105,12 +105,6 @@ const struct usbd_quirk_entry {
{ USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41, 0x110, { UQ_POWER_CLAIM }},
{ USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1, 0x009, { UQ_AU_NO_FRAC }},
- { USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE,
- 0x100, { UQ_AU_INP_ASYNC }},
- { USB_VENDOR_AVANCELOGIC, USB_PRODUCT_AVANCELOGIC_USBAUDIO,
- 0x101, { UQ_AU_INP_ASYNC }},
- { USB_VENDOR_PLANTRONICS, USB_PRODUCT_PLANTRONICS_HEADSET,
- 0x004, { UQ_AU_INP_ASYNC }},
{ USB_VENDOR_TERRATEC, USB_PRODUCT_TERRATEC_AUREON,
ANY, { UQ_BAD_HID }},
Index: uaudio.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/uaudio.c,v
retrieving revision 1.63
diff -u -p -r1.63 uaudio.c
--- uaudio.c 15 Oct 2009 08:47:44 -0000 1.63
+++ uaudio.c 15 Oct 2009 08:51:38 -0000
@@ -1549,9 +1549,6 @@ uaudio_process_as(struct uaudio_softc *s
dir = UE_GET_DIR(ed->bEndpointAddress);
type = UE_GET_ISO_TYPE(ed->bmAttributes);
- if ((usbd_get_quirks(sc->sc_udev)->uq_flags & UQ_AU_INP_ASYNC) &&
- dir == UE_DIR_IN && type == UE_ISO_ADAPT)
- type = UE_ISO_ASYNC;
/* We can't handle endpoints that need a sync pipe yet. */
sync = FALSE;