From nobody Sun May 24 18:41:06 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DF5A2395AE6 for ; Fri, 22 May 2026 13:05:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779455107; cv=none; b=L78fRgd5wnzg99hDRKJa6V67Uxx8EevboJnbO/dvuLdvtb1dGba4bep9ERsFScac1P5rHxvyKy1JcoUTA6rzv9F3vXjn7x9PdETtBxE5ezMQ/CtCdnX0zHzG6W3oWJSiHYwXRewhjFXTOamNStLZrLcdXw2M1HBVqqYo12U4LeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779455107; c=relaxed/simple; bh=VeD4JQfS/1AoAw4aOWpjL1lrzeX2Zyzw2YCrKQxz4+o=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=EV/m1vXTsdBO9a+K09//0qmHxdPL0vZWGVP2dtyoeohzOrmgjbOV2/UGEZtEtWBlJjHOSkMOaBizjxDwzIrjrqXNFS6uMzfhVj6sP8QPrQeEjuJXXQreCvqasfOWqwokCv6IHEUdIJES7qIU9zZOaH45iCfvipNnHvK9yMjIbho= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=NZXYQplg; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=T0LR/Ty3; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="NZXYQplg"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="T0LR/Ty3" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64MC1u0I779268 for ; Fri, 22 May 2026 13:05:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=rxPfhw2flID raVtqe9z97WATbtzk1olxuMwrasx75fQ=; b=NZXYQplg7RPN+KI9XOfskGfMRBh xde3dpqk7wfAiAc/wln0MgJMo/noZJaoPOguCRLjg1rL0NLD87Xyw1N/gSA5t7w2 PFyK49xEQ6XqHhftBv0K3T1BEJqtR+EIJnuHbOVtgwZ+o7g5pm6mvYNc184m/dnj q+MtozIPqemAhU5/LfPnZAbEaofRKo1L94EZtOZGWeZ6j3WWxcgVPeca4wO1JfjS X/Bs4YvbLf61F3alLrydRxYRbsO86JSc35zKL1eZji60PZWtvL8Ab9GIAFn6TXOT Ik8ZiXEZr8NNA7bmkcDqcvQR8lK4ag+H90qlWqwHdh5kz/3NfAMTIPeEpTQ== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eac7atth3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 22 May 2026 13:05:04 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-3692f395339so7385257a91.1 for ; Fri, 22 May 2026 06:05:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779455104; x=1780059904; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rxPfhw2flIDraVtqe9z97WATbtzk1olxuMwrasx75fQ=; b=T0LR/Ty3j6N3mxEIjG9oRVZdmte7O3qGusDkg/QSJhzpYVh26R9gUlk3E48Skxqx7w RCQoQVtSPE5wpyF4eLQbqgvIQtm8HjGqgRWKXmjdpKI23yf44u4rvxkBb1W0oN/oyz06 TaijCJXZjI3qCxyWcf0EOIQOAjixRlD6xlMfULGgUZQ9CKjVXGgMWgoNC6QnYfjM0cDg m2DNi7JkbuxtDq5FLAQs9OfKyrwp2RV0GAWArRQm3NeC6KbEorWNu1OB6Cjp0Jb4WrTm Es9nPDZeDUNvmekT9ML6DFTCtP2b+pYbM/6SCkR12RHmXWUdeWBk1nVtVXKONe7jMUpm E21g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779455104; x=1780059904; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=rxPfhw2flIDraVtqe9z97WATbtzk1olxuMwrasx75fQ=; b=ApwS8lcrcBOfvbx/drUl26UvDllQeaZpYUqG08ebXcepFMGHWjA8t8+WbLtT9z3hCV i/H7Obz9VpYStINlJkXM98LuSzZKojF/DqRjlaNU0o5K25LriOyMkoaPNfVq7RfLODDv Pk6RuxnFMTf481wzoRHlGFrdo0iO+7UcQpRnwSGUrtbAAkFPRYVcStfmktGATOW31Tkk SPf3C+oNT4TNtw1EJMI5CLbGmQ5AAJROQ+YfEaK8GXWUCbrEWpdneHQrcHacQSNLGguP rtsaOb4j+KZzGCSYazhdXLkYiWEros2oxy2p/Xj4aGnydvesSjcHfYx0PB6elwgWEHlX zUjg== X-Forwarded-Encrypted: i=1; AFNElJ9uidQARZCcoCZ/IjulY3YuqSoXutkOApKsj1lqf9vErEALguiUZJUNVw4X5pZRheVdw1+8pgLNuotkZpM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0/zEgyhzyeuUa/2MDltMt80Ufr/4L+FNkDmKmNfeZn3200D8Q DQrOiW+fXjXC4XmwzxTFR5V0Rtm9TCupqJMwQiX29rAM3pUdM5RkkGPslgUaqok/8TnsN/8aGNc vFZ/fBlQSIPW+nU4e2eQj7xQCigCjYpAfysLxCfzi9Cd1+u60aa7y+OUKahaUAynqZXY= X-Gm-Gg: Acq92OGdQGGSV8ZKxx7TbBUeusPSAMKhMYWgn3hdLD1kjTqbUhNPz785Be7xvofBHDI gp1HaXfcgUEdA3VFdn6sTlqduwVlKWAx/JuPeqqxVVM/uRmTbtJeytz8ZMZrYHqptZQ/PI8HnIe 2Q1d4wGRzhf1v6Tpo9iy8WYI9I4wUblOKR3pPNDjL6B0AYsiiF/ursEK22UczATGgWebtZhwVsL STXM1Ix4z9aFZiAGYq15VGC89DNpLzQdpPR+E9xKmiLMwbKs7o9F3WkMqnhHI3J51xVR75VNoVF xUZdUa8Qzlq4+mAOSY96jiU3KhsiCfcmxVX5mo5xk4Q7b3sCNf3q8LlYnT9cRXZjQt9Y+005F+E R/aCETAasL2L158HgHfz9hfhS/zoBPtXCtXs25loRunxVuQKQ2w== X-Received: by 2002:a17:90b:5845:b0:36a:5d1f:7c1 with SMTP id 98e67ed59e1d1-36a6741d7bamr3650645a91.3.1779455103689; Fri, 22 May 2026 06:05:03 -0700 (PDT) X-Received: by 2002:a17:90b:5845:b0:36a:5d1f:7c1 with SMTP id 98e67ed59e1d1-36a6741d7bamr3650591a91.3.1779455103182; Fri, 22 May 2026 06:05:03 -0700 (PDT) Received: from hu-nandam-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a72c98b95sm2069980a91.16.2026.05.22.06.04.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 06:05:02 -0700 (PDT) From: Ajay Kumar Nandam To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Srinivas Kandagatla Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mohammad.rafi.shaik@oss.qualcomm.com, ajay.nandam@oss.qualcomm.com Subject: [PATCH v5 1/3] ASoC: codecs: lpass-wsa-macro: Switch to PM clock framework for runtime PM Date: Fri, 22 May 2026 18:34:40 +0530 Message-Id: <20260522130459.3411038-1-ajay.nandam@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260522073324.e18bb240b6f6@oss.qualcomm.com> References: <20260522073324.e18bb240b6f6@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: aHEhq9A-fp6reeitJbeh5kJwS9TSqBCa X-Authority-Analysis: v=2.4 cv=JrbBas4C c=1 sm=1 tr=0 ts=6a105480 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=pVYhVJ8p5r2umpfo35QA:9 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-GUID: aHEhq9A-fp6reeitJbeh5kJwS9TSqBCa X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIyMDEzMCBTYWx0ZWRfX+Rcbxm3EI9Yo 73n4I2oTrntIv74f71O/pR16KhE2WAhb761iAe4wqg6QoBPrXe+efS+BeOiiNxBHgFGBJzObku6 qIJs9/qAHKuyWEB3fSgaU8/LnmrHH8TuGiwdGMCCSLe5F84CVHKw57J6YVlojg+u09qtAgx0Xwd 5e25ILn8E/u7jmyeayIlDcVu7uSO9jq9nAPvNLksyeZrIB7t47WMkjydly7IQgecLwAbIX4fkoC ToDg45Aoppn5iOdD4+4maqG2S5oCg+7jra2Eyk8tPnqneqh1I/ab8HAUjSwLc917SeIHITMeS84 JTtuOp9VIY7yBElHq9mrs27zhkiHhoL2AjjPbrnAmyE3Re3W6POsdJbiv7Y/fIvC+s9lVmY5nT8 WKOEHgnN/jSAmF3Sv92tEaD61iH3ySD2VHMUEbPftLE3uyD3pzMr/DX7ynNjLhfmC5CmgIWKOTp zu3lgKisRTLd6dEO09g== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-22_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 suspectscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 spamscore=0 malwarescore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605220130 Content-Type: text/plain; charset="utf-8" Convert the LPASS WSA macro codec driver to use the PM clock framework for runtime power management. The driver now relies on pm_clk helpers and runtime PM instead of manually enabling and disabling macro, dcodec, mclk, npl, and fsgen clocks. Runtime suspend and resume handling is delegated to the PM core via pm_clk_suspend() and pm_clk_resume(), while existing runtime PM callbacks continue to manage regcache state. This ensures clocks are enabled only when the WSA macro is active, improves power efficiency on LPASS platforms supporting LPI/island modes, and aligns the driver with common ASoC runtime PM patterns used across Qualcomm LPASS codec drivers. Keep the SWR gate runtime-PM reference from SWR clock enable until disable so autosuspend does not gate clocks while SWR is prepared. Add a PM dependency for SND_SOC_LPASS_WSA_MACRO so PM clock helpers are available when this driver is built. Suggested-by: Mark Brown Signed-off-by: Ajay Kumar Nandam --- sound/soc/codecs/Kconfig | 1 + sound/soc/codecs/lpass-wsa-macro.c | 119 ++++++++++++------------------ 2 files changed, 47 insertions(+), 73 deletions(-) diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 6f587e39223b..4e17119f2f9e 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -2861,7 +2861,8 @@ config SND_SOC_LPASS_MACRO_COMMON =20 config SND_SOC_LPASS_WSA_MACRO depends on COMMON_CLK + depends on PM select REGMAP_MMIO select SND_SOC_LPASS_MACRO_COMMON tristate "Qualcomm WSA Macro in LPASS(Low Power Audio SubSystem)" diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-ws= a-macro.c index 5ad0448af649..598292fe3219 100644 --- a/sound/soc/codecs/lpass-wsa-macro.c +++ b/sound/soc/codecs/lpass-wsa-macro.c @@ -14,6 +14,7 @@ #include #include #include +#include #include =20 #include "lpass-macro-common.h" @@ -2529,15 +2530,13 @@ static const struct snd_soc_dapm_route wsa_audio_ma= p[] =3D { static int wsa_swrm_clock(struct wsa_macro *wsa, bool enable) { struct regmap *regmap =3D wsa->regmap; + int ret; =20 if (enable) { - int ret; - - ret =3D clk_prepare_enable(wsa->mclk); - if (ret) { - dev_err(wsa->dev, "failed to enable mclk\n"); + ret =3D pm_runtime_resume_and_get(wsa->dev); + if (ret < 0) return ret; - } + wsa_macro_mclk_enable(wsa, true); =20 regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, @@ -2548,7 +2547,10 @@ static int wsa_swrm_clock(struct wsa_macro *wsa, boo= l enable) regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, CDC_WSA_SWR_CLK_EN_MASK, 0); wsa_macro_mclk_enable(wsa, false); - clk_disable_unprepare(wsa->mclk); + + ret =3D pm_runtime_put_autosuspend(wsa->dev); + if (ret < 0) + dev_warn(wsa->dev, "runtime PM put failed: %d\n", ret); } =20 return 0; @@ -2774,25 +2776,23 @@ static int wsa_macro_probe(struct platform_device *= pdev) clk_set_rate(wsa->mclk, WSA_MACRO_MCLK_FREQ); clk_set_rate(wsa->npl, WSA_MACRO_MCLK_FREQ); =20 - ret =3D clk_prepare_enable(wsa->macro); - if (ret) - goto err; - - ret =3D clk_prepare_enable(wsa->dcodec); + ret =3D devm_pm_clk_create(dev); if (ret) - goto err_dcodec; + return ret; =20 - ret =3D clk_prepare_enable(wsa->mclk); - if (ret) - goto err_mclk; + ret =3D of_pm_clk_add_clks(dev); + if (ret < 0) + return ret; =20 - ret =3D clk_prepare_enable(wsa->npl); + pm_runtime_set_autosuspend_delay(dev, 100); + pm_runtime_use_autosuspend(dev); + ret =3D devm_pm_runtime_enable(dev); if (ret) - goto err_npl; + return ret; =20 - ret =3D clk_prepare_enable(wsa->fsgen); - if (ret) - goto err_fsgen; + ret =3D pm_runtime_resume_and_get(dev); + if (ret < 0) + return ret; =20 /* reset swr ip */ regmap_update_bits(wsa->regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, @@ -2809,56 +2809,41 @@ static int wsa_macro_probe(struct platform_device *= pdev) wsa_macro_dai, ARRAY_SIZE(wsa_macro_dai)); if (ret) - goto err_clkout; - - pm_runtime_set_autosuspend_delay(dev, 3000); - pm_runtime_use_autosuspend(dev); - pm_runtime_mark_last_busy(dev); - pm_runtime_set_active(dev); - pm_runtime_enable(dev); + goto err_rpm_put; =20 ret =3D wsa_macro_register_mclk_output(wsa); if (ret) - goto err_clkout; + goto err_rpm_put; =20 - return 0; + ret =3D pm_runtime_put_autosuspend(dev); + if (ret < 0) + dev_warn(dev, "runtime PM put failed after probe: %d\n", ret); =20 -err_clkout: - clk_disable_unprepare(wsa->fsgen); -err_fsgen: - clk_disable_unprepare(wsa->npl); -err_npl: - clk_disable_unprepare(wsa->mclk); -err_mclk: - clk_disable_unprepare(wsa->dcodec); -err_dcodec: - clk_disable_unprepare(wsa->macro); -err: + return 0; +err_rpm_put: + if (pm_runtime_put_sync_suspend(dev) < 0) + dev_warn(dev, "runtime PM sync suspend failed in probe unwind\n"); return ret; - } =20 static void wsa_macro_remove(struct platform_device *pdev) { - struct wsa_macro *wsa =3D dev_get_drvdata(&pdev->dev); - - clk_disable_unprepare(wsa->macro); - clk_disable_unprepare(wsa->dcodec); - clk_disable_unprepare(wsa->mclk); - clk_disable_unprepare(wsa->npl); - clk_disable_unprepare(wsa->fsgen); } =20 static int wsa_macro_runtime_suspend(struct device *dev) { struct wsa_macro *wsa =3D dev_get_drvdata(dev); + int ret; =20 regcache_cache_only(wsa->regmap, true); - regcache_mark_dirty(wsa->regmap); =20 - clk_disable_unprepare(wsa->fsgen); - clk_disable_unprepare(wsa->npl); - clk_disable_unprepare(wsa->mclk); + ret =3D pm_clk_suspend(dev); + if (ret) { + regcache_cache_only(wsa->regmap, false); + return ret; + } + + regcache_mark_dirty(wsa->regmap); =20 return 0; } @@ -2868,35 +2853,27 @@ static int wsa_macro_runtime_resume(struct device *= dev) struct wsa_macro *wsa =3D dev_get_drvdata(dev); - int ret; + int ret, sret; =20 - ret =3D clk_prepare_enable(wsa->mclk); + ret =3D pm_clk_resume(dev); if (ret) { - dev_err(dev, "unable to prepare mclk\n"); + regcache_cache_only(wsa->regmap, true); + regcache_mark_dirty(wsa->regmap); return ret; } + regcache_cache_only(wsa->regmap, false); =20 - ret =3D clk_prepare_enable(wsa->npl); - if (ret) { - dev_err(dev, "unable to prepare mclkx2\n"); - goto err_npl; - } - - ret =3D clk_prepare_enable(wsa->fsgen); + ret =3D regcache_sync(wsa->regmap); if (ret) { - dev_err(dev, "unable to prepare fsgen\n"); - goto err_fsgen; + regcache_cache_only(wsa->regmap, true); + regcache_mark_dirty(wsa->regmap); + sret =3D pm_clk_suspend(dev); + if (sret) + dev_err(dev, + "failed to suspend clocks after regcache sync failure: %d\n", + sret); + return ret; } =20 - regcache_cache_only(wsa->regmap, false); - regcache_sync(wsa->regmap); - return 0; -err_fsgen: - clk_disable_unprepare(wsa->npl); -err_npl: - clk_disable_unprepare(wsa->mclk); - - return ret; } =20 static const struct dev_pm_ops wsa_macro_pm_ops =3D { --=20 2.34.1 From nobody Sun May 24 18:41:06 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD8AC399D0C for ; Fri, 22 May 2026 13:05:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779455111; cv=none; b=DPfRg3rlfc2Tv7RTHpcKQch/U1BAqYldCeGrpm5/gw4RcLM6M941dmd62RR2XlwewCa+Ea5RpgsK6mFEcfnBvu0YAr7Utodwh27JashVjCbumZsk9fUptWEhs18OMxUGUfVg+pU1/5Y/tonwrrNTuwAYmkrVjkL60SpzuTeziac= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779455111; c=relaxed/simple; bh=sg+2Dka9Tii5QpZ1rgOk7V9jpFe641VpWCk5BfK8u0Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=St9O0LFLUUsLmkkMk+pbAhZQw/pfJMR28WvTCkK2/touMjmFZH7gCberhgCggmUEaMI2CvW35WT9SEBsROiV3yXP7o5hy1Sns7VyAHjPYhBsoh6id0Bq/8uDMq4Tu+N1ao1YT9nV2OKKR0HImL7U8NGnjpMpYNU5tHeXiYxMKis= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=ZSwzn/8l; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ieuNoUkN; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="ZSwzn/8l"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ieuNoUkN" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64MA1n2l312832 for ; Fri, 22 May 2026 13:05:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=PM8JHMudD5X llfnNJ93l4boA9kEYi/3g+ZR7vBgyK2U=; b=ZSwzn/8lZciJCV0A1Wn1Wg8OALZ boMRunWcBu9Sor7+Dp/ltzht19NGOaziE6O2RwHr47aT+oLzYlovj6SV5UB6Ya4C 44r246NNb6mDy9YK2rseiR4h/zGbX3S+tDrHAZ6mBJORhprj+UYLz+wwSXGLAYnq mWwpVjmcjGpcYEou3Yst7s4daMNaUS8+qR6wPU60flHsVnZq6eL0ySlkXQG3agub H2YsSD8CsUuKleCJo2zhtH++q8otukfQlDhp9ClnXCUTujYYHxw8bIfZqKSCiA/k cZJA/WwQLQAzBnkXH9IwdiwlvKExO0ZxTuZrfPMzOlZfEYORMXGSBiM2DbQ== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ea8833vwf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 22 May 2026 13:05:08 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-36865d109dcso6801970a91.1 for ; Fri, 22 May 2026 06:05:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779455108; x=1780059908; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PM8JHMudD5XllfnNJ93l4boA9kEYi/3g+ZR7vBgyK2U=; b=ieuNoUkN0D7htTNMLKMvYVRYAD2upUisRcBUZa6Koydx0Hd8xp/LjvDbWfCiOrNOTi hMda6FhVHpAZ1w6YU6t7ambgScApYcNibrd7t7nHY9oybi1/Gt8jw0SVLJAv7JpLayGj 2CPXDojfta3j0EyHMPbWaneKUAZvhaDD6ovnc17zNKw10VwGfEU+mAkRHXR9VmV0OtX0 Tx7u61YQTKXkKUqoG+cPAG4AtTPdrMmnBB0iA4L5lU+8wzXpdVOnxKcfy0Sd+kJbNXhp LWcW3qkOErlKnkrFuWVFu9xIwWUS87240+pWElLFTGHK8ebcwPuSICpIhdXxLvaShv2X 9Uhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779455108; x=1780059908; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=PM8JHMudD5XllfnNJ93l4boA9kEYi/3g+ZR7vBgyK2U=; b=b5LzZBJ6PM1Fim5rb+QhvmYN4JxtPJopshX9qF7YvPrizkT29oyHaynxVx+9Lksv16 t/7sYiUt6vsan/WOTQylM4m6BI4/6Dr04JuXkN9EY04F2I3wRDBu4JzyzdgKZYH74jZc yAzNAgt1YjaNwusFrZQLFqYQBNF7TeG0976WXjJoKDIPsdjm/vQBYuuKOzYQcttV+APR A3SDRVbFGxNYNaUsUoWBCLmeaDlkxGKkxYum6/rYLv3RC9W8EJa0bvRsPmztiClSZ6TQ lLPSm6IRfJF5hGKg5Nf6dZHczhP+tL7A8enVMDM/1tuO5bl2qRgLO7x4G1ceQTictp6g wnEw== X-Forwarded-Encrypted: i=1; AFNElJ8YaeujepzRvGOjl+JbOyD3blAwxjMgbtyDUpQXn4yuZuw9chJKGKtgBK46TRtM0l7KJlMk6ioQk3tJxfI=@vger.kernel.org X-Gm-Message-State: AOJu0YzOFMr04v4868R9KC1EKTOB02q5Q35c7aNVBkUumtN6KH+JeN1O qrdILj6YNICFqWoy8Nw2ukXS33AgMLnZOxDJX/R27qhjaGOoLBGIynpm9NPDkfREFCv99jA35SV 9h5IyLoW3F05xnO9SAaVmpuKW+NDzV4/5QKRZo8ZR3wrHImZxSJvYU6szpD+0T0jW6Sk= X-Gm-Gg: Acq92OH6ENWz+HAgD/KRDCWxpw+Xw/BIy0+6c4jGdS03IHSeVckn9NQeOh5x5SeWrZN AjnYWsttGQepmuAGqy1UxYrlSmqcNOg2x3H2BLX/rybKixS3UTjCfb2zDFq7z+C3qFpQqaGZVlH uPveA/Im1eMDAkscjFenO80RMlz1Tl73It5aMJOjD9+ZDppKXEg0k21V5DURkzEwAmFspJwe8u5 O4BTVGESUpZGEruTUBv5WwFkQ6paEEauMu/WEouETMFpEN/VUm5iRFEGI/Mc848rcWm9mwEx8b9 ttTSSqJDJdAgUpWQNxOW1h65asn2KZXCBTTBpVa19CHHCwECO4TMHslxV5PSRHG0n7GcyPnV/do FjsVvcjNX5C7eKzIoNoTGnXR7QRV0+oNELLn2vjlYb/I3kKkPEg== X-Received: by 2002:a17:90b:4e84:b0:368:a297:bd3d with SMTP id 98e67ed59e1d1-36a676f0614mr3778444a91.3.1779455107521; Fri, 22 May 2026 06:05:07 -0700 (PDT) X-Received: by 2002:a17:90b:4e84:b0:368:a297:bd3d with SMTP id 98e67ed59e1d1-36a676f0614mr3778372a91.3.1779455106974; Fri, 22 May 2026 06:05:06 -0700 (PDT) Received: from hu-nandam-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a72c98b95sm2069980a91.16.2026.05.22.06.05.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 06:05:06 -0700 (PDT) From: Ajay Kumar Nandam To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Srinivas Kandagatla Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mohammad.rafi.shaik@oss.qualcomm.com, ajay.nandam@oss.qualcomm.com Subject: [PATCH v5 2/3] ASoC: codecs: lpass-va-macro: Switch to PM clock framework for runtime PM Date: Fri, 22 May 2026 18:34:41 +0530 Message-Id: <20260522130459.3411038-2-ajay.nandam@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260522073324.e18bb240b6f6@oss.qualcomm.com> References: <20260522073324.e18bb240b6f6@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIyMDEzMCBTYWx0ZWRfXyqdS/LryzWVa o/MTGfp2VFAkFcxS0hWcdv1Jt/bnVigHwmWj5v5X3WTC2uJSjH7FsbIaNdLECL0D+2/MA0k0B7B juLOEXXBpdvzSxpnJf7lwkKqDAgc+3vt7dscM+H+fZcqMlLKpDc3tz/6ER0OzCQ+V9dVHkitO79 bPl8MDw6WNFzX7yxOH6BzKqS8d/0cZTumj2M9vg3rl/1iyn6DsawLZ2pR+/aWDzSEChgTedsWD2 DkKymLNYE5xRAcmlzc+1De1nj5c1Nph1MCPaRguU/2HKL53t/YAQ1gjzcuavYktfhnwfvvV8Hda T8yjNRUKHB5PzXiyVOpJAh7jTtzhxg0ZrfErg7wrDK+aUSLVfAjtSSQbbp1O4nerX1cgjUQ60Tf Jd3dpHJb6xxk5BBpQQoWl6bj5MW1tbv90pBHpM8Do8xmip61AdY5IOvJAUJlxRxQ6OlB7UplVYD c1k9wBTx7LBIkbwPQVw== X-Proofpoint-GUID: TBSDfLz44JJgToF1JCmO8kInUnoLpVcq X-Proofpoint-ORIG-GUID: TBSDfLz44JJgToF1JCmO8kInUnoLpVcq X-Authority-Analysis: v=2.4 cv=LsSiDHdc c=1 sm=1 tr=0 ts=6a105484 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=KdAuDO48zGbrRqqoz3UA:9 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-22_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 suspectscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 spamscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605220130 Content-Type: text/plain; charset="utf-8" Convert the LPASS VA macro codec driver to use the PM clock framework for runtime power management. The driver now relies on pm_clk helpers and runtime PM instead of manually enabling and disabling macro, dcodec, mclk, and npl clocks. All clock control during runtime suspend and resume is delegated to the PM core via pm_clk_suspend() and pm_clk_resume(). This change ensures clocks are only enabled when the VA macro is active, improves power efficiency on LPASS platforms supporting LPI/island modes, and aligns the driver with common ASoC runtime PM patterns used across Qualcomm LPASS codec drivers. Take a runtime-PM reference in fsgen_gate_enable() for all VA variants, including non-SWR-master configurations, and release it in fsgen_gate_disable() so PM-clock-managed clocks stay active while fsgen is enabled. Add a PM dependency for SND_SOC_LPASS_VA_MACRO so PM clock helpers are available when this driver is built. Signed-off-by: Ajay Kumar Nandam --- sound/soc/codecs/Kconfig | 1 + sound/soc/codecs/lpass-va-macro.c | 133 +++++++++++++++++---------------- 2 files changed, 71 insertions(+), 63 deletions(-) diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 4e17119f2f9e..e73667b87fd8 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -2867,7 +2867,8 @@ config SND_SOC_LPASS_WSA_MACRO =20 config SND_SOC_LPASS_VA_MACRO depends on COMMON_CLK + depends on PM select REGMAP_MMIO select SND_SOC_LPASS_MACRO_COMMON tristate "Qualcomm VA Macro in LPASS(Low Power Audio SubSystem)" diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-= macro.c index 528d5b167ecf..64a06d9ed6c8 100644 --- a/sound/soc/codecs/lpass-va-macro.c +++ b/sound/soc/codecs/lpass-va-macro.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -1348,32 +1349,56 @@ static int fsgen_gate_enable(struct clk_hw *hw) struct regmap *regmap =3D va->regmap; int ret, rpm_ret; =20 - if (va->has_swr_master) { - ret =3D clk_prepare_enable(va->mclk); - if (ret) - return ret; - } + ret =3D pm_runtime_resume_and_get(va->dev); + if (ret < 0) + return ret; =20 ret =3D va_macro_mclk_enable(va, true); + if (ret) { + rpm_ret =3D pm_runtime_put_autosuspend(va->dev); + if (rpm_ret < 0) + dev_warn(va->dev, + "runtime PM put failed in fsgen enable unwind: %d\n", + rpm_ret); + return ret; + } if (va->has_swr_master) regmap_update_bits(regmap, CDC_VA_CLK_RST_CTRL_SWR_CONTROL, CDC_VA_SWR_CLK_EN_MASK, CDC_VA_SWR_CLK_ENABLE); =20 - return ret; + return 0; } =20 static void fsgen_gate_disable(struct clk_hw *hw) { struct va_macro *va =3D to_va_macro(hw); struct regmap *regmap =3D va->regmap; + int ret; =20 if (va->has_swr_master) regmap_update_bits(regmap, CDC_VA_CLK_RST_CTRL_SWR_CONTROL, CDC_VA_SWR_CLK_EN_MASK, 0x0); =20 va_macro_mclk_enable(va, false); - if (va->has_swr_master) - clk_disable_unprepare(va->mclk); + + ret =3D pm_runtime_put_autosuspend(va->dev); + if (ret < 0) + dev_warn(va->dev, "runtime PM put failed in fsgen disable: %d\n", ret); +} + +static int va_macro_setup_pm_clocks(struct device *dev) +{ + int ret; + + ret =3D devm_pm_clk_create(dev); + if (ret) + return ret; + + ret =3D of_pm_clk_add_clks(dev); + if (ret < 0) + return ret; + + return 0; } =20 static int fsgen_gate_is_enabled(struct clk_hw *hw) @@ -1534,6 +1559,7 @@ static int va_macro_probe(struct platform_device *pde= v) void __iomem *base; u32 sample_rate =3D 0; int ret; + int rpm_ret; =20 va =3D devm_kzalloc(dev, sizeof(*va), GFP_KERNEL); if (!va) @@ -1601,22 +1627,20 @@ static int va_macro_probe(struct platform_device *p= dev) clk_set_rate(va->npl, 2 * VA_MACRO_MCLK_FREQ); } =20 - ret =3D clk_prepare_enable(va->macro); + ret =3D va_macro_setup_pm_clocks(dev); if (ret) goto err; =20 - ret =3D clk_prepare_enable(va->dcodec); - if (ret) - goto err_dcodec; - - ret =3D clk_prepare_enable(va->mclk); + pm_runtime_set_autosuspend_delay(dev, 100); + pm_runtime_use_autosuspend(dev); + ret =3D devm_pm_runtime_enable(dev); if (ret) - goto err_mclk; + goto err; =20 - if (va->has_npl_clk) { - ret =3D clk_prepare_enable(va->npl); - if (ret) - goto err_npl; + rpm_ret =3D pm_runtime_resume_and_get(dev); + if (rpm_ret < 0) { + ret =3D rpm_ret; + goto err; } =20 /** @@ -1629,7 +1653,7 @@ static int va_macro_probe(struct platform_device *pde= v) /* read version from register */ ret =3D va_macro_set_lpass_codec_version(va); if (ret) - goto err_clkout; + goto err_rpm_put; } =20 if (va->has_swr_master) { @@ -1659,35 +1683,28 @@ static int va_macro_probe(struct platform_device *p= dev) va_macro_dais, ARRAY_SIZE(va_macro_dais)); if (ret) - goto err_clkout; - - pm_runtime_set_autosuspend_delay(dev, 3000); - pm_runtime_use_autosuspend(dev); - pm_runtime_mark_last_busy(dev); - pm_runtime_set_active(dev); - pm_runtime_enable(dev); + goto err_rpm_put; =20 ret =3D va_macro_register_fsgen_output(va); if (ret) - goto err_clkout; + goto err_rpm_put; =20 va->fsgen =3D devm_clk_hw_get_clk(dev, &va->hw, "fsgen"); if (IS_ERR(va->fsgen)) { ret =3D PTR_ERR(va->fsgen); - goto err_clkout; + goto err_rpm_put; } =20 + rpm_ret =3D pm_runtime_put_autosuspend(dev); + if (rpm_ret < 0) + dev_warn(dev, "runtime PM put failed after probe: %d\n", rpm_ret); + return 0; =20 -err_clkout: - if (va->has_npl_clk) - clk_disable_unprepare(va->npl); -err_npl: - clk_disable_unprepare(va->mclk); -err_mclk: - clk_disable_unprepare(va->dcodec); -err_dcodec: - clk_disable_unprepare(va->macro); +err_rpm_put: + rpm_ret =3D pm_runtime_put_sync_suspend(dev); + if (rpm_ret < 0) + dev_warn(dev, "runtime PM sync suspend failed in probe unwind: %d\n", rp= m_ret); err: lpass_macro_pds_exit(va->pds); =20 @@ -1698,27 +1715,23 @@ static void va_macro_remove(struct platform_device = *pdev) { struct va_macro *va =3D dev_get_drvdata(&pdev->dev); =20 - if (va->has_npl_clk) - clk_disable_unprepare(va->npl); - - clk_disable_unprepare(va->mclk); - clk_disable_unprepare(va->dcodec); - clk_disable_unprepare(va->macro); - lpass_macro_pds_exit(va->pds); } =20 static int va_macro_runtime_suspend(struct device *dev) { struct va_macro *va =3D dev_get_drvdata(dev); + int ret; =20 regcache_cache_only(va->regmap, true); - regcache_mark_dirty(va->regmap); =20 - if (va->has_npl_clk) - clk_disable_unprepare(va->npl); + ret =3D pm_clk_suspend(dev); + if (ret) { + regcache_cache_only(va->regmap, false); + return ret; + } =20 - clk_disable_unprepare(va->mclk); + regcache_mark_dirty(va->regmap); =20 return 0; } @@ -1728,24 +1741,26 @@ static int va_macro_runtime_resume(struct device *d= ev) struct va_macro *va =3D dev_get_drvdata(dev); - int ret; + int ret, sret; =20 - ret =3D clk_prepare_enable(va->mclk); - if (ret) { - dev_err(va->dev, "unable to prepare mclk\n"); + ret =3D pm_clk_resume(dev); + if (ret) { + regcache_cache_only(va->regmap, true); + regcache_mark_dirty(va->regmap); return ret; - } + } - - if (va->has_npl_clk) { - ret =3D clk_prepare_enable(va->npl); - if (ret) { - clk_disable_unprepare(va->mclk); - dev_err(va->dev, "unable to prepare npl\n"); - return ret; - } - } =20 regcache_cache_only(va->regmap, false); - regcache_sync(va->regmap); + + ret =3D regcache_sync(va->regmap); + if (ret) { + regcache_cache_only(va->regmap, true); + regcache_mark_dirty(va->regmap); + sret =3D pm_clk_suspend(dev); + if (sret) + dev_err(va->dev, + "failed to suspend clocks after regcache sync failure: %d\n", + sret); + return ret; + } =20 return 0; } --=20 2.34.1 From nobody Sun May 24 18:41:06 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA73A394781 for ; Fri, 22 May 2026 13:05:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779455114; cv=none; b=qNgsdFWCGL/GnZC6gxrrNJJ2uvfF5FwYji4PtjrSquz782iJ+Rj9frWUINe89NYPTeVJKcLOn9ap8G35AC1Ybtg1DN3NIKaOd/kxQ4rkhueCnKY7Wr4Qb2cxuSHmTc/PdDK1Gkx8inixFR5NMhaj2FEG+ymea1S4WM5GZupQxAg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779455114; c=relaxed/simple; bh=TZ5Gbdy8MpD0BkDYauXmi2P3QUkOwpzPVQi/b1SuMMU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sW57KWrwVzUkW7/J2tWyBEQw1M19/1QRl+AqAgI+1I0ZAiC+LKOWWv7zsVHinnOSfe0trsL3m3RWWxnmngEpDR8r6WlhL6y2uVFo+4NY0Ox9hasTnQTM7laUPUpgfF5j0GupbeYhQORuocG7q+30vkSMi6n5TnGpcCpv7oyJC/k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Nb25CypZ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=JKglJFw4; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Nb25CypZ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="JKglJFw4" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64MA4A4w3947414 for ; Fri, 22 May 2026 13:05:12 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=LU+3o0EUymr NGBvYnnfmtFWJLYjR5wRDEMuCtrEycf4=; b=Nb25CypZwbUqsUc7tdjwjjwNkQ+ bBsaMBdfol9M8d28egxJ8jv0POZtQU9FcD8sj2SvMFm+Mep/m0M5kU44K6pa2vVq JS6K3PyQHd8j8Xxmxns3JMF2+L+VgDpQVnAuRKPqwsjPbJrnjImFbTpCfdrA6u68 sqqxmcsTcoheKnskeV8Ua50qlyMp8AdEdHjpuejMf7Kbiu3sN+jY1tnZZ+/j9JOP AvaTaFUjlbS4KHgqvRJGG0viAGlmDaELLReoKBlo0ZLOOz36dfdZPwMT5SKSM/XY iPjlmbns8f9LvBaPRq2Da+tf48zAO6GnjOykTG1yVcCy5VItzxIlF+mbs2Q== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ean2ngkbm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 22 May 2026 13:05:11 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-366ded5ab5fso14694086a91.0 for ; Fri, 22 May 2026 06:05:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779455111; x=1780059911; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LU+3o0EUymrNGBvYnnfmtFWJLYjR5wRDEMuCtrEycf4=; b=JKglJFw4JJzaq/dM3OjAxPw9Lo5OqwaAC91XanMZ2ItjZKb+3irPF/nSaDTia5uz9Y xFi1/9z1VGv385Amw+cVUn1cNk3qxdqhik+NTZRCRDr0pwRAHKRv4x5Yq4Mw7RpcVB07 hcaEg2ulJUcO/CE86QZ37sxd8PKXOrsgnBZZpgnKseBIJ5tOgxq4WVLBckdoF/Qc5e3O moNOe4UtiWZ5/kteHSkhX/G5jBTkpv75jTRH/UYNGD740vqFae6L6ucIZ+9IfVp5OsXd 2fVeZu2EgukbYEU9dDTPfRjaWfryAFtNh+W7NvkuHRr2kVX2wkxmUpeU+048Vqmlpcv3 ybVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779455111; x=1780059911; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=LU+3o0EUymrNGBvYnnfmtFWJLYjR5wRDEMuCtrEycf4=; b=NqBMMlJYtuM4/BhmFbUF6/WVBK+riMVR2rSElOitbYneHfCsQUgtOZ01nXbhV55xwa s1O3ZAW2maZLqAMZ7knpUaftmjxloyBGXnjw3l9ur3N9XHKvbE6xSlwSvmPHssYVkp4G SiG6K1AebYWlHmBHkyvqECEE53eCv6Hv0JO7xSco4ugcHNQlcAzjhWvo2jzqJpMfyksk lZgJaxHaNkYoJnnzO2r/d7JLIR5TJJ/J/pfyaOIx8TG/EZzqSCX1gV5gt8GIi03zNaSw SXTNIg4nDoQA7N3VIBwdYnC58sxqDJZlNzLQW3zEOxHVXjbzp8RPfyng7sJKKTyp2VmT FIJA== X-Forwarded-Encrypted: i=1; AFNElJ8P2Hu7IHFDUfO2zTZI5NSCMs5IsznuE4B6/yIXiknFjXp1eAVNUHLhuQ5Q67LxmWP9aF82ZaqX4hznGkA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+vea3u3+XggHnBb+vpyboOVdTGop7zcRqTDwd7k5MgqzicNd9 HFUUUW2SLN8KU+ULIlfRWG7DeuUrPukLIOF8UvuDF3eP8+kTFTNcudWtX0cdyFo41jYGpi6ccwH XLKYhkzBnnxNB+iLjU3iy0AyIMdzCmsPe0GFFtWLYvOAzmCh4uKXOyAVoS2dsmpzn2+w= X-Gm-Gg: Acq92OHtYNwgI1sd3T2Frq6OoiBO58K3N8ogE+2Dznqz0hca+lOZgdXArd/RJjFwYI+ mhOEEvMVCmixVFSvWOp9l8+Zgd2lA71Vii6lOeWZzHifGQDQhWZDhRYAbw/Udwba8dtHAFXpGft rsFj4AwcdoiWFvbhOOpx0jgup9/VC3Vvg5Dio7gvUkdhIq1rqu1Dr6dc9gd8W25IF1d8UjcG6D+ sUNfALSR94CdHstmbJVHccm744o+Va8gDpQka+FdVv2bhMTDb0xQ/Sri4ttrKRtPt3E8opsGojF tm4p6Y+I3zeLb6YD67GgFU1UAZx1BMZl7NoB4aNFAua/Z3f0pBsy3Pfa5vAibJV+PpWkgqfS+J/ 01cuy8J4eDaO9d4dfBjUthWKWzf3Y6+gJEB2KnCXqPddfZvxjJQ== X-Received: by 2002:a17:90b:578c:b0:368:b176:c5a8 with SMTP id 98e67ed59e1d1-36a675ff469mr3717469a91.15.1779455111365; Fri, 22 May 2026 06:05:11 -0700 (PDT) X-Received: by 2002:a17:90b:578c:b0:368:b176:c5a8 with SMTP id 98e67ed59e1d1-36a675ff469mr3717425a91.15.1779455110919; Fri, 22 May 2026 06:05:10 -0700 (PDT) Received: from hu-nandam-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a72c98b95sm2069980a91.16.2026.05.22.06.05.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 06:05:10 -0700 (PDT) From: Ajay Kumar Nandam To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Srinivas Kandagatla Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mohammad.rafi.shaik@oss.qualcomm.com, ajay.nandam@oss.qualcomm.com, Konrad Dybcio Subject: [PATCH v5 3/3] ASoC: codecs: lpass-wsa-macro: Use devm_clk_hw_register() for MCLK output Date: Fri, 22 May 2026 18:34:42 +0530 Message-Id: <20260522130459.3411038-3-ajay.nandam@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260522073324.e18bb240b6f6@oss.qualcomm.com> References: <20260522073324.e18bb240b6f6@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=XvDK/1F9 c=1 sm=1 tr=0 ts=6a105488 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=E7064k5JgmqFsk_8azIA:9 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-GUID: QjwxyaG3PnotCwbkyMrsNsjYT7wK78S1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTIyMDEzMCBTYWx0ZWRfX4l203BeOL9cU Shj4GHUu/xOb2H8ROSv9EBXDAKD8cq2E4OONaJJmDV7uVYKTHW76Mszxx2OYCQCL9XQSrZlf9vI Y9aq0n+/VOY2yFcDVyhmHKe7z21tkMxAku6Ue306SkVmSc/CPj2JCbmiK32yF9dcTd2KZMFCSPX yLnQY/gtlbgdW9iXPo3VVr5IwjhjcQT9QhT2wxYAW07/WEDzni8Jb4k/Zggcn+GJoXz02ZB5ndd YJ8QPuFXY5xt49rd5mIh2oPzKg9/qptwwDIahMraMWr1mWb127Y9AlHp+L6Vft8BUhSiJDSpEEQ 95BPtye6AlNApH/JULqykFQJ3Y/jRjF6Rme5OYSUEnBGMiThkqcqh3iDv50XM5jfmd1mMR8JcVi duAAP8QGJVcvS1J0l3B9Nl0n1QpDRxeA/Bk9uzzWHeegnI5tr5dzpXFllDN7sCsTv5Umdl/2EcK Ti9kUzxnaGeSADsyPiA== X-Proofpoint-ORIG-GUID: QjwxyaG3PnotCwbkyMrsNsjYT7wK78S1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-22_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 phishscore=0 spamscore=0 impostorscore=0 adultscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605220130 Content-Type: text/plain; charset="utf-8" The WSA macro driver registers the MCLK output clock using clk_hw_register(), but does not explicitly unregister it in the remove path or on probe failure. Switch to devm_clk_hw_register() to make the registration resource-managed so the clk_hw is automatically unregistered when the device is unbound or probe fails. This fixes the missing unregister cleanup in remove/probe-fail paths and simplifies error handling. Reviewed-by: Konrad Dybcio Signed-off-by: Ajay Kumar Nandam --- sound/soc/codecs/lpass-wsa-macro.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-ws= a-macro.c index 598292fe3219..3081c115d584 100644 --- a/sound/soc/codecs/lpass-wsa-macro.c +++ b/sound/soc/codecs/lpass-wsa-macro.c @@ -2658,7 +2658,7 @@ static int wsa_macro_register_mclk_output(struct wsa_= macro *wsa) init.num_parents =3D 1; wsa->hw.init =3D &init; hw =3D &wsa->hw; - ret =3D clk_hw_register(wsa->dev, hw); + ret =3D devm_clk_hw_register(wsa->dev, hw); if (ret) return ret; =20 --=20 2.34.1