OSDN Git Service

ALSA: usb-audio: Check valid altsetting at parsing rates for UAC2/3
authorTakashi Iwai <tiwai@suse.de>
Mon, 23 Nov 2020 08:53:09 +0000 (09:53 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 23 Nov 2020 14:11:33 +0000 (15:11 +0100)
commit93db51d06b32227319dae2ac289029ccf1b33181
treef66f2c07fbb7b653c4abe410fb1c2b186247133f
parent4974b7950929e4a28d4eaee48e4ad07f168ac132
ALSA: usb-audio: Check valid altsetting at parsing rates for UAC2/3

The current driver code assumes blindly that all found sample rates for
the same endpoint from the UAC2 and UAC3 descriptors can be used no
matter which altsetting, but actually this was wrong: some devices
accept only limited sample rates in each altsetting.  For determining
which altsetting supports which rate, we need to verify each sample rate
and check the validity via UAC2_AS_VAL_ALT_SETTINGS.  This control
reports back the available altsettings as a bitmap.

This patch implements the missing piece above, the verification and
reconstructs the sample rate tables based on the result.

An open question is how to deal with the altsettings that ended up
with no valid sample rates after verification.  At least, there is a
device that showed this problem although the sample rates did work in
the later usage (see bug link).  For now, we accept such an altset as
is, assuming that it's a firmware bug.

Reported-by: Dylan Robinson <dylan_robinson@motu.com>
Tested-by: Keith Milner <kamilner@superlative.org>
Tested-by: Dylan Robinson <dylan_robinson@motu.com>
BugLink: https://bugzilla.suse.com/show_bug.cgi?id=1178203
Link: https://lore.kernel.org/r/20201123085347.19667-4-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/clock.c
sound/usb/clock.h
sound/usb/format.c