| From e337bf19f6af38d5c3fa6d06cd594e0f890ca1ac Mon Sep 17 00:00:00 2001 |
| From: Hector Martin <marcan@marcan.st> |
| Date: Thu, 2 Jul 2020 16:14:33 +0900 |
| Subject: ALSA: usb-audio: add quirk for MacroSilicon MS2109 |
| |
| From: Hector Martin <marcan@marcan.st> |
| |
| commit e337bf19f6af38d5c3fa6d06cd594e0f890ca1ac upstream. |
| |
| These devices claim to be 96kHz mono, but actually are 48kHz stereo with |
| swapped channels and unaligned transfers. |
| |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Hector Martin <marcan@marcan.st> |
| Link: https://lore.kernel.org/r/20200702071433.237843-1-marcan@marcan.st |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/usb/quirks-table.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++ |
| 1 file changed, 52 insertions(+) |
| |
| --- a/sound/usb/quirks-table.h |
| +++ b/sound/usb/quirks-table.h |
| @@ -3695,4 +3695,56 @@ ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* A |
| } |
| }, |
| |
| +/* |
| + * MacroSilicon MS2109 based HDMI capture cards |
| + * |
| + * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch. |
| + * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if |
| + * they pretend to be 96kHz mono as a workaround for stereo being broken |
| + * by that... |
| + * |
| + * They also have swapped L-R channels, but that's for userspace to deal |
| + * with. |
| + */ |
| +{ |
| + USB_DEVICE(0x534d, 0x2109), |
| + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { |
| + .vendor_name = "MacroSilicon", |
| + .product_name = "MS2109", |
| + .ifnum = QUIRK_ANY_INTERFACE, |
| + .type = QUIRK_COMPOSITE, |
| + .data = &(const struct snd_usb_audio_quirk[]) { |
| + { |
| + .ifnum = 2, |
| + .type = QUIRK_AUDIO_ALIGN_TRANSFER, |
| + }, |
| + { |
| + .ifnum = 2, |
| + .type = QUIRK_AUDIO_STANDARD_MIXER, |
| + }, |
| + { |
| + .ifnum = 3, |
| + .type = QUIRK_AUDIO_FIXED_ENDPOINT, |
| + .data = &(const struct audioformat) { |
| + .formats = SNDRV_PCM_FMTBIT_S16_LE, |
| + .channels = 2, |
| + .iface = 3, |
| + .altsetting = 1, |
| + .altset_idx = 1, |
| + .attributes = 0, |
| + .endpoint = 0x82, |
| + .ep_attr = USB_ENDPOINT_XFER_ISOC | |
| + USB_ENDPOINT_SYNC_ASYNC, |
| + .rates = SNDRV_PCM_RATE_CONTINUOUS, |
| + .rate_min = 48000, |
| + .rate_max = 48000, |
| + } |
| + }, |
| + { |
| + .ifnum = -1 |
| + } |
| + } |
| + } |
| +}, |
| + |
| #undef USB_DEVICE_VENDOR_SPEC |