Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1163155

[alsa-devel][PATCH 1/4] ASoC: wm8960: codec mclk should be enabled early to avoid jack detect error

Path csiph.com!aioe.org!bofh.it!news.nic.it!robomod
From Zidan Wang <zidan.wang@freescale.com>
Newsgroups linux.kernel
Subject [alsa-devel][PATCH 1/4] ASoC: wm8960: codec mclk should be enabled early to avoid jack detect error
Date Thu, 11 Jun 2015 13:20:02 +0200
Message-ID <pA8GC-40B-13@gated-at.bofh.it> (permalink)
References <pA8GC-40B-7@gated-at.bofh.it>
X-Original-To <broonie@kernel.org>
Authentication-Results spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none;
Received-Spf Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net;
X-Mailer git-send-email 1.9.1
X-Microsoft-Exchange-Diagnostics 1;BL2FFO11FD037;1:5gFu7ZirmqbJZ5vyv9oFwaDi01z5qjZ9OFNlK0e18ObkzuLEYHCAcGyQ30IPkRRwYqmi+wpg11o87p3CwbiYmga68N1VTWqF6X8UETL7NfTKu8rYkUeGFDPyXegfmx4ZI/Pv26UqADsY8PfNx+CUaarPHcQIL6nbGezQOM+d2hyGKPZ2ICWAqPiCYdYaViv4dwMMnqp0r31MCJz2gK3fTLVdEi9+rYR01nRohGdnnua5H364YqUspwO4cVUGxwyDxceIgPQl6fpm7W826BjjbsZyoXfUUT6eewU958lF8Qbwj/iwe8jgVRavqy1q9Fj4c4Vv1m07yFrdhwaq9v0h4+biwn6+EL8Mndpyitz5zgs=
X-Forefront-Antispam-Report CIP:192.88.158.2;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(339900001)(189002)(199003)(229853001)(2950100001)(46102003)(48376002)(92566002)(104016003)(33646002)(86362001)(106466001)(189998001)(77156002)(62966003)(118296001)(6806004)(77096005)(50466002)(2351001)(19580395003)(110136002)(36756003)(107886002)(50226001)(5001960100002)(87936001)(50986999)(105606002)(85426001)(47776003)(76176999)(19580405001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BY1PR0301MB1256;H:az84smr01.freescale.net;FPR:;SPF:Fail;MLV:sfv;MX:1;A:1;LANG:en;
MIME-Version 1.0
Content-Type text/plain
X-Microsoft-Exchange-Diagnostics 1;BY1PR0301MB1256;2:Wdc+xBFnLf5m9JmW6b7r9IboBLp8se8aHqGJ924zo9XP0gUqzYDgt2jxqXAhj6JN;2:lMU0sqar32V+Y6MFGtA7EGlP/6IVHRClTBHwbQTw+pughMy1lxi4KhWybUGTvmAgGcl9SBhPjRULpEADgmRQCTe2O6zm1KLI4voFhYLSzx0sHE/E3v00sLXcZKy3F1f0dmzTCr9P7JBhqxLMAnJ76+qFZ5qQ+RvH9hggCZooVqhCcNlJ4km3tIzHL+KJZkdh+QAqfmhcdfm4i8hIP9sU4n17ZwnZtOPshLixlb0ozZI=;6:/55tD9KRjOavdN3jZujNF6N3xEid2L88v1wFIG+oyCUnXM8H7lvK1QTS9INQWPE0xQbCJcdtdMokdDd2gKUDc6nT+1XpFKWSFz+3TQkwmsPk0uYAESdAWTahPB8pLbCwdR/4DQStoxcbkeZRami4SvAk8Ft1fPtLsi/NBW16gD0Ba/hkM4KTjb6R913P+83a6oUFRSW1doID6T7GE23S3uMLAM3oP5SWDjKg9WP1l8i0gX94vf7PMO1eFFGcjDjVmGIkdsbt/9m7jAJHp+Tg5rn7a93kmxjAQGkQyKidYG924VAxYWnDumv1O3dPpAU/t+rbqTT0/3vsbMzAlFotSg==
X-Microsoft-Antispam UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1256;
X-Microsoft-Antispam-Prvs <BY1PR0301MB12564F58B153AD9C01E9370090BC0@BY1PR0301MB1256.namprd03.prod.outlook.com>
X-Exchange-Antispam-Report-Test UriScan:;
X-Exchange-Antispam-Report-Cfa-Test BCL:0;PCL:0;RULEID:(601004)(5005006)(520003)(3002001);SRVR:BY1PR0301MB1256;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1256;
X-Microsoft-Exchange-Diagnostics 1;BY1PR0301MB1256;3:yOE3wyR+ibpmWKOD6iVzfRVSEBGpUeaQC9bUNlyIegXiYxFwuD7q/FsNupyGIupAJqhYoK+pxxLQN7fwqL6BhtXl+0RbLQHsa3ImkXRnzmAVUjoTWiVrFPW0XyvN0Jnb95naeGyAHBrR9VJHYBzI12RfS4q2hOcsSSjOD9uxGJK4eUdWvQyy3mHbHd18oxDGWEPF7r4BT2K8vHapg48X1YekdHYE5qy1xq3JGuSqs4i7akuOBP9+IkiYPwETR0vXQ1/YRI/AFjsdPLeQEDGnJ3isL0k7RTq/iW2eYU3zXGD1Sv0dXIOct5JRfOfWO55O
X-Forefront-Prvs 0604AFA86B
X-Microsoft-Exchange-Diagnostics 1;BY1PR0301MB1256;9:k4rxdLn5f6XeI1bE/SJzFMK/sWYNUtUGM2SCqez6wJIxSoXdBsCmKrSa0nNc1yCLZtJY8laXP9fD3uCtFAKQ9FYlcDwcs/x0hrARx4SB/Z8F/vb896/XItc2TG3z4fR5wUvdwHE1rMEjl/dUM7E364xuFAWw+44AMtQalpKFKuW/oYIxrL2nhONvZECLQpVPNpCFroTMmpxNifpF1ESY4oNctrslDWl3q5CT9Wb51iBrTsJDAurrn9CRcmN6+xpRVb+ndfGg02/G7bTVEaMwIOWQOJumOKmLLvaTI5iub5OlxUQY/dWGHgyc1pFW+5wDBbhYRJJgcCUhb0+NsaZUAl+n4q82pTgHlY6uHVEtnnhfX9VgN/ioHXAq3brPJghpUO3hLeZ3to52eq52UhICo6VTSh/3rymw2ud+fAeGUrY2NtSZ6/on2f+3t7TerEp+t0cFW2FrSg2/GHnkmZMNu86Kae/yz9JPaCdSKENMPd2rBr3ZCRSKrJ0u/IsNjk6A7bHJtu4g0Za2JdtVVi1C8Bitv1iiFFKJv+KDLSejztxI+PpO4gPUd+Hn1DKX9UDf271Z0nrnlK1L/6djS7iCrVLULfs0Do3q1WhmewkezV8k5P59p8YK8CXpddQBomSEZlPtGtEzrBJOsBACVFPGM68zoPCwzWSn0VBBonnTKnzoKB5748kkKe/4UqmlZYy3lCEjYRoS53OV8FaDYmDdGh63IzFfmorOM5t5a+b4YwakmoWtsvhrjAJnF0u0YWsm3fSEOSzqkqrS0vRgOct+Li3qx+x7MVDPYl+ks5EVTR376FXY/l0Edg/NlgdWB/EqFstKw3m4/yb8qDPLnFuklO2yrm0Yi7ZfZJmzY6mlYXyp/YZ10TJl3AYq0WhAx+NBsvO8hDq/djYqQSgy8iB2PKRFJ7xxG8u+WZJNyOE7CPA=
X-Microsoft-Exchange-Diagnostics 1;BY1PR0301MB1256;3:Pve7zJHyVC8F31gVun0Bzsgamf3fAD5YYYZGr4DWE8doHKFC/5ce4TpZII33xpIvS2ESIPo7lqrt2Nx/kLVka6rJzz4cAqO2GTR8hX3iR+BeDOU5JMavgGd4xwkMQMe6ia08GB+/EQ7gfDTwZSDsJw==;10:y8sjlcdHG9s4r1n18dcGHgTG+J1oInTbw6AhTzHRU3ppIdZiMWov3Brw46xArcrKu8sOWN3jRb3U0QVavqv0ttxN0/VyccYGozqESQCcuQI=;6:3S/wh71GQOYTW3Yn0MijbH9BA2XqBAGCKqsY5JvSVhQ6iS79CyWP2qsc50TdJooE
X-Originatororg freescale.com
X-Ms-Exchange-Crosstenant-Originalarrivaltime 11 Jun 2015 11:13:50.7947 (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.158.2];Helo=[az84smr01.freescale.net]
X-Ms-Exchange-Crosstenant-Fromentityheader HybridOnPrem
X-Ms-Exchange-Transport-Crosstenantheadersstamped BY1PR0301MB1256
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 140
Organization linux.* mail to news gateway
X-Original-Cc <lgirdwood@gmail.com>, <perex@perex.cz>, <tiwai@suse.de>, <ckeepax@opensource.wolfsonmicro.com>, <lars@metafoo.de>, <patches@opensource.wolfsonmicro.com>, <alsa-devel@alsa-project.org>, <linux-kernel@vger.kernel.org>, Zidan Wang <zidan.wang@freescale.com>
X-Original-Date Thu, 11 Jun 2015 19:14:33 +0800
X-Original-Message-ID <880838f666b591f5ffb0de1e39df5e3734846246.1434020423.git.zidan.wang@freescale.com>
X-Original-References <cover.1434020423.git.zidan.wang@freescale.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref aioe.org linux.kernel:1163155

Show key headers only | View raw


It will playback from speaker in the first 2 seconds, then switch to
headphone. Steps to reproduce this issue:
1. plug out headphone and playback a wav.
2. stop playback and wait for at least 5 seconds, then
   plug in headphone and playback a wav.

Signed-off-by: Zidan Wang <zidan.wang@freescale.com>
---
 sound/soc/codecs/wm8960.c | 73 +++++++++++++++++++++--------------------------
 1 file changed, 33 insertions(+), 40 deletions(-)

diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index 761418f..729205f 100644
--- a/sound/soc/codecs/wm8960.c
+++ b/sound/soc/codecs/wm8960.c
@@ -491,6 +491,34 @@ static int wm8960_add_widgets(struct snd_soc_codec *codec)
 	return 0;
 }
 
+int wm8960_startup(struct snd_pcm_substream *substream,
+		struct snd_soc_dai *codec_dai)
+{
+	struct snd_soc_codec *codec = codec_dai->codec;
+	struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
+	int ret;
+
+	if (!IS_ERR(wm8960->mclk)) {
+		ret = clk_prepare_enable(wm8960->mclk);
+		if (ret) {
+			dev_err(codec->dev,
+				"Failed to enable MCLK: %d\n", ret);
+			return ret;
+		}
+	}
+	return 0;
+}
+
+void wm8960_shutdown(struct snd_pcm_substream *substream,
+		struct snd_soc_dai *codec_dai)
+{
+	struct snd_soc_codec *codec = codec_dai->codec;
+	struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
+
+	if (!IS_ERR(wm8960->mclk))
+		clk_disable_unprepare(wm8960->mclk);
+}
+
 static int wm8960_set_dai_fmt(struct snd_soc_dai *codec_dai,
 		unsigned int fmt)
 {
@@ -702,38 +730,14 @@ static int wm8960_set_bias_level_out3(struct snd_soc_codec *codec,
 				      enum snd_soc_bias_level level)
 {
 	struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
-	int ret;
 
 	switch (level) {
 	case SND_SOC_BIAS_ON:
 		break;
 
 	case SND_SOC_BIAS_PREPARE:
-		switch (snd_soc_codec_get_bias_level(codec)) {
-		case SND_SOC_BIAS_STANDBY:
-			if (!IS_ERR(wm8960->mclk)) {
-				ret = clk_prepare_enable(wm8960->mclk);
-				if (ret) {
-					dev_err(codec->dev,
-						"Failed to enable MCLK: %d\n",
-						ret);
-					return ret;
-				}
-			}
-
-			/* Set VMID to 2x50k */
-			snd_soc_update_bits(codec, WM8960_POWER1, 0x180, 0x80);
-			break;
-
-		case SND_SOC_BIAS_ON:
-			if (!IS_ERR(wm8960->mclk))
-				clk_disable_unprepare(wm8960->mclk);
-			break;
-
-		default:
-			break;
-		}
-
+		/* Set VMID to 2x50k */
+		snd_soc_update_bits(codec, WM8960_POWER1, 0x180, 0x80);
 		break;
 
 	case SND_SOC_BIAS_STANDBY:
@@ -780,7 +784,7 @@ static int wm8960_set_bias_level_capless(struct snd_soc_codec *codec,
 					 enum snd_soc_bias_level level)
 {
 	struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
-	int reg, ret;
+	int reg;
 
 	switch (level) {
 	case SND_SOC_BIAS_ON:
@@ -821,22 +825,9 @@ static int wm8960_set_bias_level_capless(struct snd_soc_codec *codec,
 					    WM8960_VREF, WM8960_VREF);
 
 			msleep(100);
-
-			if (!IS_ERR(wm8960->mclk)) {
-				ret = clk_prepare_enable(wm8960->mclk);
-				if (ret) {
-					dev_err(codec->dev,
-						"Failed to enable MCLK: %d\n",
-						ret);
-					return ret;
-				}
-			}
 			break;
 
 		case SND_SOC_BIAS_ON:
-			if (!IS_ERR(wm8960->mclk))
-				clk_disable_unprepare(wm8960->mclk);
-
 			/* Enable anti-pop mode */
 			snd_soc_update_bits(codec, WM8960_APOP1,
 					    WM8960_POBCTRL | WM8960_SOFT_ST |
@@ -1059,6 +1050,8 @@ static int wm8960_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
 	SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
 
 static const struct snd_soc_dai_ops wm8960_dai_ops = {
+	.startup = wm8960_startup,
+	.shutdown = wm8960_shutdown,
 	.hw_params = wm8960_hw_params,
 	.digital_mute = wm8960_mute,
 	.set_fmt = wm8960_set_dai_fmt,
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | Next | Find similar | Unroll thread


Thread

[alsa-devel][PATCH 1/4] ASoC: wm8960: codec mclk should be enabled early to avoid jack detect error Zidan Wang <zidan.wang@freescale.com> - 2015-06-11 13:20 +0200

csiph-web