From a35c5a9546147dce84466655754a22194f0ce07c Mon Sep 17 00:00:00 2001 From: Baozhu Zuo Date: Tue, 16 May 2017 14:31:19 +0800 Subject: [PATCH] using 24M mclk --- wm8960.c | 22 +++++++++++++++++----- wm8960.ko | Bin 42584 -> 43588 bytes 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/wm8960.c b/wm8960.c index 0e07230..8b38083 100644 --- a/wm8960.c +++ b/wm8960.c @@ -9,7 +9,7 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ - +#define DEBUG 1 #include #include #include @@ -616,7 +616,7 @@ static int wm8960_configure_clocking(struct snd_soc_codec *codec) if (!(iface1 & (1<<6))) { dev_dbg(codec->dev, "Codec is slave mode, no need to configure clock\n"); - return 0; + //return 0; } if (wm8960->clk_id != WM8960_SYSCLK_MCLK && !wm8960->freq_in) { @@ -627,6 +627,9 @@ static int wm8960_configure_clocking(struct snd_soc_codec *codec) freq_in = wm8960->freq_in; bclk = wm8960->bclk; lrclk = wm8960->lrclk; + + printk("clk_id %d freq_in: %d bclk: %d lrclk: %d\n",wm8960->clk_id ,freq_in, bclk,lrclk); + /* * If it's sysclk auto mode, check if the MCLK can provide sysclk or * not. If MCLK can provide sysclk, using MCLK to provide sysclk @@ -955,6 +958,7 @@ static int wm8960_set_bias_level_capless(struct snd_soc_codec *codec, * If it's sysclk auto mode, and the pll is enabled, * disable the pll */ + printk("SND_SOC_BIAS_ON"); if (wm8960->clk_id == WM8960_SYSCLK_AUTO && (pm2 & 0x1)) wm8960_set_pll(codec, 0, 0); @@ -1134,6 +1138,8 @@ static int wm8960_set_pll(struct snd_soc_codec *codec, static int wm8960_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, int source, unsigned int freq_in, unsigned int freq_out) { + printk("wm8960_set_dai_pll:%d %d\n",freq_in, freq_out); + struct snd_soc_codec *codec = codec_dai->codec; struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); @@ -1141,7 +1147,6 @@ static int wm8960_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, if (pll_id == WM8960_SYSCLK_AUTO) return 0; - return wm8960_set_pll(codec, freq_in, freq_out); } @@ -1151,6 +1156,8 @@ static int wm8960_set_dai_clkdiv(struct snd_soc_dai *codec_dai, struct snd_soc_codec *codec = codec_dai->codec; u16 reg; + printk("wm8960_set_dai_clkdiv div_id: %d div: %d\n",div_id, div); + switch (div_id) { case WM8960_SYSCLKDIV: reg = snd_soc_read(codec, WM8960_CLOCK1) & 0x1f9; @@ -1190,9 +1197,11 @@ static int wm8960_set_bias_level(struct snd_soc_codec *codec, static int wm8960_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int freq, int dir) { + struct snd_soc_codec *codec = dai->codec; struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); - + clk_id = WM8960_SYSCLK_PLL; + printk("wm8960_set_dai_sysclk: %d %d ",freq, clk_id); switch (clk_id) { case WM8960_SYSCLK_MCLK: snd_soc_update_bits(codec, WM8960_CLOCK1, @@ -1207,7 +1216,7 @@ static int wm8960_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id, default: return -EINVAL; } - + wm8960->freq_in = 24000000; wm8960->sysclk = freq; wm8960->clk_id = clk_id; @@ -1307,7 +1316,10 @@ static int wm8960_i2c_probe(struct i2c_client *i2c, if (wm8960 == NULL) return -ENOMEM; + wm8960->clk_id = WM8960_SYSCLK_PLL; + wm8960->mclk = devm_clk_get(&i2c->dev, "mclk"); + if (IS_ERR(wm8960->mclk)) { if (PTR_ERR(wm8960->mclk) == -EPROBE_DEFER) return -EPROBE_DEFER; diff --git a/wm8960.ko b/wm8960.ko index eb6dd00f5fbd0b3ac1e42f07e0c406871ea4afc0..164ef7cc01207f06b19dbbb5f8966f4cb8e7562f 100644 GIT binary patch delta 12462 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 delta 11697 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