From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751794AbbCLCvN (ORCPT ); Wed, 11 Mar 2015 22:51:13 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:28139 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751452AbbCLCuz (ORCPT ); Wed, 11 Mar 2015 22:50:55 -0400 X-AuditID: cbfee68f-f791c6d000004834-12-5500ff0cef95 From: Inha Song To: broonie@kernel.org, alsa-devel@alsa-project.org Cc: patches@opensource.wolfsonmicro.com, linux-kernel@vger.kernel.org, ckeepax@opensource.wolfsonmicro.com, nikesh@opensource.wolfsonmicro.com, lars@metafoo.de, lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.de, Li.Xiubo@freescale.com, sachin.kamat@samsung.com, cw00.choi@samsung.com, Inha Song Subject: [PATCH] ASoC: wm8994: Manage wm8994's MCLK in codec driver 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 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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]; -- 2.0.0.390.gcb682f8