aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-core.c
diff options
context:
space:
mode:
authorJassi Brar <jassi.brar@samsung.com>2010-03-11 23:38:52 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-03-12 06:12:20 -0500
commitd9ad6296ec3b4a55ba25f2c5e4824be487242e1f (patch)
tree7b4702e35b8754a71d7d5629477ce88dbcc37a7e /sound/soc/soc-core.c
parent960b3b4b4cb6d22d55ad0ebb280dac9876937fa0 (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.c12
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);