[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <87wmklddtr.wl-tiwai@suse.de>
Date: Mon, 12 Aug 2024 16:18:40 +0200
From: Takashi Iwai <tiwai@...e.de>
To: Karol Kosik <k.kosik@...look.com>
Cc: Jaroslav Kysela <perex@...ex.cz>,
Takashi Iwai <tiwai@...e.com>,
"Steven 'Steve' Kendall" <skend@...omium.org>,
Alexander Tsoy <alexander@...y.me>,
wangdicheng <wangdicheng@...inos.cn>,
Kenny Levinsen <kl@...wtf>,
Peter Ujfalusi <peter.ujfalusi@...ux.intel.com>,
Christos Skevis <xristos.thes@...il.com>,
"Geoffrey D. Bennett" <g@...vu>,
Sarah Grant <s@....tw>,
Stefan Stistrup <sstistrup@...il.com>,
Johan Carlsson <johan.carlsson@...nage.engineering>,
linux-sound@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] ALSA: usb-audio: Support multiple control interfaces
On Mon, 12 Aug 2024 02:29:56 +0200,
Karol Kosik wrote:
>
> Registering Numark Party Mix II fails with error 'bogus bTerminalLink 1'.
> The problem stems from the driver not being able to find input/output
> terminals required to configure audio streaming. The information about
> those terminals is stored in AudioControl Interface. Numark device
> contains 2 AudioControl Interfaces and the driver checks only one of them.
>
> According to the USB standard, a device can have multiple audio functions,
> each represented by Audio Interface Collection. Every audio function is
> considered to be closed box and will contain unique AudioControl Interface
> and zero or more AudioStreaming and MIDIStreaming Interfaces.
>
> The Numark device adheres to the standard and defines two audio functions:
> - MIDIStreaming function
> - AudioStreaming function
> It starts with MIDI function, followed by the audio function. The driver
> saves the first AudioControl Interface in `snd_usb_audio` structure
> associated with the entire device. It then attempts to use this interface
> to query for terminals and clocks. However, this fails because the correct
> information is stored in the second AudioControl Interface, defined in the
> second Audio Interface Collection.
>
> This patch introduces a structure holding association between each
> MIDI/Audio Interface and its corresponding AudioControl Interface,
> instead of relying on AudioControl Interface defined for the entire
> device. This structure is populated during usb probing phase and leveraged
> later when querying for terminals and when sending USB requests.
>
> Alternative solutions considered include:
> - defining a quirk for Numark where the order of interface is manually
> changed, or terminals are hardcoded in the driver. This solution would
> have fixed only this model, though it seems that device is USB compliant,
> and it also seems that other devices from this company may be affected.
> What's more, it looks like products from other manufacturers have similar
> problems, i.e. Rane One DJ console
> - keeping a list of all AudioControl Interfaces and querying all of them
> to find required information. That would have solved my problem and have
> low probability of breaking other devices, as we would always start with
> the same logic of querying first AudioControl Interface. This solution
> would not have followed the standard though.
>
> This patch preserves the `snd_usb_audio.ctrl_intf` variable, which holds
> the first AudioControl Interface, and uses it as a fallback when some
> interfaces are not parsed correctly and lack an associated AudioControl
> Interface, i.e., when configured via quirks.
>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=217865
>
> Signed-off-by: Karol Kosik <k.kosik@...look.com>
Applied now to for-next branch. Thanks!
Takashi
Powered by blists - more mailing lists