Received: by 2002:a25:23cc:0:0:0:0:0 with SMTP id j195csp473311ybj; Wed, 6 May 2020 23:42:53 -0700 (PDT) X-Google-Smtp-Source: APiQypLxAmrycPxwj61lTAwG69Rp5ZQTrhQoH7ljfAOOphV/LrHAnnOIWiHIL14q+T2A0tyL8H9X X-Received: by 2002:a17:906:ca14:: with SMTP id jt20mr9798437ejb.233.1588833773653; Wed, 06 May 2020 23:42:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588833773; cv=none; d=google.com; s=arc-20160816; b=y9Dhe8xEwgBevuTBfXHklXY1FNxfrL7Zm88uRK7eMpzWbcF1l75a7i6xeeM4D0+cbV AkNt6f0SZhBdF4Ja0xrRKHqYb40Q+uSmyWvlyBRGPRhX/YJjBH9BT/PN477E9iNiObyB xtqHwZKvXdAWbfTHzYTyftrqBmmRDaQB7jYp9XqLtJNLviAIRl1tpXc1S9PIOQipK+CC vAs0pGcxdcEwvUccrmRPoZ8FELkAcPIIINlDAhbk3PRz4L9oSq42RcViEdx6O/d4oopm XxidVfif59sYVjzqui4joRps+8Y6pGB4pDyzq7PJcLHaW0T1b9TEaDzvgLQsX7XoXKGG 4m5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=3+XwlbQLkvjIt2vgBE4Wd2CBAjsndkRVOMAlLledpyg=; b=QabAm6QrPH47OEKMMloMWGDnScDU64Yx+oizGLkCA2kVG8majtbKAieDG0ht1MO2co gXz8qFCm6ErovZ7I9pYM5KSGHQ9nZe7jXrL5UraHEs5NN/XgYK53d0g+hP5hYvR40S6P Frmy3V/M7nqEIhtMkmsHxoL9fPhrFjLVebl64b+Dy9bStR0YISK+oQv2Pom8mk+YCIDY vnODdknb3N+hTPpOXwKC98mtRav6IEY7BM4piEWgWorrqqWANCEnjnZzRuVkIOPcwIF1 E3IJNB9gMB3cZTg0w3h3XGv/4TGkj1WtKXdY3Hpp2pLzoHpFtwfhajbVcqLjzy+cPhDP m14A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="gx8vRf/a"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d1si2613042ejh.165.2020.05.06.23.42.30; Wed, 06 May 2020 23:42:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="gx8vRf/a"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725949AbgEGGkd (ORCPT + 99 others); Thu, 7 May 2020 02:40:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60500 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725440AbgEGGkd (ORCPT ); Thu, 7 May 2020 02:40:33 -0400 Received: from mail-pj1-x1044.google.com (mail-pj1-x1044.google.com [IPv6:2607:f8b0:4864:20::1044]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3A58DC061A10 for ; Wed, 6 May 2020 23:40:33 -0700 (PDT) Received: by mail-pj1-x1044.google.com with SMTP id mq3so2215655pjb.1 for ; Wed, 06 May 2020 23:40:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=3+XwlbQLkvjIt2vgBE4Wd2CBAjsndkRVOMAlLledpyg=; b=gx8vRf/a6jXgZSXu94oRh01T/B2L43CzfSwh+X5VHNboIi2WOTAtcQ/IISwABLYyUs 3r54CqmrTqGCWV2jqej2wm30UzSLmRl7yxfakTvC8ZXXemYHIRH3NdWqDQlHh0fKTAVW 7icmYSKoxJOmwoTvomX7qU+V/AByItooF6t4RPpTKQ5MQU0M8n0as4dvJkLH9gdXH7lA auFIvvhx/3iojH+vrFCfRl/w7lnnVcY78/N/8Xq/fhfaeJKVbGaymIUlWnRUCZTV3M7U b4sDHu80+pzWH8eC8GP268RJuvjc4z0XAKqZMcHEgEOsTprTDg5O7nEbBF8T5RD2d1cm kiHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=3+XwlbQLkvjIt2vgBE4Wd2CBAjsndkRVOMAlLledpyg=; b=ZjnAV4EpOF+SLIpMiuuPN1pMX2JqnFPOCjB+LYA/Ng9LSWZqomTht1csHMs5vXz656 3qxLbtsUaDl14ewySxitAbchqVd/Z2aaMeFCWUyOq4hR5ACNrv46qjoLmlkyI4OWpMvq d0pjvjeyxBT1Ae0ffZgYruIyREKL65Et2JWSmpNIRjbObP0aGBjrydPeedI/SzHXxJ1b zQUKiseGkZI4ovNyJE/09FP9K+ctgkBjUvwArsvK9mhvLx14O01z2/jEyb86QKCqAJjp TzPbn0OVC5b1UfIcXHAhurirEu8J+YIWYKvj++R66LlMnTLfgfzHlxlmzLYXCz+NKNnC nJiQ== X-Gm-Message-State: AGi0PuaYpwNURu7qnaO1k89T8jqzJvBZj5gJ5gThSbeK6n5K7JQiq/c1 kwr/P0eMz6ZORLuENQ8y2OilvTbttwo= X-Received: by 2002:a17:90a:3aef:: with SMTP id b102mr14449068pjc.177.1588833632686; Wed, 06 May 2020 23:40:32 -0700 (PDT) Received: from sh03840pcu.spreadtrum.com ([117.18.48.82]) by smtp.gmail.com with ESMTPSA id q21sm3870693pfg.131.2020.05.06.23.40.30 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 May 2020 23:40:31 -0700 (PDT) From: Baolin Wang To: lee.jones@linaro.org Cc: orsonzhai@gmail.com, zhang.lyra@gmail.com, baolin.wang7@gmail.com, linux-kernel@vger.kernel.org Subject: [PATCH] mfd: sprd: Add wakeup capability for PMIC irq Date: Thu, 7 May 2020 14:40:24 +0800 Message-Id: <7361f34d712b027f0cd85dc36ee158f9b6076cef.1588833125.git.baolin.wang7@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When changing to use suspend-to-idle to save power, the PMIC irq can not wakeup the system due to lack of wakeup capability, which will cause the sub-irqs (such as power key) of the PMIC can not wake up the system. Thus we can add the wakeup capability for PMIC irq to solve this issue, as well as removing the IRQF_NO_SUSPEND flag to allow PMIC irq to be a wakeup source. Reported-by: Chunyan Zhang Signed-off-by: Baolin Wang --- drivers/mfd/sprd-sc27xx-spi.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/sprd-sc27xx-spi.c b/drivers/mfd/sprd-sc27xx-spi.c index ebdf2f1..3064a60 100644 --- a/drivers/mfd/sprd-sc27xx-spi.c +++ b/drivers/mfd/sprd-sc27xx-spi.c @@ -256,7 +256,7 @@ static int sprd_pmic_probe(struct spi_device *spi) } ret = devm_regmap_add_irq_chip(&spi->dev, ddata->regmap, ddata->irq, - IRQF_ONESHOT | IRQF_NO_SUSPEND, 0, + IRQF_ONESHOT, 0, &ddata->irq_chip, &ddata->irq_data); if (ret) { dev_err(&spi->dev, "Failed to add PMIC irq chip %d\n", ret); @@ -272,9 +272,36 @@ static int sprd_pmic_probe(struct spi_device *spi) return ret; } + device_init_wakeup(&spi->dev, 1); return 0; } +#ifdef CONFIG_PM_SLEEP +static int sprd_pmic_suspend(struct device *dev) +{ + struct spi_device *spi = to_spi_device(dev); + struct sprd_pmic *ddata = spi_get_drvdata(spi); + + if (device_may_wakeup(dev)) + enable_irq_wake(ddata->irq); + + return 0; +} + +static int sprd_pmic_resume(struct device *dev) +{ + struct spi_device *spi = to_spi_device(dev); + struct sprd_pmic *ddata = spi_get_drvdata(spi); + + if (device_may_wakeup(dev)) + disable_irq_wake(ddata->irq); + + return 0; +} +#endif + +static SIMPLE_DEV_PM_OPS(sprd_pmic_pm_ops, sprd_pmic_suspend, sprd_pmic_resume); + static const struct of_device_id sprd_pmic_match[] = { { .compatible = "sprd,sc2731", .data = &sc2731_data }, {}, @@ -286,6 +313,7 @@ static int sprd_pmic_probe(struct spi_device *spi) .name = "sc27xx-pmic", .bus = &spi_bus_type, .of_match_table = sprd_pmic_match, + .pm = &sprd_pmic_pm_ops, }, .probe = sprd_pmic_probe, }; -- 1.9.1