From 5b5a24c867634c0cca439711d47042e1df5c190d Mon Sep 17 00:00:00 2001 From: Inha Song Date: Wed, 11 Mar 2015 11:04:45 +0900 Subject: ASoC: samsung: Add 32khz clock control logic for codec mclk2 This patch add 32khz clock control logic for codec's master clock 2(MCLK2). WM1811 codec can use MCLK1 and MCLK2 as FLL's source clocks. Change-Id: Ifc57ae1772db9a905b0d1c101442ccf649d53c6b Signed-off-by: Inha Song --- sound/soc/samsung/trats2_wm1811.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/sound/soc/samsung/trats2_wm1811.c b/sound/soc/samsung/trats2_wm1811.c index 9de4fc32119..631c9660f1e 100644 --- a/sound/soc/samsung/trats2_wm1811.c +++ b/sound/soc/samsung/trats2_wm1811.c @@ -111,6 +111,7 @@ struct trats2_wm1811 { struct snd_soc_jack jack; struct snd_soc_codec *codec; struct clk *codec_mclk; + struct clk *codec_32khz; int gpio_mic_bias[MIC_MAX]; int gpio_vps_en; @@ -867,6 +868,12 @@ static int machine_init_paiftx(struct snd_soc_pcm_runtime *rtd) if (ret < 0) return ret; + ret = clk_prepare_enable(machine->codec_32khz); + if (ret < 0) { + clk_disable_unprepare(machine->codec_mclk); + return ret; + } + ret = snd_soc_add_card_controls(card, card_controls, ARRAY_SIZE(card_controls)); if (ret != 0) @@ -1151,6 +1158,7 @@ static int machine_card_suspend_post(struct snd_soc_card *card) codec_micd_set_rate(codec); clk_disable_unprepare(machine->codec_mclk); + clk_disable_unprepare(machine->codec_32khz); } snd_soc_dapm_sync(&codec->dapm); @@ -1165,8 +1173,10 @@ static int machine_card_resume_pre(struct snd_soc_card *card) int reg = 0; int ret; - if (!codec->active) + if (!codec->active) { clk_prepare_enable(machine->codec_mclk); + clk_prepare_enable(machine->codec_32khz); + } /* change sysclk from mclk2 to pll out of mclk1 */ ret = snd_soc_dai_set_pll(aif1_dai, WM8994_FLL1, @@ -1290,6 +1300,12 @@ static int trats2_wm1811_probe(struct platform_device *pdev) return PTR_ERR(machine->codec_mclk); } + machine->codec_32khz = clk_get(&pdev->dev, "32khz"); + if (IS_ERR(machine->codec_32khz)) { + dev_err(&pdev->dev, "failed to get 32khz clock\n"); + return PTR_ERR(machine->codec_32khz); + } + out_mux = clk_get(&pdev->dev, "out-mux"); if (IS_ERR(out_mux)) { dev_err(&pdev->dev, "failed to get out mux clock\n"); @@ -1335,6 +1351,7 @@ static int trats2_wm1811_remove(struct platform_device *pdev) snd_soc_unregister_card(card); clk_put(machine->codec_mclk); + clk_put(machine->codec_32khz); clk_put(machine->clk_pll); return 0; } -- cgit v1.2.3