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;

Reply via email to