lkml.org 
[lkml]   [2022]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 213/231] ALSA: usb-audio: Add quirks for MacroSilicon MS2100/MS2106 devices
    Date
    From: John Veness <john-linux@pelago.org.uk>

    [ Upstream commit 6e2c9105e0b743c92a157389d40f00b81bdd09fe ]

    Treat the claimed 96kHz 1ch in the descriptors as 48kHz 2ch, so that
    the audio stream doesn't sound mono. Also fix initial stream
    alignment, so that left and right channels are in the correct order.

    Signed-off-by: John Veness <john-linux@pelago.org.uk>
    Link: https://lore.kernel.org/r/20220624140757.28758-1-john-linux@pelago.org.uk
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/usb/quirks-table.h | 48 +++++++++++++++++++++++++++++++++++++++++++++++
    sound/usb/quirks.c | 3 ++
    2 files changed, 51 insertions(+)

    --- a/sound/usb/quirks-table.h
    +++ b/sound/usb/quirks-table.h
    @@ -3803,6 +3803,54 @@ YAMAHA_DEVICE(0x7010, "UB99"),
    },

    /*
    + * MacroSilicon MS2100/MS2106 based AV capture cards
    + *
    + * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
    + * They also need QUIRK_FLAG_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 an issue with initial stream alignment that causes the
    + * channels to be swapped and out of phase, which is dealt with in quirks.c.
    + */
    +{
    + USB_AUDIO_DEVICE(0x534d, 0x0021),
    + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
    + .vendor_name = "MacroSilicon",
    + .product_name = "MS210x",
    + .ifnum = QUIRK_ANY_INTERFACE,
    + .type = QUIRK_COMPOSITE,
    + .data = &(const struct snd_usb_audio_quirk[]) {
    + {
    + .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
    + }
    + }
    + }
    +},
    +
    +/*
    * MacroSilicon MS2109 based HDMI capture cards
    *
    * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
    --- a/sound/usb/quirks.c
    +++ b/sound/usb/quirks.c
    @@ -1478,6 +1478,7 @@ void snd_usb_set_format_quirk(struct snd
    case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */
    set_format_emu_quirk(subs, fmt);
    break;
    + case USB_ID(0x534d, 0x0021): /* MacroSilicon MS2100/MS2106 */
    case USB_ID(0x534d, 0x2109): /* MacroSilicon MS2109 */
    subs->stream_offset_adj = 2;
    break;
    @@ -1908,6 +1909,8 @@ static const struct usb_audio_quirk_flag
    QUIRK_FLAG_IGNORE_CTL_ERROR),
    DEVICE_FLG(0x413c, 0xa506, /* Dell AE515 sound bar */
    QUIRK_FLAG_GET_SAMPLE_RATE),
    + DEVICE_FLG(0x534d, 0x0021, /* MacroSilicon MS2100/MS2106 */
    + QUIRK_FLAG_ALIGN_TRANSFER),
    DEVICE_FLG(0x534d, 0x2109, /* MacroSilicon MS2109 */
    QUIRK_FLAG_ALIGN_TRANSFER),
    DEVICE_FLG(0x1224, 0x2a25, /* Jieli Technology USB PHY 2.0 */

    \
     
     \ /
      Last update: 2022-07-19 15:13    [W:4.261 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site