ChangeSet 1.1608.24.33, 2004/03/03 10:16:35-08:00, [EMAIL PROTECTED]

[PATCH] USB: USB OSS audio driver workaround for buggy descriptors


 drivers/usb/class/audio.c |   22 +++++++++++++---------
 1 files changed, 13 insertions(+), 9 deletions(-)


diff -Nru a/drivers/usb/class/audio.c b/drivers/usb/class/audio.c
--- a/drivers/usb/class/audio.c Tue Mar 16 15:04:50 2004
+++ b/drivers/usb/class/audio.c Tue Mar 16 15:04:50 2004
@@ -3,7 +3,7 @@
 /*
  *     audio.c  --  USB Audio Class driver
  *
- *     Copyright (C) 1999, 2000, 2001
+ *     Copyright (C) 1999, 2000, 2001, 2003, 2004
  *         Alan Cox ([EMAIL PROTECTED])
  *         Thomas Sailer ([EMAIL PROTECTED])
  *
@@ -101,6 +101,8 @@
  *              Fix SNDCTL_DSP_STEREO API violation
  * 2003-04-08: Oliver Neukum ([EMAIL PROTECTED]):
  *             Setting a configuration is done by usbcore and must not be overridden
+ * 2004-02-27:  Workaround for broken synch descriptors
+ * 
  */
 
 /*
@@ -1542,12 +1544,13 @@
                    alts->endpoint[1].desc.bmAttributes != 0x01 ||
                    alts->endpoint[1].desc.bSynchAddress != 0 ||
                    alts->endpoint[1].desc.bEndpointAddress != 
(alts->endpoint[0].desc.bSynchAddress & 0x7f)) {
-                       printk(KERN_ERR "usbaudio: device %d interface %d altsetting 
%d invalid synch pipe\n",
+                       printk(KERN_WARNING "usbaudio: device %d interface %d 
altsetting %d claims adaptive in "
+                              "but has invalid synch pipe; treating as asynchronous 
in\n",
                               dev->devnum, u->interface, fmt->altsetting);
-                       return -1;
+               } else {
+                       u->syncpipe = usb_sndisocpipe(dev, 
alts->endpoint[1].desc.bEndpointAddress & 0xf);
+                       u->syncinterval = alts->endpoint[1].desc.bRefresh;
                }
-               u->syncpipe = usb_sndisocpipe(dev, 
alts->endpoint[1].desc.bEndpointAddress & 0xf);
-               u->syncinterval = alts->endpoint[1].desc.bRefresh;
        }
        if (d->srate < fmt->sratelo)
                d->srate = fmt->sratelo;
@@ -1637,12 +1640,13 @@
                    alts->endpoint[1].desc.bmAttributes != 0x01 ||
                    alts->endpoint[1].desc.bSynchAddress != 0 ||
                    alts->endpoint[1].desc.bEndpointAddress != 
(alts->endpoint[0].desc.bSynchAddress | 0x80)) {
-                       printk(KERN_ERR "usbaudio: device %d interface %d altsetting 
%d invalid synch pipe\n",
+                       printk(KERN_WARNING "usbaudio: device %d interface %d 
altsetting %d claims asynch out "
+                              "but has invalid synch pipe; treating as adaptive 
out\n",
                               dev->devnum, u->interface, fmt->altsetting);
-                       return -1;
+               } else {
+                       u->syncpipe = usb_rcvisocpipe(dev, 
alts->endpoint[1].desc.bEndpointAddress & 0xf);
+                       u->syncinterval = alts->endpoint[1].desc.bRefresh;
                }
-               u->syncpipe = usb_rcvisocpipe(dev, 
alts->endpoint[1].desc.bEndpointAddress & 0xf);
-               u->syncinterval = alts->endpoint[1].desc.bRefresh;
        }
        if (d->srate < fmt->sratelo)
                d->srate = fmt->sratelo;



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id70&alloc_id638&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to