aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-06-10 01:26:49 -0400
committerTakashi Iwai <tiwai@suse.de>2009-06-10 01:26:49 -0400
commit85e013a18acfad98473a4432bb7082d1fcc74a25 (patch)
tree660baeaf0b026686f70890472adcf29ab20f4439 /sound
parent4ef279205a1ca4c37bf80811dd9d0f65c854fbf7 (diff)
parent92a43793a908f395dc687e6c5fc90d63f999d6d5 (diff)
Merge branch 'topic/usb-audio' into for-linus
* topic/usb-audio: ALSA: usb - Add boot quirk for C-Media 6206 USB Audio ALSA: usb-audio - errata corrige for quirk ALSA: usb-audio - Add quirk for Roland/Edirol M-16DX ALSA: usb-audio - quirk for USB Aureon cards
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/usbaudio.c25
-rw-r--r--sound/usb/usbquirks.h43
2 files changed, 68 insertions, 0 deletions
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index a8ef2cbcc03b..c7b902358b7b 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -3291,6 +3291,25 @@ static int snd_usb_cm106_boot_quirk(struct usb_device *dev)
3291 return snd_usb_cm106_write_int_reg(dev, 2, 0x8004); 3291 return snd_usb_cm106_write_int_reg(dev, 2, 0x8004);
3292} 3292}
3293 3293
3294/*
3295 * C-Media CM6206 is based on CM106 with two additional
3296 * registers that are not documented in the data sheet.
3297 * Values here are chosen based on sniffing USB traffic
3298 * under Windows.
3299 */
3300static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
3301{
3302 int err, reg;
3303 int val[] = {0x200c, 0x3000, 0xf800, 0x143f, 0x0000, 0x3000};
3304
3305 for (reg = 0; reg < ARRAY_SIZE(val); reg++) {
3306 err = snd_usb_cm106_write_int_reg(dev, reg, val[reg]);
3307 if (err < 0)
3308 return err;
3309 }
3310
3311 return err;
3312}
3294 3313
3295/* 3314/*
3296 * Setup quirks 3315 * Setup quirks
@@ -3577,6 +3596,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
3577 goto __err_val; 3596 goto __err_val;
3578 } 3597 }
3579 3598
3599 /* C-Media CM6206 / CM106-Like Sound Device */
3600 if (id == USB_ID(0x0d8c, 0x0102)) {
3601 if (snd_usb_cm6206_boot_quirk(dev) < 0)
3602 goto __err_val;
3603 }
3604
3580 /* 3605 /*
3581 * found a config. now register to ALSA 3606 * found a config. now register to ALSA
3582 */ 3607 */
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
index 5d955aaad85f..f0f7624f9178 100644
--- a/sound/usb/usbquirks.h
+++ b/sound/usb/usbquirks.h
@@ -1470,6 +1470,41 @@ YAMAHA_DEVICE(0x7010, "UB99"),
1470 } 1470 }
1471}, 1471},
1472{ 1472{
1473 /* Edirol M-16DX */
1474 /* FIXME: This quirk gives a good-working capture stream but the
1475 * playback seems problematic because of lacking of sync
1476 * with capture stream. It needs to sync with the capture
1477 * clock. As now, you'll get frequent sound distortions
1478 * via the playback.
1479 */
1480 USB_DEVICE(0x0582, 0x00c4),
1481 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1482 .ifnum = QUIRK_ANY_INTERFACE,
1483 .type = QUIRK_COMPOSITE,
1484 .data = (const struct snd_usb_audio_quirk[]) {
1485 {
1486 .ifnum = 0,
1487 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1488 },
1489 {
1490 .ifnum = 1,
1491 .type = QUIRK_AUDIO_STANDARD_INTERFACE
1492 },
1493 {
1494 .ifnum = 2,
1495 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1496 .data = & (const struct snd_usb_midi_endpoint_info) {
1497 .out_cables = 0x0001,
1498 .in_cables = 0x0001
1499 }
1500 },
1501 {
1502 .ifnum = -1
1503 }
1504 }
1505 }
1506},
1507{
1473 /* BOSS GT-10 */ 1508 /* BOSS GT-10 */
1474 USB_DEVICE(0x0582, 0x00da), 1509 USB_DEVICE(0x0582, 0x00da),
1475 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1510 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
@@ -1951,6 +1986,14 @@ YAMAHA_DEVICE(0x7010, "UB99"),
1951 } 1986 }
1952}, 1987},
1953{ 1988{
1989 USB_DEVICE(0x0ccd, 0x0028),
1990 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1991 .vendor_name = "TerraTec",
1992 .product_name = "Aureon 5.1 MkII",
1993 .ifnum = QUIRK_NO_INTERFACE
1994 }
1995},
1996{
1954 USB_DEVICE(0x0ccd, 0x0035), 1997 USB_DEVICE(0x0ccd, 0x0035),
1955 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { 1998 .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
1956 .vendor_name = "Miditech", 1999 .vendor_name = "Miditech",