diff options
author | Jassi Brar <jassi.brar@samsung.com> | 2010-03-11 23:38:52 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-03-12 06:12:20 -0500 |
commit | d9ad6296ec3b4a55ba25f2c5e4824be487242e1f (patch) | |
tree | 7b4702e35b8754a71d7d5629477ce88dbcc37a7e /sound/soc/soc-core.c | |
parent | 960b3b4b4cb6d22d55ad0ebb280dac9876937fa0 (diff) |
ASoC: PCM_RATE: Check for KNOT and CONTINUOUS flags
For ASoC, if either CPU or CODEC driver has set the flag, the MACHINE driver
should be given a chance to figure out if the dai, that set the flag, can
accomodate a rate that it does not explicitly specify but is specified
by the dai at the other end of the link.
Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/soc-core.c')
-rw-r--r-- | sound/soc/soc-core.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 06c38d1502b7..eb73aab78b94 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -404,6 +404,12 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) | |||
404 | codec_dai->playback.formats & cpu_dai->playback.formats; | 404 | codec_dai->playback.formats & cpu_dai->playback.formats; |
405 | runtime->hw.rates = | 405 | runtime->hw.rates = |
406 | codec_dai->playback.rates & cpu_dai->playback.rates; | 406 | codec_dai->playback.rates & cpu_dai->playback.rates; |
407 | if (codec_dai->playback.rates | ||
408 | & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS)) | ||
409 | runtime->hw.rates |= cpu_dai->playback.rates; | ||
410 | if (cpu_dai->playback.rates | ||
411 | & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS)) | ||
412 | runtime->hw.rates |= codec_dai->playback.rates; | ||
407 | } else { | 413 | } else { |
408 | runtime->hw.rate_min = | 414 | runtime->hw.rate_min = |
409 | max(codec_dai->capture.rate_min, | 415 | max(codec_dai->capture.rate_min, |
@@ -421,6 +427,12 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) | |||
421 | codec_dai->capture.formats & cpu_dai->capture.formats; | 427 | codec_dai->capture.formats & cpu_dai->capture.formats; |
422 | runtime->hw.rates = | 428 | runtime->hw.rates = |
423 | codec_dai->capture.rates & cpu_dai->capture.rates; | 429 | codec_dai->capture.rates & cpu_dai->capture.rates; |
430 | if (codec_dai->capture.rates | ||
431 | & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS)) | ||
432 | runtime->hw.rates |= cpu_dai->capture.rates; | ||
433 | if (cpu_dai->capture.rates | ||
434 | & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS)) | ||
435 | runtime->hw.rates |= codec_dai->capture.rates; | ||
424 | } | 436 | } |
425 | 437 | ||
426 | snd_pcm_limit_hw_rates(runtime); | 438 | snd_pcm_limit_hw_rates(runtime); |