From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754189AbbIQI2x (ORCPT ); Thu, 17 Sep 2015 04:28:53 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:51322 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753919AbbIQI2u (ORCPT ); Thu, 17 Sep 2015 04:28:50 -0400 X-AuditID: cbfee691-f79ca6d00000456a-fb-55fa79bf1b0c From: Inha Song To: lee.jones@linaro.org, broonie@kernel.org Cc: linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org, patches@opensource.wolfsonmicro.com, sameo@linux.intel.com, Inha Song Subject: [alsa-devel] [PATCH] mfd: arizona: Call the runtime PM function if the state is runtime resumed Date: Thu, 17 Sep 2015 17:28:47 +0900 Message-id: <1442478527-29304-1-git-send-email-ideal.song@samsung.com> X-Mailer: git-send-email 2.0.0.390.gcb682f8 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrNLMWRmVeSWpSXmKPExsWyRsSkWHd/5a9Qg8MXjC2uXDzEZDH14RM2 i11/7zNa3P96lNHi8q45bBbL3/5nszjdzerA7rHhcxObx6ZVnWwed67tYfOYdzLQ4+XE32we fVtWMXp83iQXwB7FZZOSmpNZllqkb5fAlfFj0SvGgtl8FSd/vWVuYLzN3cXIySEhYCLRv2sl E4QtJnHh3nq2LkYuDiGBFYwSbSe+scEUNb89DJVYyiixf9JZZghnIpPEit5T7CBVbAIaEt8/ bwZKcHCICOhIXL+RDlLDLLCQUeLsw02MIDXCAlkSfyY2gK1jEVCV6H7VygpSzyvgJvG4KQFi mbbEvoaZYMskBPrZJW7v2McCUS8g8W3yIRaQegkBWYlNB5gh6iUlDq64wTKBUXABI8MqRtHU guSC4qT0IlO94sTc4tK8dL3k/NxNjMAwPv3v2cQdjPcPWB9iFOBgVOLhVXD5FSrEmlhWXJl7 iNEUaMNEZinR5HxgtOSVxBsamxlZmJqYGhuZW5opifPqSP8MFhJITyxJzU5NLUgtii8qzUkt PsTIxMEp1cBY67XCZaX5ljeTqv8taM2RWjHRvc/AP6FsisKPtd4zVzr5Lbvwi9fbmlP44wOF xM9ZHkvFbZSX7XYIeGPzQoCV725jYPNjGWaVHj6uf31n1+4/sexe6YcGadFse4arGeWRP4Tb XqjZS86UWv/7Vcl87dSYlfMUTHr9H856+yqJ2fTgyQv1N8yVWIozEg21mIuKEwH6m7krXgIA AA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBIsWRmVeSWpSXmKPExsVy+t9jAd39lb9CDWbd1rO4cvEQk8XUh0/Y LHb9vc9ocf/rUUaLy7vmsFksf/ufzeJ0N6sDu8eGz01sHptWdbJ53Lm2h81j3slAj5cTf7N5 9G1ZxejxeZNcAHtUA6NNRmpiSmqRQmpecn5KZl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJuqq2S i0+ArltmDtA9SgpliTmlQKGAxOJiJX07TBNCQ9x0LWAaI3R9Q4LgeowM0EDCGsaMH4teMRbM 5qs4+estcwPjbe4uRk4OCQETiea3h9kgbDGJC/fWA9lcHEICSxkl9k86ywzhTGSSWNF7ih2k ik1AQ+L7581ACQ4OEQEdies30kFqmAUWMkqcfbiJEaRGWCBL4s/EBiYQm0VAVaL7VSsrSD2v gJvE46YEiGXaEvsaZrJNYORewMiwilEitSC5oDgpPdcoL7Vcrzgxt7g0L10vOT93EyM4Vp5J 72A8vMv9EKMAB6MSD6+Cy69QIdbEsuLK3EOMEhzMSiK8LNlAId6UxMqq1KL8+KLSnNTiQ4ym QPsnMkuJJucD4zivJN7Q2MTMyNLI3NDCyNhcSZxXduWzUCGB9MSS1OzU1ILUIpg+Jg5OqQbG 1vdh65ddLD5p929avYP9R3v+S0FHS1K8tiQysS4xutb3+WmLdeb8IkUN70Vrbnzcc987V7cu diX/t7v6kRM1t+wOChbTcbB0OS616qlRofUm6+12Gm8mXf5dmKGi/XxGfVfawvtpL2b798qJ HBQWeCMieOPxX9bTm3danlhWfzJEarfV/IA1SizFGYmGWsxFxYkA0lVNQasCAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch call runtiem PM function manually if the state is runtime resumed before enter suspend. This case has occurred when wake-up by the resume after entering to suspend during the playback. $ aplay -> runtime_resume() -> suspend() -> resume() In this case, Can occurred an error when enter suspend. -- [ 82.559234] PM: suspend of devices complete after 57.252 msecs [ 82.567978] arizona spi1.0: Failed to read IRQ status: -108 [ 82.567989] arizona spi1.0: Failed to read main IRQ status: -108 [ 82.568027] arizona spi1.0: Failed to read IRQ status: -108 [ 82.568036] arizona spi1.0: Failed to read main IRQ status: -108 .... So, we should call runtime_suspend() manually when enter suspend if the state is runtime resume. Also should call runtime_resume() when wake-up by resume if the state was runtime resume before entering suspend. Signed-off-by: Inha Song --- drivers/mfd/arizona-core.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c index 908c69b..de55706 100644 --- a/drivers/mfd/arizona-core.c +++ b/drivers/mfd/arizona-core.c @@ -683,6 +683,10 @@ static int arizona_suspend(struct device *dev) struct arizona *arizona = dev_get_drvdata(dev); dev_dbg(arizona->dev, "Suspend, disabling IRQ\n"); + + if (!pm_runtime_status_suspended(dev)) + arizona_runtime_suspend(dev); + disable_irq(arizona->irq); return 0; @@ -713,6 +717,10 @@ static int arizona_resume(struct device *dev) struct arizona *arizona = dev_get_drvdata(dev); dev_dbg(arizona->dev, "Late resume, reenabling IRQ\n"); + + if (!pm_runtime_status_suspended(dev)) + arizona_runtime_resume(dev); + enable_irq(arizona->irq); return 0; -- 2.0.0.390.gcb682f8