diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-06-10 01:26:49 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-06-10 01:26:49 -0400 |
commit | 85e013a18acfad98473a4432bb7082d1fcc74a25 (patch) | |
tree | 660baeaf0b026686f70890472adcf29ab20f4439 /sound | |
parent | 4ef279205a1ca4c37bf80811dd9d0f65c854fbf7 (diff) | |
parent | 92a43793a908f395dc687e6c5fc90d63f999d6d5 (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.c | 25 | ||||
-rw-r--r-- | sound/usb/usbquirks.h | 43 |
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 | */ | ||
3300 | static 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", |