Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751456AbdHJGYl (ORCPT ); Thu, 10 Aug 2017 02:24:41 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:47381 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750735AbdHJGYj (ORCPT ); Thu, 10 Aug 2017 02:24:39 -0400 X-AuditID: cbfec7ef-f79ee6d000003120-9c-598bfc23f49b Subject: Re: [RFT v2] mfd: exynos-lpass: Handle return value of clk_prepare_enable To: Krzysztof Kozlowski , Arvind Yadav Cc: lee.jones@linaro.org, kgene@kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Sylwester Nawrocki , Chanwoo Choi , Bartlomiej Zolnierkiewicz , Andi Shyti From: Marek Szyprowski Message-id: <8365fa18-78c5-5fdf-f6d6-6c0491ce262f@samsung.com> Date: Thu, 10 Aug 2017 08:24:33 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-version: 1.0 In-reply-to: <20170810060140.GA3625@kozik-book> Content-type: text/plain; charset="utf-8"; format="flowed" Content-transfer-encoding: 7bit Content-language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrPKsWRmVeSWpSXmKPExsWy7djPc7rKf7ojDTquaVpsP/KM1eJa70Jm i40z1rNaXP/ynNWi//FrZovz5zewW9z/epTRYtPja6wWl3fNYbOYcX4fk8XhN+2sDtweO2fd ZffYtKqTzePOtT1sHpuX1Hv0bVnF6PF5k1wAWxSXTUpqTmZZapG+XQJXxrFD6QWbJCvOT7jN 1sB4VqSLkZNDQsBEYunMnawQtpjEhXvr2boYuTiEBJYxSpzdvZkRwvnMKPHlzBbmLkYOsI7u 9mi4otUXJ0N1PAfquLyODWSUsECIxKtTP1hAbBGBUIkFW46ygBQxCxxnkphxeyPYPjYBQ4mu t11sIFN5BewkVs80BgmzCKhK7Hg7hxnEFhWIkZi7oIUdxOYVEJT4Mfke2ExOAX2Jr4fngdUw C1hJPPvXygphy0tsXvMWKi4u0dx6E2yvhMA1donbk3+wQXwgK7HpADPEyy4Sj4/3sUPYwhKv jm+BsmUkOjsOMkHY/YwSTa3aEPYMRolzb3khbGuJw8cvQu3lk5i0bTo0gHglOtqEIEo8JA5c mMIIYTtK7P7WygIJqxuMEh0fV7BOYFSYheS1WUjemYXknVlI3lnAyLKKUSS1tDg3PbXYUK84 Mbe4NC9dLzk/dxMjMFmd/nf8/Q7Gp80hhxgFOBiVeHg5hLsjhVgTy4orcw8xSnAwK4nwfn0E FOJNSaysSi3Kjy8qzUktPsQozcGiJM5rG9UWKSSQnliSmp2aWpBaBJNl4uCUamAUadyh0sfS oqscUfVg55eTr7TVRQ9NMA97nGMTsNztZcerfMnUCofDp3eqtqcf/Hj4TkHUpdigmxujYh2D iufMSStdw9Bg3q/3yd7kyE3HuFT2Khudx847K6aEbHns7nphX0SdVODCm/+fdZ6pOfdT/ed6 1YtWKUcONJgvtvzxRWPFfwd+izNKLMUZiYZazEXFiQA7O7eBUgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrHIsWRmVeSWpSXmKPExsVy+t/xq7rKf7ojDTqDLbYfecZqca13IbPF xhnrWS2uf3nOatH/+DWzxfnzG9gt7n89ymix6fE1VovLu+awWcw4v4/J4vCbdlYHbo+ds+6y e2xa1cnmcefaHjaPzUvqPfq2rGL0+LxJLoAtys0mIzUxJbVIITUvOT8lMy/dVik0xE3XQkkh LzE31VYpQtc3JEhJoSwxpxTIMzJAAw7OAe7BSvp2CW4Zxw6lF2ySrDg/4TZbA+NZkS5GDg4J AROJ7vboLkZOIFNM4sK99WwgtpDAEkaJxUfkuxi5gOznjBL7f/1gAUkIC4RIvDoFYYsIhEr8 bb/IAlLELHCSSeL/gc1MEB23GCXWP7/KDlLFJmAo0fW2iw1kG6+AncTqmcYgYRYBVYkdb+cw g9iiAjES12beYQWxeQUEJX5Mvge2gFNAX+Lr4XlgNcwCZhJfXh5mhbDlJTaveQsVF5dobr3J MoFRcBaS9llIWmYhaZmFpGUBI8sqRpHU0uLc9NxiQ73ixNzi0rx0veT83E2MwLjdduzn5h2M lzYGH2IU4GBU4uFNEO2OFGJNLCuuzD3EKMHBrCTC+/URUIg3JbGyKrUoP76oNCe1+BCjKdBz E5mlRJPzgSklryTe0MTQ3NLQyNjCwtzISEmcV/1yU6SQQHpiSWp2ampBahFMHxMHp1QDo6Ra E4dnwcSYo1/zJ/IKfmS+/mFOI7ONZDxnS7HtFMaOLyGyd/+u3R1T6cJp4ynwwGjhz48l7Fu6 rh2QXiC1/PuiCZP0Axp4TdXNpkd+ylvN0qgdEHvnzanJFqnLu6uW1c44Gm1x4OOBZae+aze9 EM99aK55OSRknbTAkgd/lX96yvdsSSs3VWIpzkg01GIuKk4EADXFr0HxAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170810062435eucas1p2cd3c59d2ee22b745c8d6380a9204b56a X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 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-CMS-RootMailID: 20170810060203epcas1p28049ab1a01c6ac6f93e8945645b517e5 X-RootMTR: 20170810060203epcas1p28049ab1a01c6ac6f93e8945645b517e5 References: <8de486cf36afdf97792313a6b21432e04374e47e.1502253715.git.arvind.yadav.cs@gmail.com> <20170810060140.GA3625@kozik-book> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3150 Lines: 98 Hi All, On 2017-08-10 08:01, Krzysztof Kozlowski wrote: > On Wed, Aug 09, 2017 at 10:18:10AM +0530, Arvind Yadav wrote: >> clk_prepare_enable() can fail here and we must check its return value. >> we must call pm_runtime_disable() and pm_runtime_set_suspended(), >> If exynos_lpass_probe is not successful. >> >> Signed-off-by: Arvind Yadav >> --- >> changes in v2: >> added regmap_exit(lpass->top) and blank line before return. >> >> drivers/mfd/exynos-lpass.c | 23 +++++++++++++++++------ >> 1 file changed, 17 insertions(+), 6 deletions(-) >> > For me looks ok although this requires testing and I do not have > Exynos with LPASS (e.g. Exynos5433). Maybe folks from Samsung (Polish > R&D or HQ as they are working on it) could help (Cced). Works fine on Exynos5433 based TM2e. Tested-by: Marek Szyprowski > > Best regards, > Krzysztof > >> diff --git a/drivers/mfd/exynos-lpass.c b/drivers/mfd/exynos-lpass.c >> index ca829f8..1ab7210 100644 >> --- a/drivers/mfd/exynos-lpass.c >> +++ b/drivers/mfd/exynos-lpass.c >> @@ -73,9 +73,13 @@ static void exynos_lpass_core_sw_reset(struct exynos_lpass *lpass, int mask) >> regmap_write(lpass->top, SFR_LPASS_CORE_SW_RESET, val); >> } >> >> -static void exynos_lpass_enable(struct exynos_lpass *lpass) >> +static int exynos_lpass_enable(struct exynos_lpass *lpass) >> { >> - clk_prepare_enable(lpass->sfr0_clk); >> + int ret; >> + >> + ret = clk_prepare_enable(lpass->sfr0_clk); >> + if (ret) >> + return ret; >> >> /* Unmask SFR, DMA and I2S interrupt */ >> regmap_write(lpass->top, SFR_LPASS_INTR_CA5_MASK, >> @@ -87,6 +91,8 @@ static void exynos_lpass_enable(struct exynos_lpass *lpass) >> exynos_lpass_core_sw_reset(lpass, LPASS_I2S_SW_RESET); >> exynos_lpass_core_sw_reset(lpass, LPASS_DMA_SW_RESET); >> exynos_lpass_core_sw_reset(lpass, LPASS_MEM_SW_RESET); >> + >> + return 0; >> } >> >> static void exynos_lpass_disable(struct exynos_lpass *lpass) >> @@ -112,6 +118,7 @@ static int exynos_lpass_probe(struct platform_device *pdev) >> struct exynos_lpass *lpass; >> void __iomem *base_top; >> struct resource *res; >> + int ret; >> >> lpass = devm_kzalloc(dev, sizeof(*lpass), GFP_KERNEL); >> if (!lpass) >> @@ -136,7 +143,13 @@ static int exynos_lpass_probe(struct platform_device *pdev) >> platform_set_drvdata(pdev, lpass); >> pm_runtime_set_active(dev); >> pm_runtime_enable(dev); >> - exynos_lpass_enable(lpass); >> + ret = exynos_lpass_enable(lpass); >> + if (ret) { >> + pm_runtime_disable(dev); >> + pm_runtime_set_suspended(dev); >> + regmap_exit(lpass->top); >> + return ret; >> + } >> >> return devm_of_platform_populate(dev); >> } >> @@ -167,9 +180,7 @@ static int __maybe_unused exynos_lpass_resume(struct device *dev) >> { >> struct exynos_lpass *lpass = dev_get_drvdata(dev); >> >> - exynos_lpass_enable(lpass); >> - >> - return 0; >> + return exynos_lpass_enable(lpass); >> } >> >> static const struct dev_pm_ops lpass_pm_ops = { >> -- >> 1.9.1 Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland