From nobody Thu Apr 9 12:06:46 2026 Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) (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 4289C332916 for ; Mon, 2 Mar 2026 11:52:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772452328; cv=none; b=rOrTDfbHS+7CZ4bdQSnP4pIis2dl/Pp9pVLQgfolDGtWVYLVw45ovszn9GlDyHJrt2D+bVD/bmJycnr4VgY4hb9QneD7pNaLSXKne52g0OVUAQ9nJlyFDR0IvatDplxEbnGelfqId9AouD5lxcb0+kQOZZCjL/yV6LuDvDOiWhg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772452328; c=relaxed/simple; bh=Kq1VY0elzXLE2DLt17TjbEeYDzgRYt9Uu6isa+YAFhs=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=lB+gz0Jb+u3DpF+EGRt9VbudoONVt8p6359GwtGjAn8I+5+qfX16Pbm1G7/dY+7uzopBbSGOEKO9K1SnGMOPEHQUvGBfAxMaJKtocF37G+rS0IuGMbomIxoT6O+LY4icUexaJ0kJ8Z3MNVxiuTG7Qjfb88LSYw0IkyqCoLYpSGk= 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=FUQJE5aL; arc=none smtp.client-ip=209.85.208.180 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="FUQJE5aL" Received: by mail-lj1-f180.google.com with SMTP id 38308e7fff4ca-3870acaf78eso38451621fa.2 for ; Mon, 02 Mar 2026 03:52:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772452325; x=1773057125; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=gygxDzTWOeNJWfx2seOR9/LrkpWOSWrJ7INpKfiRY4k=; b=FUQJE5aLHrmddr+DXa3sLOXUnh11Rs+4oc2NSDVFobMFca70AnV1EU9PBREr+T1LYw Qp56v3pJ915koQ+MyVo0o88XI+UzOuRaaCT+eRRM7unjlpB62iWYWes5S9GkmySqTY+E 7PKeg9/jsy+qo8hqRBKxq0rXGLic/7u3TXb9SefjBB+rP5DcWCNrT9IRosCAhOr04LBH L6I9/Sk6NicGbyershNAjfLlMXVNBOfvjJnGAJiGUJUnin0x6yDOYjGsi6sUxwrdRp+f tEcyQFvizFyku2dIln41LIcfXw89w88hqup40pBNfOzMM2R5PEGa2sW05/V58WlgglCj TgSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772452325; x=1773057125; h=content-transfer-encoding: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; bh=gygxDzTWOeNJWfx2seOR9/LrkpWOSWrJ7INpKfiRY4k=; b=qYeyMg83xUeth5gwyi1W4qxzNZUsNyob03OxSNmoTZsvOGRpdYa1CQiD/D+SvYVMKA dwaft68PaUyTFQjva0rNOkZ1YG52VYtzmaOg9GmNximvG4gDkg/JHq8g36d35AEeHDQ7 L57kiz+OjJjVAYGJfSREfISe9RDI0j+F3Cv5OB7G8J/qEpJYJpvBUi3VQKT/ORlhRnJG MnDddPS9UnHRZ/srYcnPZC7o4n4dx1g3WjtWtRxBVRWK86IPTElfEFHLAaaoEfiuGOgn cBcCwV1Pt/KW7FLpyH5GJ3phTr5hVp4R6UvfL2hJOCz9DvisgOFb14Tzk/Voy8XqxTiL c+9A== X-Forwarded-Encrypted: i=1; AJvYcCVInmR+wwP/4H/X7c6ZARIcg2R3CUSa1XfMtbzdGOMjLq2wVMgtGHfETgOM9ARqcdD2LF99Pd2sxRjuf8k=@vger.kernel.org X-Gm-Message-State: AOJu0YxXyZk/0nX0KB2SvxpCY1FNG+DTpnAvRuR5BOwj+Ux6iLbMiFlE PaShDmVwLOfbpDLMOObFdGbX9O6JoEjIN0SSejvh5gcthr/otqFWXBBX X-Gm-Gg: ATEYQzwKgTV1TePgpbyrS4TnWQQ62IxTrCAtbE7bd7MztlQM/7MImsTXArSl76D0CHW 86iW/g4rOcenw+HXcun7l1/yt4x+9wM3L++KTjQD//6AU71PdDcaI+z73Y3Lw6ntR5EaGtH8hp4 3VZqQnk9MJ+ki34cDWvfkNASaGAHUzCVn+8FLS9ttU3A+5fpTG86xspJkWs/Tba8tUeIJyYHYfw AhlYBM5DU7Y04BO6cuWyN2/JiTzOK0vTFWw79Veilrq+23tzoL+Na9lY/AMTaSD9cVUROSpcE4g 5gjTY/8799ISj0TZHdAOUZQlwPO8s/fAflUEAZkWr0YFrDsJfvF3GCZmz1R9lPODWSO+zxblO2P C9JiH+RvFsNt+bi+2Hfrdn/VxEnsC8i8ecqajAEn6Gl64R1fiFXZqTTfCX12LZi1BfVDaDQNHIw 2tXJmVQzrmHCOWxXmONZcSQN5i4/7NQR0= X-Received: by 2002:a05:651c:2352:20b0:387:323:f6e2 with SMTP id 38308e7fff4ca-389ff13694amr61997631fa.9.1772452325253; Mon, 02 Mar 2026 03:52:05 -0800 (PST) Received: from vovchkir.localdomain ([95.161.223.42]) by smtp.googlemail.com with ESMTPSA id 38308e7fff4ca-389f2f70aa8sm29812691fa.19.2026.03.02.03.52.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Mar 2026 03:52:04 -0800 (PST) From: Vladimir Yakovlev To: Rajeev Kumar , Liam Girdwood Cc: Vladimir Yakovlev , Mark Brown , Jaroslav Kysela , Takashi Iwai , Philipp Zabel , Brady Norander , Charles Keepax , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] ASoC: dwc: rework pm functions Date: Mon, 2 Mar 2026 14:51:59 +0300 Message-Id: <20260302115159.776850-1-vovchkir@gmail.com> X-Mailer: git-send-email 2.34.1 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 Content-Type: text/plain; charset="utf-8" When using a power domain, we must completely disconnect the module and turn off external signals when it is not in use and turn everything back on at the right time. When entering system_sleep, pm_runtime_force_suspend() is called, which turns off the device if it was running. When exiting system_sleep, the opposite occurs: pm_runtime_force_resume() is called. Signed-off-by: Vladimir Yakovlev --- sound/soc/dwc/dwc-i2s.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/sound/soc/dwc/dwc-i2s.c b/sound/soc/dwc/dwc-i2s.c index 28001e9857d9..1d99d42400c3 100644 --- a/sound/soc/dwc/dwc-i2s.c +++ b/sound/soc/dwc/dwc-i2s.c @@ -481,8 +481,11 @@ static int dw_i2s_runtime_suspend(struct device *dev) { struct dw_i2s_dev *dw_dev =3D dev_get_drvdata(dev); =20 + reset_control_assert(dw_dev->reset); + if (dw_dev->capability & DW_I2S_MASTER) - clk_disable(dw_dev->clk); + clk_disable_unprepare(dw_dev->clk); + return 0; } =20 @@ -492,10 +495,18 @@ static int dw_i2s_runtime_resume(struct device *dev) int ret; =20 if (dw_dev->capability & DW_I2S_MASTER) { - ret =3D clk_enable(dw_dev->clk); + ret =3D clk_prepare_enable(dw_dev->clk); if (ret) return ret; } + + ret =3D reset_control_deassert(dw_dev->reset); + if (ret) { + if (dw_dev->capability & DW_I2S_MASTER) + clk_disable_unprepare(dw_dev->clk); + return ret; + } + return 0; } =20 @@ -504,22 +515,16 @@ static int dw_i2s_suspend(struct snd_soc_component *c= omponent) { struct dw_i2s_dev *dev =3D snd_soc_component_get_drvdata(component); =20 - if (dev->capability & DW_I2S_MASTER) - clk_disable(dev->clk); - return 0; + return pm_runtime_force_suspend(dev->dev); } =20 static int dw_i2s_resume(struct snd_soc_component *component) { struct dw_i2s_dev *dev =3D snd_soc_component_get_drvdata(component); struct snd_soc_dai *dai; - int stream, ret; + int stream; =20 - if (dev->capability & DW_I2S_MASTER) { - ret =3D clk_enable(dev->clk); - if (ret) - return ret; - } + pm_runtime_force_resume(dev->dev); =20 for_each_component_dais(component, dai) { for_each_pcm_streams(stream) @@ -1030,6 +1035,17 @@ static int dw_i2s_probe(struct platform_device *pdev) } =20 pm_runtime_enable(&pdev->dev); + if (pm_runtime_enabled(&pdev->dev)) { + /* + * runtime_pm will control clocks and resets, + * but if RPM is off - turn on clocks and resets permanently + */ + if (dev->capability & DW_I2S_MASTER) + clk_disable_unprepare(dev->clk); + if (!dev->is_jh7110) + reset_control_assert(dev->reset); + } + return 0; =20 err_assert_reset: --=20 2.34.1