Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85e013a1 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

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
parents 4ef27920 92a43793
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
	 */
+43 −0
Original line number Diff line number Diff line
@@ -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),
@@ -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) {