diff options
author | Jyri Sarha <jsarha@ti.com> | 2014-06-13 05:50:00 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-06-21 06:05:01 -0400 |
commit | 0929878f93be5534974e058bc1e4b3abb36478b5 (patch) | |
tree | bbf7764317a8565a99e66a706e5514e45713cd1a | |
parent | 6479285d8aa1cbf22d21706370e812e7af51241c (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.c | 14 |
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, |