Commit 4769bfb9 authored by Samuel Holland's avatar Samuel Holland Committed by Mark Brown

ALSA: pcm: Add a standalone version of snd_pcm_limit_hw_rates

It can be useful to derive min/max rates of a snd_pcm_hardware without
having a snd_pcm_runtime, such as before constructing an ASoC DAI link.

Create a new helper that takes a pointer to a snd_pcm_hardware directly,
and refactor the original function as a wrapper around it, to avoid
needing to update any call sites.
Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
Reviewed-by: default avatarTakashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200305051143.60691-2-samuel@sholland.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 6e02feb0
...@@ -1127,7 +1127,14 @@ snd_pcm_kernel_readv(struct snd_pcm_substream *substream, ...@@ -1127,7 +1127,14 @@ snd_pcm_kernel_readv(struct snd_pcm_substream *substream,
return __snd_pcm_lib_xfer(substream, bufs, false, frames, true); return __snd_pcm_lib_xfer(substream, bufs, false, frames, true);
} }
int snd_pcm_limit_hw_rates(struct snd_pcm_runtime *runtime); int snd_pcm_hw_limit_rates(struct snd_pcm_hardware *hw);
static inline int
snd_pcm_limit_hw_rates(struct snd_pcm_runtime *runtime)
{
return snd_pcm_hw_limit_rates(&runtime->hw);
}
unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate); unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate);
unsigned int snd_pcm_rate_bit_to_rate(unsigned int rate_bit); unsigned int snd_pcm_rate_bit_to_rate(unsigned int rate_bit);
unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a, unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a,
......
...@@ -474,32 +474,32 @@ int snd_pcm_format_set_silence(snd_pcm_format_t format, void *data, unsigned int ...@@ -474,32 +474,32 @@ int snd_pcm_format_set_silence(snd_pcm_format_t format, void *data, unsigned int
EXPORT_SYMBOL(snd_pcm_format_set_silence); EXPORT_SYMBOL(snd_pcm_format_set_silence);
/** /**
* snd_pcm_limit_hw_rates - determine rate_min/rate_max fields * snd_pcm_hw_limit_rates - determine rate_min/rate_max fields
* @runtime: the runtime instance * @hw: the pcm hw instance
* *
* Determines the rate_min and rate_max fields from the rates bits of * Determines the rate_min and rate_max fields from the rates bits of
* the given runtime->hw. * the given hw.
* *
* Return: Zero if successful. * Return: Zero if successful.
*/ */
int snd_pcm_limit_hw_rates(struct snd_pcm_runtime *runtime) int snd_pcm_hw_limit_rates(struct snd_pcm_hardware *hw)
{ {
int i; int i;
for (i = 0; i < (int)snd_pcm_known_rates.count; i++) { for (i = 0; i < (int)snd_pcm_known_rates.count; i++) {
if (runtime->hw.rates & (1 << i)) { if (hw->rates & (1 << i)) {
runtime->hw.rate_min = snd_pcm_known_rates.list[i]; hw->rate_min = snd_pcm_known_rates.list[i];
break; break;
} }
} }
for (i = (int)snd_pcm_known_rates.count - 1; i >= 0; i--) { for (i = (int)snd_pcm_known_rates.count - 1; i >= 0; i--) {
if (runtime->hw.rates & (1 << i)) { if (hw->rates & (1 << i)) {
runtime->hw.rate_max = snd_pcm_known_rates.list[i]; hw->rate_max = snd_pcm_known_rates.list[i];
break; break;
} }
} }
return 0; return 0;
} }
EXPORT_SYMBOL(snd_pcm_limit_hw_rates); EXPORT_SYMBOL(snd_pcm_hw_limit_rates);
/** /**
* snd_pcm_rate_to_rate_bit - converts sample rate to SNDRV_PCM_RATE_xxx bit * snd_pcm_rate_to_rate_bit - converts sample rate to SNDRV_PCM_RATE_xxx bit
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment