From patchwork Thu Mar 12 02:49:40 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inha Song X-Patchwork-Id: 5989801 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id C4FA3BF90F for ; Thu, 12 Mar 2015 02:51:42 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D55D3203AC for ; Thu, 12 Mar 2015 02:51:41 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id AB9462037F for ; Thu, 12 Mar 2015 02:51:40 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 67D1E2655E3; Thu, 12 Mar 2015 03:51:39 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id EF8232654E0; Thu, 12 Mar 2015 03:51:06 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 483FF2654E5; Thu, 12 Mar 2015 03:51:06 +0100 (CET) Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by alsa0.perex.cz (Postfix) with ESMTP id 73B262654BA for ; Thu, 12 Mar 2015 03:50:55 +0100 (CET) Received: from epcpsbgr3.samsung.com (u143.gpu120.samsung.co.kr [203.254.230.143]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NL20043YVWS6880@mailout1.samsung.com> for alsa-devel@alsa-project.org; Thu, 12 Mar 2015 11:50:52 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.114]) by epcpsbgr3.samsung.com (EPCPMTA) with SMTP id 3F.96.18484.C0FF0055; Thu, 12 Mar 2015 11:50:52 +0900 (KST) X-AuditID: cbfee68f-f791c6d000004834-12-5500ff0cef95 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 22.60.20081.C0FF0055; Thu, 12 Mar 2015 11:50:52 +0900 (KST) Received: from songinha-Samsung-DeskTop-System.10.32.193.11 ([10.252.81.136]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NL200HW2VW7TST0@mmp2.samsung.com>; Thu, 12 Mar 2015 11:50:52 +0900 (KST) From: Inha Song To: broonie@kernel.org, alsa-devel@alsa-project.org Date: Thu, 12 Mar 2015 11:49:40 +0900 Message-id: <1426128580-18320-2-git-send-email-ideal.song@samsung.com> X-Mailer: git-send-email 2.0.0.390.gcb682f8 In-reply-to: <1426128580-18320-1-git-send-email-ideal.song@samsung.com> References: <1426128580-18320-1-git-send-email-ideal.song@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprKIsWRmVeSWpSXmKPExsWyRsSkSJfnP0OowY554hZXLh5ispj68Amb xb8pN9gtrn95zmqx6+99Roslk+ezWny70sFk0Xmhg9Xi8q45bBZ/zmtaLH/7n82ic1c/q8WV S6fYLF5ufsPkwOex4XMTm8e/w/1MHjtn3WX32LSqk81jyZtDrB4vJ/5m89j3dhmbR9+WVYwe m09Xe3zeJBfAFcVlk5Kak1mWWqRvl8CV0dgwj7mgWbxi3b+ZbA2MX4S6GDk5JARMJCaf62aE sMUkLtxbz9bFyMUhJLCUUWLR1wVsMEVfjixhhkhMZ5RYu2MyE0hCSGAOk8TC6TogNpuAhsT3 z5uZQWwRAWOJm593gjUwC5xgknhw9yNYg7CAs8Ssfc/Yuxg5OFgEVCWOtqqBhHkF3CT+TPzJ BLFMW2Jfw0ywxZwC7hLrjm1khtjlJjFx/SkWkJkSAl/ZJbpaFoA1sAgISHybfIgFZKaEgKzE pgPMEHMkJQ6uuMEygVF4ASPDKkbR1ILkguKk9CJjveLE3OLSvHS95PzcTYzA2Dr971n/Dsa7 B6wPMQpwMCrx8F74zhAqxJpYVlyZe4jRFGjDRGYp0eR8YATnlcQbGpsZWZiamBobmVuaKYnz LpT6GSwkkJ5YkpqdmlqQWhRfVJqTWnyIkYmDU6qBUZv5Ssibx9YqnBuaSsKlLHZ2JDpWHF4t K/eP4eeyb9U+F8UUTxXcVVvhNYF137HDCbMC43azmTy0O3Wt5XZN1C3l7fWCdX256o9Xztu6 Z57Qe4Xaq9/X1d6JMNq+6W6i2b//E9Qeb/ESLBU4uOEmk7PjynlZlf5/RD3XZ66zMW/rnqj5 pKhfW4mlOCPRUIu5qDgRAOdyFTqoAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPIsWRmVeSWpSXmKPExsVy+t9jQV2e/wyhBg/6+CyuXDzEZDH14RM2 i39TbrBbXP/ynNVi19/7jBZLJs9ntfh2pYPJovNCB6vF5V1z2Cz+nNe0WP72P5tF565+Vosr l06xWbzc/IbJgc9jw+cmNo9/h/uZPHbOusvusWlVJ5vHkjeHWD1eTvzN5rHv7TI2j74tqxg9 Np+u9vi8SS6AK6qB0SYjNTEltUghNS85PyUzL91WyTs43jne1MzAUNfQ0sJcSSEvMTfVVsnF J0DXLTMH6AMlhbLEnFKgUEBicbGSvh2mCaEhbroWMI0Rur4hQXA9RgZoIGENY0Zjwzzmgmbx inX/ZrI1MH4R6mLk5JAQMJH4cmQJM4QtJnHh3nq2LkYuDiGB6YwSa3dMZgJJCAnMYZJYOF0H xGYT0JD4/nkzWIOIgLHEzc87mUEamAVOMEk8uPsRrEFYwFli1r5n7F2MHBwsAqoSR1vVQMK8 Am4Sfyb+ZIJYpi2xr2EmG4jNKeAuse7YRmaIXW4SE9efYpnAyLuAkWEVo2hqQXJBcVJ6rqFe cWJucWleul5yfu4mRnDkPpPawbiyweIQowAHoxIPb8VXhlAh1sSy4srcQ4wSHMxKIrx+v4BC vCmJlVWpRfnxRaU5qcWHGE2BjprILCWanA9MKnkl8YbGJmZGlkbmhhZGxuZK4rxK9m0hQgLp iSWp2ampBalFMH1MHJxSDYxy0567l/qLf11Xr2FmeP+xm+GRyrusi9dd1Nzw7VTvUYU9CYcy lBy/5U3JiLulO+03+8XLFRLbtpT8vNmYoPf2l7XLrOor10+YMIowfllWotn1/NaFADGW35r6 h5jKbz3qeeSrWf7go/LP+1XVnmIzr7s+fjt1rvTKtA69G1bf9k06d373SScDJZbijERDLeai 4kQA/HamnvICAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: lars@metafoo.de, sachin.kamat@samsung.com, tiwai@suse.de, patches@opensource.wolfsonmicro.com, lgirdwood@gmail.com, nikesh@opensource.wolfsonmicro.com, linux-kernel@vger.kernel.org, cw00.choi@samsung.com, Li.Xiubo@freescale.com, ckeepax@opensource.wolfsonmicro.com, Inha Song Subject: [alsa-devel] [PATCH] ASoC: wm8994: Manage wm8994's MCLK in codec driver X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP Previously, When we use wm8994 codec, we should control its MCLK in machine driver. But, It should be managed by wm8994 codec driver, not machine driver. This patch add MCLK clock DT parsing logic and control own MCLK. Signed-off-by: Inha Song --- sound/soc/codecs/wm8994.c | 27 ++++++++++++++++++++++++++- sound/soc/codecs/wm8994.h | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 247b390..d80dcc6 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -2470,6 +2471,7 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, { struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); struct wm8994 *control = wm8994->wm8994; + int i; wm_hubs_set_bias_level(codec, level); @@ -2491,8 +2493,19 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, break; } - if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY) + if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY) { + for (i = 0; i < ARRAY_SIZE(wm8994->clk_mclk); i++) { + if (!IS_ERR(wm8994->clk_mclk[i])) + clk_prepare_enable(wm8994->clk_mclk[i]); + } active_reference(codec); + } else if (codec->dapm.bias_level == SND_SOC_BIAS_ON) { + for (i = 0; i < ARRAY_SIZE(wm8994->clk_mclk); i++) { + if (!IS_ERR(wm8994->clk_mclk[i])) + clk_disable_unprepare( + wm8994->clk_mclk[i]); + } + } break; case SND_SOC_BIAS_STANDBY: @@ -4451,6 +4464,7 @@ static struct snd_soc_codec_driver soc_codec_dev_wm8994 = { static int wm8994_probe(struct platform_device *pdev) { struct wm8994_priv *wm8994; + int i; wm8994 = devm_kzalloc(&pdev->dev, sizeof(struct wm8994_priv), GFP_KERNEL); @@ -4460,6 +4474,17 @@ static int wm8994_probe(struct platform_device *pdev) wm8994->wm8994 = dev_get_drvdata(pdev->dev.parent); + for (i = 0; i < ARRAY_SIZE(wm8994->clk_mclk); i++) { + char mclk_name[] = "MCLKx"; + + snprintf(mclk_name, sizeof(mclk_name), "MCLK%d", i + 1); + + wm8994->clk_mclk[i] = devm_clk_get(pdev->dev.parent, mclk_name); + if (IS_ERR(wm8994->clk_mclk[i])) + if (PTR_ERR(wm8994->clk_mclk) == -EPROBE_DEFER) + return -EPROBE_DEFER; + } + pm_runtime_enable(&pdev->dev); pm_runtime_idle(&pdev->dev); diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h index 6536f8d..8cf06a4 100644 --- a/sound/soc/codecs/wm8994.h +++ b/sound/soc/codecs/wm8994.h @@ -78,6 +78,7 @@ struct wm8994_priv { int sysclk[2]; int sysclk_rate[2]; int mclk[2]; + struct clk *clk_mclk[2]; int aifclk[2]; int aifdiv[2]; int channels[2];