ALSA: usb-audio: Disable sample read check if firmware doesn't give back
authorTakashi Iwai <tiwai@suse.de>
Fri, 18 Dec 2020 14:58:58 +0000 (15:58 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 18 Dec 2020 16:08:24 +0000 (17:08 +0100)
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>
sound/usb/clock.c

index e940dcee792b1b5f2244234cb76524c76ba04295..31051f2be46da9434851dd06272f4fbe318c41ae 100644 (file)
@@ -534,6 +534,12 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip,
        }
 
        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;