| From b59cf288964616a0e8013172473d3a2cdda8958f Mon Sep 17 00:00:00 2001 |
| From: Sascha Hauer <s.hauer@pengutronix.de> |
| Date: Wed, 14 May 2014 09:37:36 +0200 |
| Subject: ASoC: ak4642: Add support for extended sysclk frequencies of the |
| ak4648 |
| |
| Additionally to the ak4642 pll frequencies the ak4648 also supports 13MHz, |
| 19.2MHz and 26MHz. This adds support for these frequencies. |
| |
| Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 5cd15e29a45a18b9a744af61a7d90f26f730eb97) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| sound/soc/codecs/ak4642.c | 20 ++++++++++++++++++++ |
| 1 file changed, 20 insertions(+) |
| |
| diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c |
| index 0a7f03f3d934..86242f770c10 100644 |
| --- a/sound/soc/codecs/ak4642.c |
| +++ b/sound/soc/codecs/ak4642.c |
| @@ -136,6 +136,7 @@ |
| |
| struct ak4642_drvdata { |
| const struct regmap_config *regmap_config; |
| + int extended_frequencies; |
| }; |
| |
| struct ak4642_priv { |
| @@ -297,7 +298,9 @@ static int ak4642_dai_set_sysclk(struct snd_soc_dai *codec_dai, |
| int clk_id, unsigned int freq, int dir) |
| { |
| struct snd_soc_codec *codec = codec_dai->codec; |
| + struct ak4642_priv *priv = snd_soc_codec_get_drvdata(codec); |
| u8 pll; |
| + int extended_freq = 0; |
| |
| switch (freq) { |
| case 11289600: |
| @@ -318,9 +321,25 @@ static int ak4642_dai_set_sysclk(struct snd_soc_dai *codec_dai, |
| case 27000000: |
| pll = PLL3 | PLL2 | PLL0; |
| break; |
| + case 19200000: |
| + pll = PLL3; |
| + extended_freq = 1; |
| + break; |
| + case 13000000: |
| + pll = PLL3 | PLL2 | PLL1; |
| + extended_freq = 1; |
| + break; |
| + case 26000000: |
| + pll = PLL3 | PLL2 | PLL1 | PLL0; |
| + extended_freq = 1; |
| + break; |
| default: |
| return -EINVAL; |
| } |
| + |
| + if (extended_freq && !priv->drvdata->extended_frequencies) |
| + return -EINVAL; |
| + |
| snd_soc_update_bits(codec, MD_CTL1, PLL_MASK, pll); |
| |
| return 0; |
| @@ -533,6 +552,7 @@ static const struct ak4642_drvdata ak4643_drvdata = { |
| |
| static const struct ak4642_drvdata ak4648_drvdata = { |
| .regmap_config = &ak4648_regmap, |
| + .extended_frequencies = 1, |
| }; |
| |
| static struct of_device_id ak4642_of_match[]; |
| -- |
| 2.1.2 |
| |