Loading sound/usb/usbaudio.c +25 −0 Original line number Diff line number Diff line Loading @@ -3291,6 +3291,25 @@ static int snd_usb_cm106_boot_quirk(struct usb_device *dev) return snd_usb_cm106_write_int_reg(dev, 2, 0x8004); } /* * 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. */ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev) { int err, reg; int val[] = {0x200c, 0x3000, 0xf800, 0x143f, 0x0000, 0x3000}; for (reg = 0; reg < ARRAY_SIZE(val); reg++) { err = snd_usb_cm106_write_int_reg(dev, reg, val[reg]); if (err < 0) return err; } return err; } /* * Setup quirks Loading Loading @@ -3577,6 +3596,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev, 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 */ Loading sound/usb/usbquirks.h +43 −0 Original line number Diff line number Diff line Loading @@ -1469,6 +1469,41 @@ YAMAHA_DEVICE(0x7010, "UB99"), } } }, { /* Edirol M-16DX */ /* FIXME: This quirk gives a good-working capture stream but the * playback seems problematic because of lacking of sync * with capture stream. It needs to sync with the capture * clock. As now, you'll get frequent sound distortions * via the playback. */ USB_DEVICE(0x0582, 0x00c4), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = (const struct snd_usb_audio_quirk[]) { { .ifnum = 0, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 2, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { .out_cables = 0x0001, .in_cables = 0x0001 } }, { .ifnum = -1 } } } }, { /* BOSS GT-10 */ USB_DEVICE(0x0582, 0x00da), Loading Loading @@ -1950,6 +1985,14 @@ YAMAHA_DEVICE(0x7010, "UB99"), .type = QUIRK_MIDI_STANDARD_INTERFACE } }, { USB_DEVICE(0x0ccd, 0x0028), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { .vendor_name = "TerraTec", .product_name = "Aureon 5.1 MkII", .ifnum = QUIRK_NO_INTERFACE } }, { USB_DEVICE(0x0ccd, 0x0035), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { Loading Loading
sound/usb/usbaudio.c +25 −0 Original line number Diff line number Diff line Loading @@ -3291,6 +3291,25 @@ static int snd_usb_cm106_boot_quirk(struct usb_device *dev) return snd_usb_cm106_write_int_reg(dev, 2, 0x8004); } /* * 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. */ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev) { int err, reg; int val[] = {0x200c, 0x3000, 0xf800, 0x143f, 0x0000, 0x3000}; for (reg = 0; reg < ARRAY_SIZE(val); reg++) { err = snd_usb_cm106_write_int_reg(dev, reg, val[reg]); if (err < 0) return err; } return err; } /* * Setup quirks Loading Loading @@ -3577,6 +3596,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev, 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 */ Loading
sound/usb/usbquirks.h +43 −0 Original line number Diff line number Diff line Loading @@ -1469,6 +1469,41 @@ YAMAHA_DEVICE(0x7010, "UB99"), } } }, { /* Edirol M-16DX */ /* FIXME: This quirk gives a good-working capture stream but the * playback seems problematic because of lacking of sync * with capture stream. It needs to sync with the capture * clock. As now, you'll get frequent sound distortions * via the playback. */ USB_DEVICE(0x0582, 0x00c4), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { .ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = (const struct snd_usb_audio_quirk[]) { { .ifnum = 0, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 1, .type = QUIRK_AUDIO_STANDARD_INTERFACE }, { .ifnum = 2, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { .out_cables = 0x0001, .in_cables = 0x0001 } }, { .ifnum = -1 } } } }, { /* BOSS GT-10 */ USB_DEVICE(0x0582, 0x00da), Loading Loading @@ -1950,6 +1985,14 @@ YAMAHA_DEVICE(0x7010, "UB99"), .type = QUIRK_MIDI_STANDARD_INTERFACE } }, { USB_DEVICE(0x0ccd, 0x0028), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { .vendor_name = "TerraTec", .product_name = "Aureon 5.1 MkII", .ifnum = QUIRK_NO_INTERFACE } }, { USB_DEVICE(0x0ccd, 0x0035), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { Loading