This patch adds a workaround for the Dallas chip; the chip tags
its 8bit formats with PCM8 but expects signed data.

--- drivers/usb/audio.c.orig    Mon Oct  2 15:23:28 2000
+++ drivers/usb/audio.c Mon Nov 27 00:08:54 2000
@@ -89,6 +89,9 @@
  *              Somewhat peculiar due to OSS interface limitations. Only works
  *              for channels where a "slider" is already in front of it (i.e.
  *              a MIXER unit or a FEATURE unit with volume capability).
+ * 2000-11-26:  Thomas Sailer
+ *              Workaround for Dallas DS4201. The DS4201 uses PCM8 as format tag for
+ *              its 8 bit modes, but expects signed data (and should therefore have 
+used PCM).
  *
  */
 
@@ -1551,6 +1554,7 @@
                       dev->devnum, u->interface, fmt->altsetting, d->srate, data[0] | 
(data[1] << 8) | (data[2] << 16)));
                d->srate = data[0] | (data[1] << 8) | (data[2] << 16);
        }
+       dprintk((KERN_DEBUG "usbaudio: set_format_in: USB format 0x%x, DMA format 0x%x 
+srate %u\n", u->format, d->format, d->srate));
        return 0;
 }
 
@@ -1647,6 +1651,7 @@
                       dev->devnum, u->interface, fmt->altsetting, d->srate, data[0] | 
(data[1] << 8) | (data[2] << 16)));
                d->srate = data[0] | (data[1] << 8) | (data[2] << 16);
        }
+       dprintk((KERN_DEBUG "usbaudio: set_format_out: USB format 0x%x, DMA format 
+0x%x srate %u\n", u->format, d->format, d->srate));
        return 0;
 }
 
@@ -2851,6 +2856,9 @@
                                continue;
                        }
                        format = (fmt[5] == 2) ? (AFMT_U16_LE | AFMT_U8) : 
(AFMT_S16_LE | AFMT_S8);
+                       /* Dallas DS4201 workaround */
+                       if (dev->descriptor.idVendor == 0x04fa && 
+dev->descriptor.idProduct == 0x4201)
+                               format = (AFMT_S16_LE | AFMT_S8);
                        fmt = find_csinterface_descriptor(buffer, buflen, NULL, 
FORMAT_TYPE, asifout, i);
                        if (!fmt) {
                                printk(KERN_ERR "usbaudio: device %u interface %u 
altsetting %u FORMAT_TYPE descriptor not found\n", 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to