Loading sound/core/pcm_lib.c +13 −2 Original line number Diff line number Diff line Loading @@ -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) params->msbits = msbits; 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; } Loading @@ -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, Loading sound/soc/soc-pcm.c +4 −20 Original line number Diff line number Diff line Loading @@ -301,15 +301,6 @@ static bool soc_pcm_has_symmetry(struct snd_pcm_substream *substream) return symmetry; } /* * List of sample sizes that might go over the bus for parameter * application. There ought to be a wildcard sample size for things * like the DAC/ADC resolution to use but there isn't right now. */ static int sample_sizes[] = { 24, 32, }; static void soc_pcm_set_msb(struct snd_pcm_substream *substream, int bits) { struct snd_soc_pcm_runtime *rtd = substream->private_data; Loading @@ -318,17 +309,10 @@ static void soc_pcm_set_msb(struct snd_pcm_substream *substream, int bits) if (!bits) return; for (i = 0; i < ARRAY_SIZE(sample_sizes); i++) { if (bits >= sample_sizes[i]) continue; ret = snd_pcm_hw_constraint_msbits(substream->runtime, 0, sample_sizes[i], bits); ret = snd_pcm_hw_constraint_msbits(substream->runtime, 0, 0, bits); if (ret != 0) dev_warn(rtd->dev, "ASoC: Failed to set MSB %d/%d: %d\n", bits, sample_sizes[i], ret); } dev_warn(rtd->dev, "ASoC: Failed to set MSB %d: %d\n", bits, ret); } static void soc_pcm_apply_msb(struct snd_pcm_substream *substream) Loading Loading
sound/core/pcm_lib.c +13 −2 Original line number Diff line number Diff line Loading @@ -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) params->msbits = msbits; 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; } Loading @@ -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, Loading
sound/soc/soc-pcm.c +4 −20 Original line number Diff line number Diff line Loading @@ -301,15 +301,6 @@ static bool soc_pcm_has_symmetry(struct snd_pcm_substream *substream) return symmetry; } /* * List of sample sizes that might go over the bus for parameter * application. There ought to be a wildcard sample size for things * like the DAC/ADC resolution to use but there isn't right now. */ static int sample_sizes[] = { 24, 32, }; static void soc_pcm_set_msb(struct snd_pcm_substream *substream, int bits) { struct snd_soc_pcm_runtime *rtd = substream->private_data; Loading @@ -318,17 +309,10 @@ static void soc_pcm_set_msb(struct snd_pcm_substream *substream, int bits) if (!bits) return; for (i = 0; i < ARRAY_SIZE(sample_sizes); i++) { if (bits >= sample_sizes[i]) continue; ret = snd_pcm_hw_constraint_msbits(substream->runtime, 0, sample_sizes[i], bits); ret = snd_pcm_hw_constraint_msbits(substream->runtime, 0, 0, bits); if (ret != 0) dev_warn(rtd->dev, "ASoC: Failed to set MSB %d/%d: %d\n", bits, sample_sizes[i], ret); } dev_warn(rtd->dev, "ASoC: Failed to set MSB %d: %d\n", bits, ret); } static void soc_pcm_apply_msb(struct snd_pcm_substream *substream) Loading