|
@@ -1299,8 +1299,14 @@ static int snd_pcm_hw_rule_msbits(struct snd_pcm_hw_params *params,
|
|
|
int width = l & 0xffff;
|
|
|
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)
|
|
|
+
|
|
|
+ if (!snd_interval_single(i))
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ if ((snd_interval_value(i) == width) ||
|
|
|
+ (width == 0 && snd_interval_value(i) > msbits))
|
|
|
params->msbits = min_not_zero(params->msbits, msbits);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1311,6 +1317,11 @@ static int snd_pcm_hw_rule_msbits(struct snd_pcm_hw_params *params,
|
|
|
* @width: sample bits width
|
|
|
* @msbits: msbits width
|
|
|
*
|
|
|
+ * This constraint will set the number of most significant bits (msbits) if a
|
|
|
+ * sample format with the specified width has been select. If width is set to 0
|
|
|
+ * the msbits will be set for any sample format with a width larger than the
|
|
|
+ * specified msbits.
|
|
|
+ *
|
|
|
* Return: Zero if successful, or a negative error code on failure.
|
|
|
*/
|
|
|
int snd_pcm_hw_constraint_msbits(struct snd_pcm_runtime *runtime,
|