From patchwork Thu Mar 3 06:45:35 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zidan Wang X-Patchwork-Id: 8488301 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id C2BD19F314 for ; Thu, 3 Mar 2016 06:42:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A34682024F for ; Thu, 3 Mar 2016 06:42:15 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 23D552022A for ; Thu, 3 Mar 2016 06:42:14 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id E5DA9261A7C; Thu, 3 Mar 2016 07:42:12 +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=BAD_ENC_HEADER,BAYES_00, RCVD_IN_DNSWL_NONE, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 4F60B2614E3; Thu, 3 Mar 2016 07:42:11 +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 C6929261560; Thu, 3 Mar 2016 07:42:09 +0100 (CET) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bon0131.outbound.protection.outlook.com [157.56.111.131]) by alsa0.perex.cz (Postfix) with ESMTP id 40AAC26068F for ; Thu, 3 Mar 2016 07:42:02 +0100 (CET) Received: from BY2PR03CA001.namprd03.prod.outlook.com (10.255.93.18) by DM2PR0301MB1263.namprd03.prod.outlook.com (10.160.219.28) with Microsoft SMTP Server (TLS) id 15.1.409.15; Thu, 3 Mar 2016 06:41:59 +0000 Received: from BN1AFFO11FD038.protection.gbl (10.255.93.4) by BY2PR03CA001.outlook.office365.com (10.255.93.18) with Microsoft SMTP Server (TLS) id 15.1.409.15 via Frontend Transport; Thu, 3 Mar 2016 06:41:59 +0000 Authentication-Results: spf=neutral (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: Neutral (protection.outlook.com: 192.88.168.50 is neither permitted nor denied by domain of freescale.com) Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD038.mail.protection.outlook.com (10.58.52.242) with Microsoft SMTP Server (TLS) id 15.1.427.7 via Frontend Transport; Thu, 3 Mar 2016 06:41:58 +0000 Received: from b50113.ap.freescale.net (b50113.ap.freescale.net [10.192.241.147]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u236fsWp008163; Wed, 2 Mar 2016 23:41:55 -0700 From: Zidan Wang To: Date: Thu, 3 Mar 2016 14:45:35 +0800 Message-ID: X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(3190300001)(199003)(189002)(229853001)(110136002)(36756003)(2351001)(50226001)(106466001)(87936001)(105586002)(92566002)(5001960100004)(50986999)(86362001)(107886002)(5008740100001)(189998001)(1220700001)(118296001)(33646002)(48376002)(11100500001)(19580405001)(19580395003)(47776003)(586003)(104016004)(6806005)(5003940100001)(2906002)(50466002)(1096002)(77096005)(4326007); DIR:OUT; SFP:1102; SCL:1; SRVR:DM2PR0301MB1263; H:tx30smr01.am.freescale.net; FPR:; SPF:Neutral; MLV:sfv; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD038; 1:eIJj+QsXtLaDTrvertT2S8voPVp5K1N/XYPEL6E36rLjQw22eXw3lhg0yMPqhAwjYP/0xr1CP7ZBHkdqNtRgvuYNIa2Hj+Mglrt+xx/qQvDYd9hCFaEYaJa0bf4Es37m9Go6vHedMlk7Q1hA9ZAPsx3YXt0iee3D+tLMtK3rB8mSIKYu01idON5TrFt1MECerecL+8viIMYhLj/Nc1bnyVUUj9Tn/JLMcXmryzAj9VoNmcEAzkM7ucHOAU61Tr7fsmGsVvyiUmJogEKwRcPFsqZREAGuywOcvAyYatFhbl3Fehqa/55Qk9SdKcTcr01Rdnz/NlXG1qWy2HQmR0+31WUH2mDc+xU/OMeuWGFYMQwzEiGCxKhaN6NQ+4lmhbUheNMvhKMjRTNzKgdPzhk5RzOgmNhC/t/06Q73hnh90XjFCeb0Ce8xfTDgyrAPznNzg3/bAtOb78nToIREbBfisYPounjIfyg2Q3BsmAlUdNeJewylObbPVF51waQRMmomyNEIK9yc50i2Wda3wsy5JA== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 47147dc6-7b28-47ff-d0e7-08d3432eebba X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB1263; 2:dtNlQoGp8cpJdAN5pFhHnyxiZvq17soj4iKFt1oJxSazMkV/te2d+dPvDrnzWUwQ+ERrk1s6BEhR/395yXjZiGAonzkjUjeMvPOz0Y60Xn04smCqBewtDq/9i1hcGP/6Km8OXVtnhvDivIdn5g/5zJhpwlvOCHt127EYIQpujMsfld92zrHCXDL2e5idLhzj; 3:Ar+ySctz/MLqdRtka8jxeCDZpW0qcTsth8cF7UgFbBSo97TDtyKUUBmp+2wH0iY/wPdrqhr/4sWhYZYJVgTz6m12b6Z/2ypBHm8lTUgdUsfquz0qbjhI0ikHmYBdvQpIigcm7Z3Ws1FxRcYB1xb3LCKDRfeE/5qTwzhr6MIIebWbbbXr3LA2f4GJ305CRUbUZMYrDgljHpBzr0Tq3mA0MOB1Ed0rOtDjMicfDHF7F7s=; 25:v4C8IiAvOBgYzJmgwAP2sF9KMWZbG5gjo9K84qi+qosf7TNv7J1uGKmqwi8Wrc0sZcUBHCtuQdDY9KxkcZRgNoM+zjAKmCfplE5ACegc935sqZSjhgZvWwHBxM6d3PX/i0bpwiQC3glgtPW3741FLs3lqGzJ5N1xyGmPQd9+9/0mPY+5+qwAc4Ls63qguLEyFd3oE5i006WZdp4uxWZnT05WOin0QDEvjEn3lHEpsRCYXdQKsxsItjklqIB+0XSUjPIiTrQ4CKkKD6J2i2GOhy9za1UaUk1b/YbZ+pbJJaoQHw4KGbWzvqr5vtu3/5xJCst326nTR7W7crfBIZAqjg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB1263; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB1263; 20:Ey5ZBnNp0236FqLc7glnRicfd2mK5OhTumMwI9+fC8kl36N3UDio51H9S1GVz/ZgJEBkcL2R7a8BpcrZSHq/DW0CycVcT7tXv+ZiAWcIrjsfmIOoBw/3rrlQhRcDIJATcl6skJq/5qtYGtehdIKZAE/V0A5QhAx6D8ysrZxLSH1y/LIlsOzxNv4UujZtWnVBfU5At7s2uCQar7VR8Qdd5tyLzutN4ymoKO5xv1rvfFpqCabABRIp6Y38dIG4aczbCwcldyavY/9O8/i+UKBcXkeJLIlCTf2ZSxPxcE5dB8LYymok8rtaa47QtLDoxlE75wfdzywcmngNPfYM5kOW/dGyfwobw1lYcAbmAw0I3Dob3TNxDfolBY9rYe3liP5aBJTESfOcnAWSpD6yazdslRJKj+aMClnNZd5H3nPqzTSb7Z5AkAZ13ND7NbeyOEGM; 4:/nov/gg9xuYAOp8URY94ILCUjBi8AqK9D+/dtgQUdEdO3k2BPEO5QlBX6/RK0ecoXtcDELgyiGVQKhM1dCkOb6NHriBY6enrRF/UssbGyzfMVrh957iQU2F0UwSqKj18qFFNTN67p9Rnfi+PoYD/CFCVsLN+z72E2qPeooYhe/mI7Dho1a03mz47kIb/ZVysvH/xjYI/NQ/zpGNugtJ8hQ7CvtvGRmN/Ueog6MnJfmBa5Xu+s4WmxTSH7l4TqEzOzS92gxxsjvVuVBcn9+7SoFM6HFGh22BTvTbcBRWkvaetqRRaOG3pZ3IuW1BBECua5JyOKOu2UMx7PDn8OPZdyUI5TIVv17qhdgcljBXrZGK6uh0zz+T58rNEdY+97x0EpWFoyMCLyIRmlQZNBwiEIY4ZfWduRvDUlQkjFP6aw2sDTGzVoKPdEyGmsDQpPvud/BLdt0FiBPnYgLp3yFfXBA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13015025)(13017025)(13023025)(13024025)(5005006)(8121501046)(13018025)(3002001)(10201501046); SRVR:DM2PR0301MB1263; BCL:0; PCL:0; RULEID:; SRVR:DM2PR0301MB1263; X-Forefront-PRVS: 0870212862 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0301MB1263; 23:WmmlVnD0o3BgZY2tCRAXKUdNSHGzzk9qUElmKQn?= =?us-ascii?Q?bxK2RdCjmt5oO6Nt7JQQ6zdLtzuvvty3eakrkxwAQqZ9b3BHzjHwJJBYGzmm?= =?us-ascii?Q?C2g5CUW0yJNuJcxGUFYpS8LqlSLussGbNgOH79xZI2bSrEFfOzFWrjIAiKkn?= =?us-ascii?Q?DM0A9kd13S6rD0dG4jebXMr37xdNWER2jrumslsQ3tidN+kTGIhAzfRX4uyn?= =?us-ascii?Q?GLTtuZy9lpsW2uba5On8BAO4TpYWntF09cb8jGXdE84XA4rec16W2gY7ivOc?= =?us-ascii?Q?8hJ2mvjCmvfTU6cTCC7JYa9OAIuAUT+gCnO3eRWRA/mpMmyDDtQx3x5XTm2/?= =?us-ascii?Q?aY453WC9nOwm1J+CYAW4OCj0rg8tZ1r72r5TjtETRZfndDucWQmJGD28OJWs?= =?us-ascii?Q?RpVTfBcVMdkj1V0qt/HnA6G0LNk3eQB58H/F4+8ezlJItSFDG68b8yYUGvdj?= =?us-ascii?Q?rAZ3Nfrkv7Oakr4mI7I3Xk1Y0obNPL9AW2zu2rT6Amfpe2D0je+aRYGoXYyQ?= =?us-ascii?Q?ZpWOwfZJieKC1sz+hxBgAcE5tN/49r9gkaTAE3E/GMEBwoJ3HXeEQLaui/5N?= =?us-ascii?Q?0yzm/thXxwJ0oaSjy0YGRUcBi+p30PeEwPPtjaKlwPKaBG+4lZI1PDa85gqM?= =?us-ascii?Q?Y2f3F1pHqUnjRNYrDoVIf+SPi/o16Hvlrl2AadRtBZzlejST+062f37iJGPj?= =?us-ascii?Q?zP6AwMGUn94aybSgYqh+3fwaa3Nq+Uo9Ag3lHJjo9FRsil2yoJ5JgM55u8nH?= =?us-ascii?Q?Pwsk39dIgsSznRmhnVO3rpoT817R31TztAH4mSejI5PqmlKeMDqRKMLGzGmZ?= =?us-ascii?Q?Qu+KQglh+lB6OcPp+9YyaAF25V225Bh1WI2lM2wk6jQm8k4EdLh+fHx291yk?= =?us-ascii?Q?qS+gTaSf8MWSx5wOgDSiDaWaVptDUDwMWO6rk3vcbBm8HCl0O6IhQTBySPMU?= =?us-ascii?Q?ksd3ocJL7m9vrzpthctjezDnIN6i5t/S7mJvffoPXaEb+1mxWF13VkilgVWT?= =?us-ascii?Q?Vt0I=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0301MB1263; 5:Ksx+ln2lTp+GrblKefpsaFdJuDYiR3VJgmQoDikeiMpuq9GJ95NQ7CjGJVMRhYW8ReNt99gvPHrKaV6TDQkSaMFsS1ASslRyQ7FUJup1xIZamxkUbsP99z9rm/ks1bCOaz608cA/ZIxyqSFdjTfGIA==; 24:ahdARBx5qoNNwQIZanf2AZyQsbtrU8EuNtI00TSVApwG5euq1Ukj+nmg8CIK5dysEpLaEX/Nh1hMdIgun33g2W2SBT7rIrN3MqDn4h6BltI= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2016 06:41:58.9945 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB1263 Cc: nicoleotsuka@gmail.com, ckeepax@opensource.wolfsonmicro.com, patches@opensource.wolfsonmicro.com, alsa-devel@alsa-project.org, Zidan Wang Subject: [alsa-devel] [PATCH] ASoC: wm8994: codec driver should manage its own MCLK 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: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP codec driver should manage its own master clock, MCLK1 and MCLK2. When bias_level change from standby to prepare, enable codec MCLK. When bias_level change from prepare to standby, disable codec MCLK. Signed-off-by: Zidan Wang --- drivers/mfd/wm8994-core.c | 7 +++++++ include/linux/mfd/wm8994/pdata.h | 3 +++ sound/soc/codecs/wm8994.c | 17 +++++++++++++++-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c index 7eec619..ace2cea 100644 --- a/drivers/mfd/wm8994-core.c +++ b/drivers/mfd/wm8994-core.c @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -270,6 +271,7 @@ static int wm8994_set_pdata_from_of(struct wm8994 *wm8994) { struct device_node *np = wm8994->dev->of_node; struct wm8994_pdata *pdata = &wm8994->pdata; + char tmp[8]; int i; if (!np) @@ -310,6 +312,11 @@ static int wm8994_set_pdata_from_of(struct wm8994 *wm8994) if (pdata->ldo[1].enable < 0) pdata->ldo[1].enable = 0; + for (i = 0; i < WM8994_NUM_MCLK; i++) { + sprintf(tmp, "MCLK%d", i + 1); + pdata->mclk[i] = devm_clk_get(wm8994->dev, tmp); + } + return 0; } #else diff --git a/include/linux/mfd/wm8994/pdata.h b/include/linux/mfd/wm8994/pdata.h index 90c6052..657a828 100644 --- a/include/linux/mfd/wm8994/pdata.h +++ b/include/linux/mfd/wm8994/pdata.h @@ -18,6 +18,7 @@ #define WM8994_NUM_LDO 2 #define WM8994_NUM_GPIO 11 #define WM8994_NUM_AIF 3 +#define WM8994_NUM_MCLK 2 struct wm8994_ldo_pdata { /** GPIOs to enable regulator, 0 or less if not available */ @@ -233,6 +234,8 @@ struct wm8994_pdata { * GPIO for the IRQ pin if host only supports edge triggering */ int irq_gpio; + + struct clk *mclk[WM8994_NUM_MCLK]; }; #endif diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index 2ccbb32..7379eae 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -2474,6 +2475,8 @@ 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; + struct wm8994_pdata *pdata = &control->pdata; + int i; wm_hubs_set_bias_level(codec, level); @@ -2495,8 +2498,13 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, break; } - if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_STANDBY) + if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_STANDBY) { active_reference(codec); + + for (i = 0; i < WM8994_NUM_MCLK; i++) + if (!IS_ERR(pdata->mclk[i])) + clk_prepare_enable(pdata->mclk[i]); + } break; case SND_SOC_BIAS_STANDBY: @@ -2524,8 +2532,13 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, WM8994_LINEOUT2_DISCH); } - if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_PREPARE) + if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_PREPARE) { + for (i = 0; i < WM8994_NUM_MCLK; i++) + if (!IS_ERR(pdata->mclk[i])) + clk_disable_unprepare(pdata->mclk[i]); + active_dereference(codec); + } /* MICBIAS into bypass mode on newer devices */ switch (control->type) {