ALSA: Fix handling of multiple msbits constraints on the same runtime
authorLars-Peter Clausen <lars@metafoo.de>
Mon, 29 Dec 2014 17:43:36 +0000 (18:43 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 30 Dec 2014 15:27:37 +0000 (16:27 +0100)
If the sound card is made up of discrete components, each with their own
driver (e.g. like in the ASoC case), we might end up with multiple msbits
constraint rules installed. Currently this will result in msbits being set
to whatever the last rule set it to.

This patch updates the behavior of the rule to choose the minimum (other
than zero) of all the installed rules.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/pcm_lib.c

index ec9e7866177feff13db582abc6007fa6f4a40932..b0c153534a292816446b7d507c1fa0a6a27d5528 100644 (file)
@@ -1300,7 +1300,7 @@ static int snd_pcm_hw_rule_msbits(struct snd_pcm_hw_params *params,
        unsigned int msbits = l >> 16;
        struct snd_interval *i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS);
        if (snd_interval_single(i) && snd_interval_value(i) == width)
-               params->msbits = msbits;
+               params->msbits = min_not_zero(params->msbits, msbits);
        return 0;
 }