summaryrefslogtreecommitdiffstats
path: root/sound/usb/clock.c
diff options
context:
space:
mode:
authorAlexander Tsoy <alexander@tsoy.me>2024-01-23 16:46:35 +0300
committerTakashi Iwai <tiwai@suse.de>2024-01-23 15:10:25 +0100
commit67794f882adca00d043899ac248bc002751da9f6 (patch)
tree17439486891ad00d7a6f4ce990258e751e2fd347 /sound/usb/clock.c
parenta969210066054ea109d8b7aff29a9b1c98776841 (diff)
downloadlinux-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.c3
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)