From mboxrd@z Thu Jan 1 00:00:00 1970 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 A3C0D3C3C0F for ; Mon, 13 Apr 2026 12:18:50 +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=1776082732; cv=none; b=Jzjy3SDrK9918cmHMGLhrboISyJauugCX/wQeJpQ7V0VNLoHPFbdXEGIsEkCgW/KME/ujhwbe6+k3IBGJBn/EeGNtIuXImLJ68mi//AICC+otL9f0r1p+3n5F1ho7hN2BzhAFnpXiRC9M9nsnGyRMitP2H4whR4bTS+Tv8wF/8s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776082732; c=relaxed/simple; bh=AfHQFN7pDlYelGn7pGidt7m5AGz7WK9db5mV0zs3nzU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=WSPxnnc2nOZqc14DhI8TTl43sO+J6gz93Vts+3gt0yCTAkoDBCDRBWVQSgzI8E3mfK7+afvcp06uWNLCBHH0sFpLJGqoV2RVipQK4HSklCKSAz1GqhpTt+KGjiWaeqZe5qsbkWsyp/2zZCyX7+muwwoGXxdmuZ791ulA9YdDvnI= 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=Secgk7Dn; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=WsXQzBDa; 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="Secgk7Dn"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="WsXQzBDa" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 63D76x7F1780819 for ; Mon, 13 Apr 2026 12:18:49 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=6AnTcThYSkI vK40nziJKZU5G9UJ5bYtnDXyYQeU7520=; b=Secgk7Dno1JE6HqpokJWKzR+xmu m4r4nYNTQqOPANXi6mIdXCaJ1T/FAN0ExUt1P/eoZXE/gBoHtpveAPAIS24v9szD nStdwlFLVbtI3C61ur9IUsjq57envogMLkBqWMpgeXelsoDG8MN/jiRuSfxGAAt8 Y0VWg83GeVhMCeMTzMbrnSqz0ujhnaGR2NTzYxGdXucTwO4p4Ow/EeKLJ2GM85sF V/ReX5F6vRE1IcQbqvmRQdZWRT6GsyYrPol5AJxvJuKufAOfYVWwNGpwkqhq/DId Li1Tz5RRJtV4bYAfeBIn18FwWvESdpspJrGYIAwylNAhP+ghI95Lm5se4Xg== Received: from mail-vs1-f69.google.com (mail-vs1-f69.google.com [209.85.217.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dff0jw5je-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 13 Apr 2026 12:18:49 +0000 (GMT) Received: by mail-vs1-f69.google.com with SMTP id ada2fe7eead31-60521f54387so1845088137.1 for ; Mon, 13 Apr 2026 05:18:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1776082729; x=1776687529; 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=6AnTcThYSkIvK40nziJKZU5G9UJ5bYtnDXyYQeU7520=; b=WsXQzBDa1oM19VI+vt3+Buwgch1R3voWd2IvfKXsoOojRBZrz/+xHgW4XlS+pHvYNK viIfIva6WjVrGF8sGzv+FRSF3uQIcV2ebFw+raoWWSheUXTqEIHJ0bxHB2IHcrXzGyiU OQmcbw/eaGxbVB3eAKtrnJcpPShOvXIsKzVTgwrnvB3LSuWGE6tQwBe7adBFbqXmUkrK CFeKJ0lriEbP2tMS36IxGTjxq78M8EOV7GDXqZzir24EXDRdAqTFDVJ2oZgBM3Il6ve5 RTpwh5Xu9GdsAQ4HTp6ptNDd3g+Hhhn9LDrbab/eJPTjX+4hx1lF2r1uNXaWFJF+XvSL 45Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776082729; x=1776687529; 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=6AnTcThYSkIvK40nziJKZU5G9UJ5bYtnDXyYQeU7520=; b=Qlqdt5PROldk02RP/yvEamcu7jX2w7HqsgHA+jIh9LVB8BBOJsKpxWOiUEatak7y4v 0DFx6nSD8y6iGps59TKs2SspUgCvl9KtToDdGTmAeEUYbBRwBC6juhwFfjiCH9TuSNJX CT6ssdBrqHICxaFB4imegILEVBDGrmpQGgjwAXPp56oDW0vj0TM/NokiQLpRz5jDshRk BLvhhSuqRWayLtQ8zo/RYhtjrdOOujqigei4laxHTQxfGmnoUH9n5/UWknBGc7unyCZ6 F+qk57ElQrByfioyGEPyyfqVK3aYok6SZULTXXYG4jLAjEq2i4qIfgOqmIRxRpRhlAj5 dp2g== X-Forwarded-Encrypted: i=1; AFNElJ8jrDPA4vQca2fsjGBg5UkiQERJfvqLIcnz9zvGJlH2MHe0FG4DXikXrpuKL4dJJbnxfQGd166uUhSsGNI=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7uYMDstPmvOyd0JvnEMDBYaBZgTSFda+OQRTUqy47EJNryU0j ymLyw0bqW3PSNlkTykxHkpKj+ILKrY5+i2jtv/F/FrOT6XKq7xjNaHt9qHOWwYTp3kKtBoOQ6H/ bmnkjpFGAKcXdSbGRkl3uf9mPIIS5rBPue/P6ginLCMi/mKF1oKpk6vWeYFbR0tHvC6g= X-Gm-Gg: AeBDievKj7QDs+cEt653ZYGJizuBtnlnfMXYneGaUFKxfTVJq+X8jQNOibsXnXMkN40 YbbsdDX7ZmmJ4LGgXlgFnXOrOSJdoSV5QopvwlnLmoJ0LilyPLgqZHuB06n0nkPRykcOY2DmFmS hDphWpPGTLAEEailGnK4mDNavUnSdKxeAq7YJDX08d/zQiWGqZ9e5AcqKlUOA0gPyQC07NSPLqA 5p27m1ECc59WKEyPjkwk84m5W2NtEsyr9wY4IRJh5BJ4u3MLvC2qeNWYl/W6kI6nH6/DO/d34Pw Jwg1CLk0sYwQVn+KhSrB2c1y3cehBLzxhzK79ijbTYRb+8nt1DF5jSnF7gaQTNs8Y7gcuetE09L LTDimwbVOlcFl/8lS2sHXq4ftbXDKGyT96km3b1wJBXA2pM6rRA== X-Received: by 2002:a05:6102:5708:b0:601:f386:9ed2 with SMTP id ada2fe7eead31-609fe89d49cmr4713618137.7.1776082728851; Mon, 13 Apr 2026 05:18:48 -0700 (PDT) X-Received: by 2002:a05:6102:5708:b0:601:f386:9ed2 with SMTP id ada2fe7eead31-609fe89d49cmr4713606137.7.1776082728430; Mon, 13 Apr 2026 05:18:48 -0700 (PDT) Received: from hu-nandam-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-9568c185a71sm1449231241.7.2026.04.13.05.18.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Apr 2026 05:18:48 -0700 (PDT) From: Ajay Kumar Nandam To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, srinivas.kandagatla@oss.qualcomm.com Subject: [PATCH v1 1/3] ASoC: codecs: lpass-wsa-macro: Switch to PM clock framework for runtime PM Date: Mon, 13 Apr 2026 17:48:22 +0530 Message-Id: <20260413121824.375473-2-ajay.nandam@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260413121824.375473-1-ajay.nandam@oss.qualcomm.com> References: <20260413121824.375473-1-ajay.nandam@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: 8bit X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDEzMDEyMSBTYWx0ZWRfXwtiiFF+PhWUT 8HJMC2t8wTocCi4X79l+RZGImwDeKk+rutAmSxDuN8CoFaQzFd/GsbrGUJPi2tbWt83GO4LvWn+ o69H4Q/9f23Gqxf0Y5ViiqTy66ecN2e5kRbr4k9Z6zpq2Jou9UlviBXQmvHxGQDeTAY2Xv3Jb4e 9ZP/qhNCUIlr/+r+h2Dxm/RZIBk1x4xecMOXuTvHuBqiRKRnDPn4Rf5vxlL5yo/sANM6Wv3CFf/ tskEnrrVWOEOZKcPDWPEmQrzziEO4yKF3NUuNVHVj/rZ3SKYcacCCq2hbf9s4icYOTR6PmQXCii HiscwWdL/rffWYA8MX+qLveetdpYH+fT51bd0qEznSv7L+Bq/39TFdCdwyZjw8+Glc7VvHbjt6y rVJ0E9H16XN3V5wGRIWn2yw512ucy1juYdWx70tHtItUKetoytb4C8kIpiMq0Cd5aV5Tq6MJ8nD jXptGKeRWQemHwlJiEA== X-Proofpoint-ORIG-GUID: l9sSycwkSeUfPC21l2LucdNj55z38J9o X-Proofpoint-GUID: l9sSycwkSeUfPC21l2LucdNj55z38J9o X-Authority-Analysis: v=2.4 cv=d/LFDxjE c=1 sm=1 tr=0 ts=69dcdf29 cx=c_pps a=5HAIKLe1ejAbszaTRHs9Ug==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=6iqXw53aW0HuLngz8iAA:9 a=gYDTvv6II1OnSo0itH1n: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-04-13_03,2026-04-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 malwarescore=0 phishscore=0 priorityscore=1501 bulkscore=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604130121 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. Signed-off-by: Ajay Kumar Nandam --- sound/soc/codecs/lpass-wsa-macro.c | 118 +++++++++-------------------- 1 file changed, 37 insertions(+), 81 deletions(-) diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c index 5ad0448af..6aa6c4d95 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 #include "lpass-macro-common.h" @@ -2529,15 +2530,15 @@ static const struct snd_soc_dapm_route wsa_audio_map[] = { static int wsa_swrm_clock(struct wsa_macro *wsa, bool enable) { struct regmap *regmap = wsa->regmap; + int ret; - if (enable) { - int ret; + ret = pm_runtime_get_sync(wsa->dev); + if (ret < 0) { + pm_runtime_put_noidle(wsa->dev); + return ret; + } - ret = clk_prepare_enable(wsa->mclk); - if (ret) { - dev_err(wsa->dev, "failed to enable mclk\n"); - return ret; - } + if (enable) { wsa_macro_mclk_enable(wsa, true); regmap_update_bits(regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, @@ -2548,9 +2549,10 @@ static int wsa_swrm_clock(struct wsa_macro *wsa, bool 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); } + pm_runtime_mark_last_busy(wsa->dev); + pm_runtime_put_autosuspend(wsa->dev); 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); - ret = clk_prepare_enable(wsa->macro); + ret = devm_pm_clk_create(dev); if (ret) - goto err; + return ret; - ret = clk_prepare_enable(wsa->dcodec); - if (ret) - goto err_dcodec; + ret = of_pm_clk_add_clks(dev); + if (ret < 0) + return ret; - ret = clk_prepare_enable(wsa->mclk); - if (ret) - goto err_mclk; + pm_runtime_set_autosuspend_delay(dev, 3000); + pm_runtime_use_autosuspend(dev); + pm_runtime_enable(dev); - ret = clk_prepare_enable(wsa->npl); - if (ret) - goto err_npl; - ret = clk_prepare_enable(wsa->fsgen); - if (ret) - goto err_fsgen; + ret = pm_runtime_resume_and_get(dev); + if (ret < 0) { + goto err_rpm_disable; + } /* reset swr ip */ regmap_update_bits(wsa->regmap, CDC_WSA_CLK_RST_CTRL_SWR_CONTROL, @@ -2809,44 +2809,26 @@ 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; ret = wsa_macro_register_mclk_output(wsa); if (ret) - goto err_clkout; + goto err_rpm_put; - return 0; + pm_runtime_mark_last_busy(dev); + pm_runtime_put_autosuspend(dev); -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: + pm_runtime_put_noidle(dev); +err_rpm_disable: + pm_runtime_disable(dev); return ret; - } static void wsa_macro_remove(struct platform_device *pdev) { - struct wsa_macro *wsa = 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); + pm_runtime_disable(&pdev->dev); } static int wsa_macro_runtime_suspend(struct device *dev) @@ -2856,11 +2838,7 @@ static int wsa_macro_runtime_suspend(struct device *dev) regcache_cache_only(wsa->regmap, true); regcache_mark_dirty(wsa->regmap); - clk_disable_unprepare(wsa->fsgen); - clk_disable_unprepare(wsa->npl); - clk_disable_unprepare(wsa->mclk); - - return 0; + return pm_clk_suspend(dev); } static int wsa_macro_runtime_resume(struct device *dev) @@ -2868,34 +2846,12 @@ static int wsa_macro_runtime_resume(struct device *dev) struct wsa_macro *wsa = dev_get_drvdata(dev); int ret; - ret = clk_prepare_enable(wsa->mclk); - if (ret) { - dev_err(dev, "unable to prepare mclk\n"); - return ret; - } - - ret = clk_prepare_enable(wsa->npl); - if (ret) { - dev_err(dev, "unable to prepare mclkx2\n"); - goto err_npl; - } - - ret = clk_prepare_enable(wsa->fsgen); - if (ret) { - dev_err(dev, "unable to prepare fsgen\n"); - goto err_fsgen; - } - 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); + ret = pm_clk_resume(dev); + if (ret) + return ret; - return ret; + return regcache_sync(wsa->regmap); } static const struct dev_pm_ops wsa_macro_pm_ops = { -- 2.34.1