summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/usb/pcm.c37
1 files changed, 13 insertions, 24 deletions
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index ac6385a4eb70..45a692512d27 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;
}