summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2020-12-18 15:58:58 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-12-29 13:45:03 +0100
commit5f0a1f662f71518f2bf6b3feb430b2f48025a219 (patch)
treefd9f850da81249c5cf973b657fb54d573fa17ed8 /sound
parentf8c05ed1108f25e01dc8c7a6c67371d9840283b0 (diff)
ALSA: usb-audio: Disable sample read check if firmware doesn't give back
commit 9df28edce7c6ab38050235f6f8b43dd7ccd01b6d upstream. Some buggy firmware don't give the current sample rate but leaves zero. Handle this case more gracefully without warning but just skip the current rate verification from the next time. Cc: <stable@vger.kernel.org> Link: https://lore.kernel.org/r/20201218145858.2357-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/clock.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sound/usb/clock.c b/sound/usb/clock.c
index eb3396ffba4c..70e74895b113 100644
--- a/sound/usb/clock.c
+++ b/sound/usb/clock.c
@@ -327,6 +327,12 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface,
}
crate = data[0] | (data[1] << 8) | (data[2] << 16);
+ if (!crate) {
+ dev_info(&dev->dev, "failed to read current rate; disabling the check\n");
+ chip->sample_rate_read_error = 3; /* three strikes, see above */
+ return 0;
+ }
+
if (crate != rate) {
dev_warn(&dev->dev, "current rate %d is different from the runtime rate %d\n", crate, rate);
// runtime->rate = crate;