aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJyri Sarha <jsarha@ti.com>2014-06-13 05:50:00 -0400
committerMark Brown <broonie@linaro.org>2014-06-21 06:05:01 -0400
commit0929878f93be5534974e058bc1e4b3abb36478b5 (patch)
treebbf7764317a8565a99e66a706e5514e45713cd1a
parent6479285d8aa1cbf22d21706370e812e7af51241c (diff)
ASoC: davinci-mcasp: Allow best effort in selecting BCLK divider
Do not fail if the exact BLCK rate can not be produced, just print a warning. Check that sysclk frequency is set before implicitly setting the BCLK divider. Signed-off-by: Jyri Sarha <jsarha@ti.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--sound/soc/davinci/davinci-mcasp.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
index 121971e1371e..5b81adb3c93e 100644
--- a/sound/soc/davinci/davinci-mcasp.c
+++ b/sound/soc/davinci/davinci-mcasp.c
@@ -721,14 +721,18 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
721 int ret; 721 int ret;
722 722
723 /* If mcasp is BCLK master we need to set BCLK divider */ 723 /* If mcasp is BCLK master we need to set BCLK divider */
724 if (mcasp->bclk_master) { 724 if (mcasp->bclk_master && mcasp->sysclk_freq) {
725 unsigned int bclk_freq = snd_soc_params_to_bclk(params); 725 unsigned int bclk_freq = snd_soc_params_to_bclk(params);
726 unsigned int div = mcasp->sysclk_freq / bclk_freq;
726 if (mcasp->sysclk_freq % bclk_freq != 0) { 727 if (mcasp->sysclk_freq % bclk_freq != 0) {
727 dev_err(mcasp->dev, "Can't produce required BCLK\n"); 728 if (((mcasp->sysclk_freq / div) - bclk_freq) >
728 return -EINVAL; 729 (bclk_freq - (mcasp->sysclk_freq / (div+1))))
730 div++;
731 dev_warn(mcasp->dev,
732 "Inaccurate BCLK: %u Hz / %u != %u Hz\n",
733 mcasp->sysclk_freq, div, bclk_freq);
729 } 734 }
730 davinci_mcasp_set_clkdiv( 735 davinci_mcasp_set_clkdiv(cpu_dai, 1, div);
731 cpu_dai, 1, mcasp->sysclk_freq / bclk_freq);
732 } 736 }
733 737
734 ret = mcasp_common_hw_param(mcasp, substream->stream, 738 ret = mcasp_common_hw_param(mcasp, substream->stream,