From 93bfd01227408a62006a4e4f640a6056abc6af7a Mon Sep 17 00:00:00 2001 From: Andrea Borgia Date: Mon, 1 Jun 2009 10:48:54 +0200 Subject: [PATCH 1/4] ALSA: usb-audio - quirk for USB Aureon cards Add quirk to provide proper naming of the Terratec Aureon 5.1 MkII USB card. Signed-off-by: Andrea Borgia Signed-off-by: Takashi Iwai --- sound/usb/usbquirks.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h index 5d955aaad85f..d84d6f312198 100644 --- a/sound/usb/usbquirks.h +++ b/sound/usb/usbquirks.h @@ -1950,6 +1950,14 @@ YAMAHA_DEVICE(0x7010, "UB99"), .type = QUIRK_MIDI_STANDARD_INTERFACE } }, +{ + USB_DEVICE_VENDOR_SPEC(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) { From 6efd2cd5e8c566b9c2b4c19830e5e120b442d040 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Mon, 1 Jun 2009 10:59:51 +0200 Subject: [PATCH 2/4] ALSA: usb-audio - Add quirk for Roland/Edirol M-16DX Added a half-working quirk for Roland/Edirol M-16DX. This enables the capture on the device but the playback on it seems still problematic becuase of lack of sync with the capture clock. Signed-off-by: Takashi Iwai --- sound/usb/usbquirks.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h index d84d6f312198..58f24f574207 100644 --- a/sound/usb/usbquirks.h +++ b/sound/usb/usbquirks.h @@ -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), From ca85b6ba59b69b7b5adcc64a98bd2478f73b2542 Mon Sep 17 00:00:00 2001 From: Andrea Borgia Date: Tue, 2 Jun 2009 19:21:17 +0200 Subject: [PATCH 3/4] ALSA: usb-audio - errata corrige for quirk Cut'n'paste mistake, whose likely result was nothing at all. Correct version is "USB_DEVICE", not "USB_DEVICE_VENDOR_SPEC". Signed-off-by: Andrea Borgia Signed-off-by: Takashi Iwai --- sound/usb/usbquirks.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h index 58f24f574207..f0f7624f9178 100644 --- a/sound/usb/usbquirks.h +++ b/sound/usb/usbquirks.h @@ -1986,7 +1986,7 @@ YAMAHA_DEVICE(0x7010, "UB99"), } }, { - USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0028), + USB_DEVICE(0x0ccd, 0x0028), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { .vendor_name = "TerraTec", .product_name = "Aureon 5.1 MkII", From 92a43793a908f395dc687e6c5fc90d63f999d6d5 Mon Sep 17 00:00:00 2001 From: Dan Allongo Date: Mon, 8 Jun 2009 11:21:52 -0400 Subject: [PATCH 4/4] ALSA: usb - Add boot quirk for C-Media 6206 USB Audio Added boot quirk for C-Media CM6206 device in snd_usb_audio_probe. The function snd_usb_cm6206_boot_quirk sets up six internal 16-bit registers in order to initialize the device. Values for the registers came from sniffing USB traffic under Windows since only four of the six are documented in the datasheet for CM106 and some reserved bits were also being set. [Minor coding-style fixes by tiwai] Signed-off-by: Dan Allongo Signed-off-by: Takashi Iwai --- sound/usb/usbaudio.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index a6b88482637b..e87121751dd0 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c @@ -3279,6 +3279,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 @@ -3565,6 +3584,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 */