ASoC: Support 24.576MHz MCLKs in WM8915
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 21 Apr 2011 13:16:14 +0000 (14:16 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 26 Apr 2011 10:48:26 +0000 (11:48 +0100)
We can safely divide these down to within the supported SYSCLK range.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@ti.com>
sound/soc/codecs/wm8915.c

index 083609418bf46f61ed144a2bc5f7a479b65da7a8..4a3c5cc77e552745ba49514afb480a1c38edea10 100644 (file)
@@ -1831,6 +1831,7 @@ static int wm8915_set_sysclk(struct snd_soc_dai *dai,
        struct snd_soc_codec *codec = dai->codec;
        struct wm8915_priv *wm8915 = snd_soc_codec_get_drvdata(codec);
        int lfclk = 0;
+       int ratediv = 0;
        int src;
        int old;
 
@@ -1862,6 +1863,8 @@ static int wm8915_set_sysclk(struct snd_soc_dai *dai,
                snd_soc_update_bits(codec, WM8915_AIF_RATE,
                                    WM8915_SYSCLK_RATE, 0);
                break;
+       case 24576000:
+               ratediv = WM8915_SYSCLK_DIV;
        case 12288000:
                snd_soc_update_bits(codec, WM8915_AIF_RATE,
                                    WM8915_SYSCLK_RATE, WM8915_SYSCLK_RATE);
@@ -1877,8 +1880,8 @@ static int wm8915_set_sysclk(struct snd_soc_dai *dai,
        }
 
        snd_soc_update_bits(codec, WM8915_AIF_CLOCKING_1,
-                           WM8915_SYSCLK_SRC_MASK,
-                           src << WM8915_SYSCLK_SRC_SHIFT);
+                           WM8915_SYSCLK_SRC_MASK | WM8915_SYSCLK_DIV_MASK,
+                           src << WM8915_SYSCLK_SRC_SHIFT | ratediv);
        snd_soc_update_bits(codec, WM8915_CLOCKING_1, WM8915_LFCLK_ENA, lfclk);
        snd_soc_update_bits(codec, WM8915_AIF_CLOCKING_1,
                            WM8915_SYSCLK_ENA, old);