aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiam Girdwood <liam.r.girdwood@linux.intel.com>2013-09-16 08:01:46 -0400
committerMark Brown <broonie@linaro.org>2013-09-16 19:57:37 -0400
commite54cf76ba2c9ec071a68e98f2830226c0cac8086 (patch)
tree05116aeef191b8d47406c1d46917e67b993d7f6b
parent272b98c6455f00884f0350f775c5342358ebb73f (diff)
ASoC: core: Add API for configuration of DAI BCLK ratio
Some codec drivers when running in slave mode require that BCLK to sample rate ratio is explicitly set by the machine driver as it may not be exactly rate * frame size. Extend the DAI API by adding :- int snd_soc_dai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio); Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--include/sound/soc-dai.h3
-rw-r--r--sound/soc/soc-core.c16
2 files changed, 19 insertions, 0 deletions
diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
index ae9a227d35d3..d8acf0ca77be 100644
--- a/include/sound/soc-dai.h
+++ b/include/sound/soc-dai.h
@@ -105,6 +105,8 @@ int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
105int snd_soc_dai_set_pll(struct snd_soc_dai *dai, 105int snd_soc_dai_set_pll(struct snd_soc_dai *dai,
106 int pll_id, int source, unsigned int freq_in, unsigned int freq_out); 106 int pll_id, int source, unsigned int freq_in, unsigned int freq_out);
107 107
108int snd_soc_dai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio);
109
108/* Digital Audio interface formatting */ 110/* Digital Audio interface formatting */
109int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt); 111int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt);
110 112
@@ -131,6 +133,7 @@ struct snd_soc_dai_ops {
131 int (*set_pll)(struct snd_soc_dai *dai, int pll_id, int source, 133 int (*set_pll)(struct snd_soc_dai *dai, int pll_id, int source,
132 unsigned int freq_in, unsigned int freq_out); 134 unsigned int freq_in, unsigned int freq_out);
133 int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div); 135 int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div);
136 int (*set_bclk_ratio)(struct snd_soc_dai *dai, unsigned int ratio);
134 137
135 /* 138 /*
136 * DAI format configuration 139 * DAI format configuration
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 4d0561312f3b..31adad04222d 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3577,6 +3577,22 @@ int snd_soc_codec_set_pll(struct snd_soc_codec *codec, int pll_id, int source,
3577EXPORT_SYMBOL_GPL(snd_soc_codec_set_pll); 3577EXPORT_SYMBOL_GPL(snd_soc_codec_set_pll);
3578 3578
3579/** 3579/**
3580 * snd_soc_dai_set_bclk_ratio - configure BCLK to sample rate ratio.
3581 * @dai: DAI
3582 * @ratio Ratio of BCLK to Sample rate.
3583 *
3584 * Configures the DAI for a preset BCLK to sample rate ratio.
3585 */
3586int snd_soc_dai_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio)
3587{
3588 if (dai->driver && dai->driver->ops->set_bclk_ratio)
3589 return dai->driver->ops->set_bclk_ratio(dai, ratio);
3590 else
3591 return -EINVAL;
3592}
3593EXPORT_SYMBOL_GPL(snd_soc_dai_set_bclk_ratio);
3594
3595/**
3580 * snd_soc_dai_set_fmt - configure DAI hardware audio format. 3596 * snd_soc_dai_set_fmt - configure DAI hardware audio format.
3581 * @dai: DAI 3597 * @dai: DAI
3582 * @fmt: SND_SOC_DAIFMT_ format value. 3598 * @fmt: SND_SOC_DAIFMT_ format value.