ALSA: aloop: Fix inconsistent format due to incomplete rule
[pandora-kernel.git] / sound / drivers / aloop.c
index cde228d..59b1d7f 100644 (file)
@@ -39,6 +39,7 @@
 #include <sound/core.h>
 #include <sound/control.h>
 #include <sound/pcm.h>
+#include <sound/pcm_params.h>
 #include <sound/info.h>
 #include <sound/initval.h>
 
@@ -612,14 +613,12 @@ static int rule_format(struct snd_pcm_hw_params *params,
 {
 
        struct snd_pcm_hardware *hw = rule->private;
-       struct snd_mask *maskp = hw_param_mask(params, rule->var);
+       struct snd_mask m;
 
-       maskp->bits[0] &= (u_int32_t)hw->formats;
-       maskp->bits[1] &= (u_int32_t)(hw->formats >> 32);
-       memset(maskp->bits + 2, 0, (SNDRV_MASK_MAX-64) / 8); /* clear rest */
-       if (! maskp->bits[0] && ! maskp->bits[1])
-               return -EINVAL;
-       return 0;
+       snd_mask_none(&m);
+       m.bits[0] = (u_int32_t)hw->formats;
+       m.bits[1] = (u_int32_t)(hw->formats >> 32);
+       return snd_mask_refine(hw_param_mask(params, rule->var), &m);
 }
 
 static int rule_rate(struct snd_pcm_hw_params *params,