diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index ac6385a4eb70ed63b6beef032f350c578957a688..45a692512d273ef89dc39ba2257b135044f613ab 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -695,41 +695,30 @@ static int match_endpoint_audioformats(struct snd_usb_substream *subs,
 				       struct audioformat *match, int rate,
 				       snd_pcm_format_t pcm_format)
 {
-	int i;
-	int score = 0;
+	int i, score;
 
-	if (fp->channels < 1) {
-		dev_dbg(&subs->dev->dev,
-			"%s: (fmt @%p) no channels\n", __func__, fp);
+	if (fp->channels < 1)
 		return 0;
-	}
 
-	if (!(fp->formats & pcm_format_to_bits(pcm_format))) {
-		dev_dbg(&subs->dev->dev,
-			"%s: (fmt @%p) no match for format %d\n", __func__,
-			fp, pcm_format);
+	if (!(fp->formats & pcm_format_to_bits(pcm_format)))
 		return 0;
-	}
 
-	for (i = 0; i < fp->nr_rates; i++) {
-		if (fp->rate_table[i] == rate) {
-			score++;
-			break;
+	if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS) {
+		if (rate < fp->rate_min || rate > fp->rate_max)
+			return 0;
+	} else {
+		for (i = 0; i < fp->nr_rates; i++) {
+			if (fp->rate_table[i] == rate)
+				break;
 		}
-	}
-	if (!score) {
-		dev_dbg(&subs->dev->dev,
-			"%s: (fmt @%p) no match for rate %d\n", __func__,
-			fp, rate);
-		return 0;
+		if (i >= fp->nr_rates)
+			return 0;
 	}
 
+	score = 1;
 	if (fp->channels == match->channels)
 		score++;
 
-	dev_dbg(&subs->dev->dev,
-		"%s: (fmt @%p) score %d\n", __func__, fp, score);
-
 	return score;
 }