summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2022-08-31 15:59:01 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-09-15 12:32:05 +0300
commit6ccbb74801bbcba94697743adbc917352aef2a9d (patch)
tree5e01bfda20915afba1263a175666caa9c5d6f0bb /sound
parent1d29a63585b3344137ceeaf19f5a3bfd222f7c9e (diff)
downloadlinux-6ccbb74801bbcba94697743adbc917352aef2a9d.tar.xz
ALSA: usb-audio: Register card again for iface over delayed_register option
[ Upstream commit 2027f114686e0f3f1f39971964dfc618637c88c2 ] When the delayed registration is specified via either delayed_register option or the quirk, we delay the invocation of snd_card_register() until the given interface. But if a wrong value has been set there and there are more interfaces over the given interface number, snd_card_register() call would be missing for those interfaces. This patch catches up those missing calls by fixing the comparison of the interface number. Now the call is skipped only if the processed interface is less than the given interface, instead of the exact match. Fixes: b70038ef4fea ("ALSA: usb-audio: Add delayed_register option") Link: https://bugzilla.kernel.org/show_bug.cgi?id=216082 Link: https://lore.kernel.org/r/20220831125901.4660-2-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/card.c2
-rw-r--r--sound/usb/quirks.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/sound/usb/card.c b/sound/usb/card.c
index a3e06a71cf35..6b172db58a31 100644
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -667,7 +667,7 @@ static bool check_delayed_register_option(struct snd_usb_audio *chip, int iface)
if (delayed_register[i] &&
sscanf(delayed_register[i], "%x:%x", &id, &inum) == 2 &&
id == chip->usb_id)
- return inum != iface;
+ return iface < inum;
}
return false;
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 6333a2ecb848..41f5d8242478 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -1911,7 +1911,7 @@ bool snd_usb_registration_quirk(struct snd_usb_audio *chip, int iface)
for (q = registration_quirks; q->usb_id; q++)
if (chip->usb_id == q->usb_id)
- return iface != q->interface;
+ return iface < q->interface;
/* Register as normal */
return false;