usb/117598: [patch] Not possible to record with Plantronics
DSP-400 USB headset
Henrik Gulbrandsen
henrik at gulbra.net
Sun Oct 28 08:50:05 PDT 2007
The following reply was made to PR usb/117598; it has been noted by GNATS.
From: Henrik Gulbrandsen <henrik at gulbra.net>
To: "M. Warner Losh" <imp at bsdimp.com>
Cc: hselasky at c2i.net, freebsd-gnats-submit at FreeBSD.org
Subject: Re: usb/117598: [patch] Not possible to record with Plantronics
DSP-400 USB headset
Date: Sun, 28 Oct 2007 16:45:46 +0100
--=-58217vnrXX1U7ux/YEJl
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
On Sun, 2007-10-28 at 07:50 -0600, M. Warner Losh wrote:
> If the patch is reliable (eg, we get no false positives from the
> printf), then we should eliminate the quirk.
True, but this would require at least a small leap of faith, since I
haven't analyzed the consequences in detail. All I know is that we are
currently handling this as an error situation and return USBD_INVAL.
Assuming an asynchronous endpoint and continuing will work around the
problem if this is indeed what the device expects, but it may lead to
other bugs if the core problem is something else.
My qualified guess is that this will probably help more often than it
hurts, so I enabled UAUDIO_ASSUME_ASYNC by default. If we check this in
and nobody complains in the near future, then it's probably safe to do
as you say and eliminate the quirk (and the printf) in a later version.
/Henrik
P.S. The patch is virtually unreadable in the web version, so I'm
attaching it again, hoping to get better formatting this time.
--=-58217vnrXX1U7ux/YEJl
Content-Disposition: attachment; filename=dsp-400.diff
Content-Type: text/x-patch; name=dsp-400.diff; charset=ISO-8859-15
Content-Transfer-Encoding: 7bit
--- dev/sound/usb/uaudio.c.orig 2007-06-20 07:11:37.000000000 +0200
+++ dev/sound/usb/uaudio.c 2007-10-27 21:50:10.000000000 +0200
@@ -116,7 +116,11 @@
#else
/* #define USB_DEBUG */
#endif
+
+/* A few knobs to enable/disable features... */
/* #define UAUDIO_MULTIPLE_ENDPOINTS */
+#define UAUDIO_ASSUME_ASYNC
+
#ifdef USB_DEBUG
#define DPRINTF(x) do { if (uaudiodebug) printf x; } while (0)
#define DPRINTFN(n,x) do { if (uaudiodebug>(n)) printf x; } while (0)
@@ -2018,6 +2022,12 @@
dir == UE_DIR_IN && type == UE_ISO_ADAPT)
type = UE_ISO_ASYNC;
+#ifdef UAUDIO_ASSUME_ASYNC
+ /* Dammit! The spec doesn't allow this, so why not assume a quirk? */
+ if (dir == UE_DIR_IN && type == UE_ISO_ADAPT && id->bNumEndpoints == 1)
+ type = UE_ISO_ASYNC;
+#endif
+
/* We can't handle endpoints that need a sync pipe yet. */
sync = FALSE;
if (dir == UE_DIR_IN && type == UE_ISO_ADAPT) {
@@ -2050,9 +2060,18 @@
if (sync && id->bNumEndpoints <= 1) {
printf("%s: a sync-pipe endpoint but no other endpoint\n",
device_get_nameunit(sc->sc_dev));
+#ifndef UAUDIO_ASSUME_ASYNC
+ if (dir != UE_DIR_IN)
+ return USBD_INVAL;
+ printf("This device may need a UQ_AU_INP_ASYNC quirk flag.\n");
+ printf("Consider adding it in sys/dev/usb/usb_quirks.c !!!\n");
+ printf("vendor: 0x%04x; product: 0x%04x; release: 0x%04x\n",
+ sc->sc_vendor, sc->sc_product, sc->sc_release);
+#endif /* UAUDIO_ASSUME_ASYNC */
return USBD_INVAL;
}
-#endif
+#endif /* UAUDIO_MULTIPLE_ENDPOINTS */
+
if (!sync && id->bNumEndpoints > 1) {
printf("%s: non sync-pipe endpoint but multiple endpoints\n",
device_get_nameunit(sc->sc_dev));
--- dev/usb/usb_quirks.c.orig 2007-07-22 17:59:45.000000000 +0200
+++ dev/usb/usb_quirks.c 2007-10-27 12:53:02.000000000 +0200
@@ -74,6 +74,8 @@
{ 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_PLANTRONICS, USB_PRODUCT_PLANTRONICS_DSP400,
+ 0x004, { UQ_AU_INP_ASYNC }},
{ USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UN53B, ANY, { UQ_NO_STRINGS }},
/* XXX These should have a revision number, but I don't know what they are. */
{ USB_VENDOR_HP, USB_PRODUCT_HP_895C, ANY, { UQ_BROKEN_BIDIR }},
--- dev/usb/usbdevs.orig 2007-10-05 09:26:39.000000000 +0200
+++ dev/usb/usbdevs 2007-10-27 12:53:06.000000000 +0200
@@ -1851,6 +1851,9 @@
product PLANEX3 GU1000T 0xab11 GU-1000T
product PLANEX3 GWUS54MINI 0xab13 GW-US54Mini
+/* Plantronics products */
+product PLANTRONICS DSP400 0x0ca1 DSP-400 Foldable PC Headset
+
/* Plextor Corp. */
product PLEXTOR 40_12_40U 0x0011 PlexWriter 40/12/40U
--=-58217vnrXX1U7ux/YEJl--
More information about the freebsd-usb
mailing list