From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAB5A31ED68 for ; Sat, 22 Aug 2026 12:00:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787400016; cv=none; b=ay2yQximjhXD71nOX0mZOfr+GZLE8q+v2KFZBFheY/S6kduEfiOvm7sCVHJmNWZiJ8YGEMa0Jd0uzcalcOt55PASgd746ucZWclQcAiu6h6ajUOxxSBX5uvrBtka0QNL6Vhg9QNwIgyEp7YiQoNSJ1vaeQiBehH0VVDoW6COB4M= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787400016; c=relaxed/simple; bh=v0z7FSkKa+1+ZT09whtMH08CL4YXfagTonMsf44gyOo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=ZP0Vs0Q4Dlpf04ZqRLLAhq0DjP3b3+HtulUD+Z4yu2pRiVedS2kXhXlickcl1w52snj628NZ9c6P3EzTR4JGlSyJk+KjKbGMO/qakbMANAM6IqmHN8yTYCpoyduHbYBRP77aq0s+NY0qD5pb44sq17Rux8Vl+MD1xYBFh7tQzhs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=pfwg8Znc; arc=none smtp.client-ip=209.85.218.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="pfwg8Znc" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-c2055f5a993so220758066b.2 for ; Sat, 22 Aug 2026 05:00:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787400013; x=1788004813; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:message-id:date :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to :content-type; bh=KvGxsjxJ9mwyqXPBI6LRqXNLhQj/rj1NMh48pIDPvnw=; b=pfwg8Zncy/Qg/j//Xkovx2KSS7SXcR0N9sjmsuIchczBL778mLzkbb9eC5MryUTfuU odbQyTAjeBgOYL3OY46YqZt9aE9LW3QUeXD8eulu96MGRRZDjQCg8NovBwLZW7dN96Ny J0rqo1LmVK0oBBBDo90jU8rZUpXdu1Dt3sWqPTjsaRohzAwcxPzgtnA/QGXI7+glOqj9 hMWp3Lyve6MuIUMoVmbQoPbyId8noY3ObvweyjsXia/wYa5+Bckdhn5HHGl/XsgZQbEE /T3FCrhnu8zHU6zP4Ew5q3XEua2ugUDY4BcFKpmyCw/7qHEPyuiVT2vrM7t4q4A0XKI0 cRHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787400013; x=1788004813; h=content-transfer-encoding:content-type:mime-version:message-id:date :subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=KvGxsjxJ9mwyqXPBI6LRqXNLhQj/rj1NMh48pIDPvnw=; b=IMJePAyCLPYbyOjo0npgOfvpaGSd1rag5lrqG9TD8CDVV+DkcyzMZOwyjPGgmLBxbR bxx9MzHNdehMeVJR9K7kc6Xt/CcnSWLKz053w2eew9qK1pqIc9Uyn60QQd5lSYOflSc+ bC8ibamouFybJveVdpQZvgsq6wrv9nXpwFgNKfpf/4Z8e/YE2weB7SotqdaCK4hN3Lxw SgQgIY5wGQi9cyXp2BwZrFn92jQJAo23qYY+qRY6L/G4cIdamrk3Lc1z5Efo40MFmIMx rO6mEkoeYlqfNvc3UrUzbe++Fz6G6fieWTsSU3hiAw3DhlTobPgFuikmSc1ZO01Us3ha CGkA== X-Forwarded-Encrypted: i=1; AHgh+RpQBDnDCsJ08o0Gu10tD8OrnPIRKqOA1Kbcs34Z5hmj0/ITqvkmyAkFI3WQ9o8wtRfJJYMXFbOnMOHxfAo=@vger.kernel.org X-Gm-Message-State: AFuF++m58XuLKcVInRBzFYbU9vwhkAfLY3b3DcPTeISLPone8BqkQN++ anR2rPaleTOwZ0G4WyKm3wgpah6PfkhU6CMNA2PoBN+BqOeeQV9jH7au X-Gm-Gg: AR+sD136kdiYp7rcu6Sv4U1FH5fkGKdhqgnzb47qRYaIj4ymEGwoqhxWr8oKqEQ9fwz GuWo9Kokh8reZ/NWl1n54cBhjZuxzATcLc7eOig80PN1V2O9ryCiSAeIMDKQ8fIv22Bkkl6gv3/ pnXXNR8NuKxE4gtnMfF8spIPSvZZSe8N3x9Fo4njqTm5tcU9Icg6c8iXhO2samzh1EoMS4m/QUa Erz+Ev+VyIu7+VEh4LFEjqeHTZRI1ZL2BlfBKNT7/ec2p4ZCgUYEFM9jpyHa23IsyIgtQ5mt1rk ALE8aXvTPXtSizXMb5gYBSsd6oSU8MiEj+/LKqOXzVeqmnhzFX12wEXsw1dV+x3tni+q5sT+2cN UhBSWVI+bUvvd5MrhRDorzcgjRVa4XNHewS9uPPcK67v0Hf5+rE4etZzF86rpbZvSSN6k0F0A42 e3w3y9BFX8dRd/C9sj3jF0ossqN/2iuvwi0OsD2KOrRkRYq2wNYaG70AEmNcEfCPI3cAlYkakjM xzSVAC/0zb7hDFSwfSbcMk5NJbrgtyDyzOFIa9AZWz59YYPcf7eHWgHtCZXBFxwunrv60sT6QuS VHdH5x5vkF03Xgg7C6j++8zMOTCYEvRwl2dLk3IylHCIz1AlW/kp4JxP01yPb9etrwB4lPgjI8s hPgJ5j+5rAiNtkePY X-Received: by 2002:a17:906:2481:b0:c1c:2007:298e with SMTP id a640c23a62f3a-c246b4c5e33mr1111437566b.24.1787400012648; Sat, 22 Aug 2026 05:00:12 -0700 (PDT) Received: from workstation ([85.186.165.159]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c2496296cafsm298776866b.14.2026.08.22.05.00.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Aug 2026 05:00:12 -0700 (PDT) From: =?UTF-8?q?=C8=98tefan=20Ghe=C8=9Bu?= To: Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen , Mark Brown Cc: Liam Girdwood , Jaroslav Kysela , Takashi Iwai , linux-sound@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, =?UTF-8?q?=C8=98tefan=20Ghe=C8=9Bu?= Subject: [PATCH] ASoC: fsl_micfil: balance mclk enable/disable Date: Sat, 22 Aug 2026 14:59:59 +0300 Message-ID: <20260822115959.74496-1-stefanghetu9@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hw_params() enables mclk unconditionally and hw_free() disables it unconditionally, but the PCM core does not guarantee 1:1 pairing: hw_free() can run without hw_params(), and hw_params() can be called multiple times from the SETUP state. This triggers an "already disabled" WARN() in the first case and leaks an enable reference in the second, leaving the clock ungateable. Guard both sides with the existing mclk_flag, as fsl_sai.c does with mclk_streams. Fixes: b47024dc624b ("ASoC: fsl_micfil: Add mclk enable flag") Signed-off-by: Ștefan Ghețu --- sound/soc/fsl/fsl_micfil.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c index 60ac8eabab9da..5d8f0f76ab46f 100644 --- a/sound/soc/fsl/fsl_micfil.c +++ b/sound/soc/fsl/fsl_micfil.c @@ -953,12 +953,17 @@ static int fsl_micfil_reparent_rootclk(struct fsl_micfil *micfil, unsigned int s /* Get root clock */ clk = micfil->mclk; - /* Disable clock first, for it was enabled by pm_runtime */ + /* Reparent root clock to the PLL matching this sample rate */ fsl_asoc_reparent_pll_clocks(dev, clk, micfil->pll8k_clk, micfil->pll11k_clk, ratio); - ret = clk_prepare_enable(clk); - if (ret) - return ret; + + /* Enable only once; hw_params can be called multiple times */ + if (!micfil->mclk_flag) { + ret = clk_prepare_enable(clk); + if (ret) + return ret; + micfil->mclk_flag = true; + } return 0; } @@ -991,8 +996,6 @@ static int fsl_micfil_hw_params(struct snd_pcm_substream *substream, if (ret) return ret; - micfil->mclk_flag = true; - /* floor(K * CLKDIV) */ switch (micfil->quality) { case QUALITY_HIGH: @@ -1068,8 +1071,10 @@ static int fsl_micfil_hw_free(struct snd_pcm_substream *substream, { struct fsl_micfil *micfil = snd_soc_dai_get_drvdata(dai); - clk_disable_unprepare(micfil->mclk); - micfil->mclk_flag = false; + if (micfil->mclk_flag) { + clk_disable_unprepare(micfil->mclk); + micfil->mclk_flag = false; + } return 0; } -- 2.53.0