diff options
author | Alexander Tsoy <alexander@tsoy.me> | 2024-01-23 16:46:35 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2024-01-23 15:10:25 +0100 |
commit | 67794f882adca00d043899ac248bc002751da9f6 (patch) | |
tree | 17439486891ad00d7a6f4ce990258e751e2fd347 /sound/usb/clock.c | |
parent | a969210066054ea109d8b7aff29a9b1c98776841 (diff) | |
download | linux-67794f882adca00d043899ac248bc002751da9f6.tar.gz linux-67794f882adca00d043899ac248bc002751da9f6.tar.bz2 linux-67794f882adca00d043899ac248bc002751da9f6.zip |
ALSA: usb-audio: Skip setting clock selector for single connections
Since commit 086b957cc17f5 ("ALSA: usb-audio: Skip the clock selector
inquiry for single connections") we are already skipping clock selector
inquiry if only one clock source is connected, but we are still sending
a set request. Lets skip that too.
This should fix errors when setting a sample rate on devices that don't
have any controls present within the clock selector. An example of such
device is the new revision of MOTU M Series (07fd:000b):
AudioControl Interface Descriptor:
bLength 8
bDescriptorType 36
bDescriptorSubtype 11 (CLOCK_SELECTOR)
bClockID 1
bNrInPins 1
baCSourceID(0) 2
bmControls 0x00
iClockSelector 0
Perhaps we also should check if clock selectors are readable and writeable
like we already do for clock sources, but this is out of scope of this
patch.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=217601
Signed-off-by: Alexander Tsoy <alexander@tsoy.me>
Link: https://lore.kernel.org/r/20240123134635.54026-1-alexander@tsoy.me
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/clock.c')
-rw-r--r-- | sound/usb/clock.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/usb/clock.c b/sound/usb/clock.c index 33db334e6556..94e4aaeafe58 100644 --- a/sound/usb/clock.c +++ b/sound/usb/clock.c @@ -325,7 +325,8 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, visited, validate); if (ret > 0) { /* Skip setting clock selector again for some devices */ - if (chip->quirk_flags & QUIRK_FLAG_SKIP_CLOCK_SELECTOR) + if (chip->quirk_flags & QUIRK_FLAG_SKIP_CLOCK_SELECTOR || + pins == 1) return ret; err = uac_clock_selector_set_val(chip, entity_id, cur); if (err < 0) |