diff options
author | Peter Rosin <peda@axentia.se> | 2015-01-28 09:16:06 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-01-28 14:27:15 -0500 |
commit | f66f898e953d56779367a6cbc39cbb4808b208c0 (patch) | |
tree | d0a7c9d3d6f9349080d5beca852723cd1574a1f6 /include | |
parent | ba5295e55dd941425b10924f4f5c7af6eac4a1cb (diff) |
ALSA: pcm: Add snd_interval_ranges() and snd_pcm_hw_constraint_ranges()
Add helper functions to allow drivers to specify several disjoint
ranges for a variable. In particular, there is a codec (PCM512x) that
has a hole in its supported range of rates, due to PLL and divider
restrictions.
This is like snd_pcm_hw_constraint_list(), but for ranges instead of
points.
Signed-off-by: Peter Rosin <peda@axentia.se>
Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
Reviewed-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/sound/pcm.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/sound/pcm.h b/include/sound/pcm.h index 1e7f74acc2ec..04fc037e0555 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h | |||
@@ -275,6 +275,12 @@ struct snd_pcm_hw_constraint_list { | |||
275 | unsigned int mask; | 275 | unsigned int mask; |
276 | }; | 276 | }; |
277 | 277 | ||
278 | struct snd_pcm_hw_constraint_ranges { | ||
279 | unsigned int count; | ||
280 | const struct snd_interval *ranges; | ||
281 | unsigned int mask; | ||
282 | }; | ||
283 | |||
278 | struct snd_pcm_hwptr_log; | 284 | struct snd_pcm_hwptr_log; |
279 | 285 | ||
280 | struct snd_pcm_runtime { | 286 | struct snd_pcm_runtime { |
@@ -910,6 +916,8 @@ void snd_interval_mulkdiv(const struct snd_interval *a, unsigned int k, | |||
910 | const struct snd_interval *b, struct snd_interval *c); | 916 | const struct snd_interval *b, struct snd_interval *c); |
911 | int snd_interval_list(struct snd_interval *i, unsigned int count, | 917 | int snd_interval_list(struct snd_interval *i, unsigned int count, |
912 | const unsigned int *list, unsigned int mask); | 918 | const unsigned int *list, unsigned int mask); |
919 | int snd_interval_ranges(struct snd_interval *i, unsigned int count, | ||
920 | const struct snd_interval *list, unsigned int mask); | ||
913 | int snd_interval_ratnum(struct snd_interval *i, | 921 | int snd_interval_ratnum(struct snd_interval *i, |
914 | unsigned int rats_count, struct snd_ratnum *rats, | 922 | unsigned int rats_count, struct snd_ratnum *rats, |
915 | unsigned int *nump, unsigned int *denp); | 923 | unsigned int *nump, unsigned int *denp); |
@@ -934,6 +942,10 @@ int snd_pcm_hw_constraint_list(struct snd_pcm_runtime *runtime, | |||
934 | unsigned int cond, | 942 | unsigned int cond, |
935 | snd_pcm_hw_param_t var, | 943 | snd_pcm_hw_param_t var, |
936 | const struct snd_pcm_hw_constraint_list *l); | 944 | const struct snd_pcm_hw_constraint_list *l); |
945 | int snd_pcm_hw_constraint_ranges(struct snd_pcm_runtime *runtime, | ||
946 | unsigned int cond, | ||
947 | snd_pcm_hw_param_t var, | ||
948 | const struct snd_pcm_hw_constraint_ranges *r); | ||
937 | int snd_pcm_hw_constraint_ratnums(struct snd_pcm_runtime *runtime, | 949 | int snd_pcm_hw_constraint_ratnums(struct snd_pcm_runtime *runtime, |
938 | unsigned int cond, | 950 | unsigned int cond, |
939 | snd_pcm_hw_param_t var, | 951 | snd_pcm_hw_param_t var, |