diff options
author | Mark Brown <broonie@linaro.org> | 2014-01-16 12:42:57 +0000 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-01-16 12:42:57 +0000 |
commit | 2f43a23ab9ea1865a663e100b0af20198decb4f1 (patch) | |
tree | 7501fb678115cbbdb544c43dc7b59f95408f1f52 /sound/core | |
parent | 7cfa7b547337faf5890c8c5f091e081fb79caf73 (diff) | |
parent | 55dcdb5051930dee75e9e2c0da90bc82ee3dcd77 (diff) | |
download | talos-obmc-linux-2f43a23ab9ea1865a663e100b0af20198decb4f1.tar.gz talos-obmc-linux-2f43a23ab9ea1865a663e100b0af20198decb4f1.zip |
Merge remote-tracking branch 'asoc/topic/pcm' into for-tiwai
Diffstat (limited to 'sound/core')
-rw-r--r-- | sound/core/pcm_misc.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c index 43f24cce3dec..4560ca0e5651 100644 --- a/sound/core/pcm_misc.c +++ b/sound/core/pcm_misc.c @@ -514,3 +514,42 @@ unsigned int snd_pcm_rate_bit_to_rate(unsigned int rate_bit) return 0; } EXPORT_SYMBOL(snd_pcm_rate_bit_to_rate); + +static unsigned int snd_pcm_rate_mask_sanitize(unsigned int rates) +{ + if (rates & SNDRV_PCM_RATE_CONTINUOUS) + return SNDRV_PCM_RATE_CONTINUOUS; + else if (rates & SNDRV_PCM_RATE_KNOT) + return SNDRV_PCM_RATE_KNOT; + return rates; +} + +/** + * snd_pcm_rate_mask_intersect - computes the intersection between two rate masks + * @rates_a: The first rate mask + * @rates_b: The second rate mask + * + * This function computes the rates that are supported by both rate masks passed + * to the function. It will take care of the special handling of + * SNDRV_PCM_RATE_CONTINUOUS and SNDRV_PCM_RATE_KNOT. + * + * Return: A rate mask containing the rates that are supported by both rates_a + * and rates_b. + */ +unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a, + unsigned int rates_b) +{ + rates_a = snd_pcm_rate_mask_sanitize(rates_a); + rates_b = snd_pcm_rate_mask_sanitize(rates_b); + + if (rates_a & SNDRV_PCM_RATE_CONTINUOUS) + return rates_b; + else if (rates_b & SNDRV_PCM_RATE_CONTINUOUS) + return rates_a; + else if (rates_a & SNDRV_PCM_RATE_KNOT) + return rates_b; + else if (rates_b & SNDRV_PCM_RATE_KNOT) + return rates_a; + return rates_a & rates_b; +} +EXPORT_SYMBOL_GPL(snd_pcm_rate_mask_intersect); |