]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 29 Dec 2020 12:47:05 +0000 (13:47 +0100)
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>
sound/usb/clock.c

index eb3396ffba4c4cee0bc986e0e6d2ea99ab9a45bc..70e74895b11362bf9c977fec498e70c4ef8c0649 100644 (file)
@@ -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;