[alsa-devel] PATCH: C-Media 6206 USB Audio

Dan Allongo gongo2k1 at gmail.com
Mon Jun 8 04:46:51 CEST 2009


I've been posting on the alsa-users list and I think I finally have a
working patch now that I'd like to submit.
The C-Media 6206 device is based off of CM106 and just needed a boot quirk
added to set the registers properly for output.
At least one other user can confirm that this patch works and that the
SPDIF-out is also functioning now with this change.
This is diff'd against today's snapshot so it should be good to go.
Let me know if there's anything else that I need to do or change with this.

Thanks,
---Dan



--- alsa-driver/alsa-kernel/usb/usbaudio.c    2009-06-07 06:20:32.000000000
-0400
+++ alsa-driver/alsa-kernel/usb/usbaudio.c    2009-06-07 22:24:44.000000000
-0400
@@ -3291,6 +3291,21 @@
     return snd_usb_cm106_write_int_reg(dev, 2, 0x8004);
 }

+static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
+{
+    /*
+     * C-Media CM6206 is based on CM106 with two additional
+     * registers that are not documented in the data sheet.
+     * Values here are chosen based on sniffing USB traffic
+     * under Windows.
+     */
+    return snd_usb_cm106_write_int_reg(dev, 0, 0x200c) +
+        snd_usb_cm106_write_int_reg(dev, 1, 0x3000) +
+        snd_usb_cm106_write_int_reg(dev, 2, 0xf800) +
+        snd_usb_cm106_write_int_reg(dev, 3, 0x143f) +
+        snd_usb_cm106_write_int_reg(dev, 4, 0x0000) +
+        snd_usb_cm106_write_int_reg(dev, 5, 0x3000);
+}

 /*
  * Setup quirks
@@ -3577,6 +3592,12 @@
             goto __err_val;
     }

+    /* C-Media CM6206 / CM106-Like Sound Device */
+    if (id == USB_ID(0x0d8c, 0x0102)) {
+        if (snd_usb_cm6206_boot_quirk(dev) < 0)
+            goto __err_val;
+    }
+
     /*
      * found a config.  now register to ALSA
      */


More information about the Alsa-devel mailing list