From patchwork Thu Dec 29 11:34:05 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 89260 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp5945541qgi; Thu, 29 Dec 2016 03:34:34 -0800 (PST) X-Received: by 10.99.120.207 with SMTP id t198mr52399218pgc.55.1483011274147; Thu, 29 Dec 2016 03:34:34 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f80si53314107pff.237.2016.12.29.03.34.33; Thu, 29 Dec 2016 03:34:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-samsung-soc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-samsung-soc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-samsung-soc-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752152AbcL2Led (ORCPT + 4 others); Thu, 29 Dec 2016 06:34:33 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:35877 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751839AbcL2Leb (ORCPT ); Thu, 29 Dec 2016 06:34:31 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OIY00ELZ2TG6400@mailout1.w1.samsung.com> for linux-samsung-soc@vger.kernel.org; Thu, 29 Dec 2016 11:34:28 +0000 (GMT) Received: from eusmges3.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20161229113428eucas1p165ff8131da931a51407dcde271da8a59~UtuQichR62364623646eucas1p15; Thu, 29 Dec 2016 11:34:28 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3.samsung.com (EUCPMTA) with SMTP id 80.EA.02512.3C4F4685; Thu, 29 Dec 2016 11:34:27 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20161229113427eucas1p166db5239bd7b17ebaba8b248f06cffe8~UtuPgY6_t2138521385eucas1p1o; Thu, 29 Dec 2016 11:34:27 +0000 (GMT) X-AuditID: cbfec7f2-f79de6d0000009d0-08-5864f4c3cc44 Received: from eusync2.samsung.com ( [203.254.199.212]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id C8.0F.06573.6B4F4685; Thu, 29 Dec 2016 11:34:14 +0000 (GMT) Received: from AMDC2765.digital.local ([106.116.147.25]) by eusync2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OIY00CMD2T7BA50@eusync2.samsung.com>; Thu, 29 Dec 2016 11:34:26 +0000 (GMT) From: Marek Szyprowski To: alsa-devel@alsa-project.org, linux-samsung-soc@vger.kernel.org Cc: Marek Szyprowski , Mark Brown , Sylwester Nawrocki , Sangbeom Kim , Krzysztof Kozlowski , Bartlomiej Zolnierkiewicz , Inki Dae , Javier Martinez Canillas Subject: [PATCH 3/5] ASoC: samsung: i2s: Move saving and restoring regs to runtime pm operations Date: Thu, 29 Dec 2016 12:34:05 +0100 Message-id: <1483011247-21613-4-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1483011247-21613-1-git-send-email-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrOIsWRmVeSWpSXmKPExsWy7djP87qHv6REGHS9tbG4cvEQk8XGGetZ LaY+fMJmMen+BBaLN2/XMFmcP7+B3WLG+X1MFmuP3GW3OPymndXi4oovTA5cHhs+N7F5bFrV yeaxpf8uu0ffllWMHp83yQWwRnHZpKTmZJalFunbJXBlnNzazlqwUqTi9cZ/rA2MTYJdjJwc EgImEnvaJzND2GISF+6tZ+ti5OIQEljKKNFwYTUThPOZUeJbSw8zTMf87qvsEIlljBLP36xk gXAamCQ63r1jA6liEzCU6HrbBWaLCDhJzJzzHmwus8AtJonupgssIAlhgSSJGzvOgY1lEVCV WN/zCayBV8BD4ub3q0wQ6+QkTh6bzApicwp4SrR8bIKKt7NLHJjr3cXIAWTLSmw6AHWdi8T2 pX+gbGGJV8e3sEPYMhKXJ3ezQNj9jBJNrdoQ9gxGiXNveSFsa4nDxy+CrWIW4JOYtG06M8R4 XomONiEI00Pi4EMbiGpHiXkb5jNCvD6HUeLdxy8sExhlFjAyrGIUSS0tzk1PLTbWK07MLS7N S9dLzs/dxAiM7tP/jn/awfj1hNUhRgEORiUeXgmZlAgh1sSy4srcQ4wSHMxKIrxfPgGFeFMS K6tSi/Lji0pzUosPMUpzsCiJ8+5ZcCVcSCA9sSQ1OzW1ILUIJsvEwSnVwBgp1Fzin/b2vlZT 9COvCL7D3b6LX51dOT82d+/06y4zetbktU2pb1Ff8+Ay9+K0J/Zes4RiPgWfdfNUbqlu4pB4 OPfE3ZRJT1huZR0OCCsRmyvLJ82uscbvbO6/0q5Von/qpjaxH++0NP1hfsfLcDP/6YSzG0/M 6ly2ZYfRTZsp7j+jqqfc/KnEUpyRaKjFXFScCADd2wKF6gIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrJLMWRmVeSWpSXmKPExsVy+t/xK7rbvqREGBz7IW1x5eIhJouNM9az Wkx9+ITNYtL9CSwWb96uYbI4f34Du8WM8/uYLNYeuctucfhNO6vFxRVfmBy4PDZ8bmLz2LSq k81jS/9ddo++LasYPT5vkgtgjXKzyUhNTEktUkjNS85PycxLt1UKDXHTtVBSyEvMTbVVitD1 DQlSUihLzCkF8owM0ICDc4B7sJK+XYJbxsmt7awFK0UqXm/8x9rA2CTYxcjJISFgIjG/+yo7 hC0mceHeerYuRi4OIYEljBIfdq5mh3CamCT2XTzKBlLFJmAo0fW2C8wWEXCSmDnnPVgHs8Ad JonvjxaxgCSEBZIkbuw4xwxiswioSqzv+QTWwCvgIXHz+1UmiHVyEiePTWYFsTkFPCVaPjaB xYWAav68+sc0gZF3ASPDKkaR1NLi3PTcYiO94sTc4tK8dL3k/NxNjMBg33bs55YdjF3vgg8x CnAwKvHwFsilRAixJpYVV+YeYpTgYFYS4f3yCSjEm5JYWZValB9fVJqTWnyI0RToqInMUqLJ +cBIzCuJNzQxNLc0NDK2sDA3MlIS55364Uq4kEB6YklqdmpqQWoRTB8TB6dUA+OU86oVAqyT 2j+1sIbF9f9aIjSZi01oduvtpToMVQy13z7mFheUSfwRnGr75tTqGu4zkR9O5EVOXJrmG/y1 +7E6zwzG7KqMhrnW+iFHLW3bNAxX7nu7NuuLyTMhiX3M7V9Vvz9jMrN161y3ZsPc61MdD9gL dE/c3TV71ftrHVFmgUdK16Y9ZVBiKc5INNRiLipOBADvAIzUjAIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161229113427eucas1p166db5239bd7b17ebaba8b248f06cffe8 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?TWFyZWsgU3p5cHJvd3NraRtTUlBPTC1LZXJuZWwgKFRQKRs=?= =?UTF-8?B?7IK87ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?TWFyZWsgU3p5cHJvd3NraRtTUlBPTC1LZXJuZWwgKFRQKRtT?= =?UTF-8?B?YW1zdW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20161229113427eucas1p166db5239bd7b17ebaba8b248f06cffe8 X-RootMTR: 20161229113427eucas1p166db5239bd7b17ebaba8b248f06cffe8 References: <1483011247-21613-1-git-send-email-m.szyprowski@samsung.com> Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org This patch moves saving and restoring I2S registers to runtime PM operations, what prepares the driver to operate with audio power domain. When support for audio power domain is enabled and the domain is being turned off, the I2S module will loose its context (registers), so runtime callbacks have to handle it. System sleep suspend/resume operation are implemented on top of runtime PM operations with generic pm_runtime_force_suspend/resume helpers. Signed-off-by: Marek Szyprowski --- sound/soc/samsung/i2s.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index 2aa800b99938..47a5650aaa66 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -983,24 +983,12 @@ static int i2s_set_clkdiv(struct snd_soc_dai *dai, #ifdef CONFIG_PM static int i2s_suspend(struct snd_soc_dai *dai) { - struct i2s_dai *i2s = to_info(dai); - - i2s->suspend_i2smod = readl(i2s->addr + I2SMOD); - i2s->suspend_i2scon = readl(i2s->addr + I2SCON); - i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR); - - return 0; + return pm_runtime_force_suspend(dai->dev); } static int i2s_resume(struct snd_soc_dai *dai) { - struct i2s_dai *i2s = to_info(dai); - - writel(i2s->suspend_i2scon, i2s->addr + I2SCON); - writel(i2s->suspend_i2smod, i2s->addr + I2SMOD); - writel(i2s->suspend_i2spsr, i2s->addr + I2SPSR); - - return 0; + return pm_runtime_force_resume(dai->dev); } #else #define i2s_suspend NULL @@ -1129,6 +1117,10 @@ static int i2s_runtime_suspend(struct device *dev) { struct i2s_dai *i2s = dev_get_drvdata(dev); + i2s->suspend_i2smod = readl(i2s->addr + I2SMOD); + i2s->suspend_i2scon = readl(i2s->addr + I2SCON); + i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR); + clk_disable_unprepare(i2s->clk); return 0; @@ -1140,6 +1132,10 @@ static int i2s_runtime_resume(struct device *dev) clk_prepare_enable(i2s->clk); + writel(i2s->suspend_i2scon, i2s->addr + I2SCON); + writel(i2s->suspend_i2smod, i2s->addr + I2SMOD); + writel(i2s->suspend_i2spsr, i2s->addr + I2SPSR); + return 0; } #endif /* CONFIG_PM */ @@ -1516,6 +1512,8 @@ static int samsung_i2s_remove(struct platform_device *pdev) static const struct dev_pm_ops samsung_i2s_pm = { SET_RUNTIME_PM_OPS(i2s_runtime_suspend, i2s_runtime_resume, NULL) + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, + pm_runtime_force_resume) }; static struct platform_driver samsung_i2s_driver = {