Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp665419yba; Wed, 24 Apr 2019 07:42:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqwcZ0NF5YeVg3BZvcxPo3dXqzOKLFjVbdEVJcXnFqQ2O20kGKS0twLVLZXueoWTAE7HrcCs X-Received: by 2002:a62:5185:: with SMTP id f127mr33976362pfb.199.1556116925613; Wed, 24 Apr 2019 07:42:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556116925; cv=none; d=google.com; s=arc-20160816; b=qjua/o0OOhxfkpXT2GelR6CcaLM8Bibcs5wKj/WZjy1Mp73nFmqSKlkV2/p8LUQ6g/ L/CxhjPOpunB3fZln5XMd958wRFFwmG8MNq3CZ8COTShMbux72HiKRESRWZ82xmE4fWh YAEJjHTnqRuHWZIN3//Raj2Fnj4roL8hMbYdWNb9OaonDB4sAMWA7FaHnxu8mSwsVpuR NxZehWIBVes5X+9Y6dQx0WgiyV22gDz5RdzxSmCY+otBngbTakxxuljXT8BUy2ZFviYc 3UMmrhDigvnG6eZnI5pMPXt/4cqkxfOvx4+LMyI72NaKEpu5sS4+AbHwym07xKLtKpG6 j58A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=hX3lVxW5ISIy3gcc22WR8EoVmjeLEAwn6J5p9tJeqak=; b=kqs/VSr8HviEx+VVSRV1YRySozRW7AeKIqIgrkHGQe/Si+7NehlGp6WxHVic8CfDzB xo6UBkEkjmNTCyI+zJDoTwtlDKWXDVwq/JMsFp4GxrcsgsdrssXGK/mILDGwvAT1VUkt kuHhWzDi3iDf26VUxToBDS8xuwaX6c+rwysLwC48DjY99y08JzNWUPERgdPSdTfyIzCV 0iutl5Q0yE7U2b8XqL1r3n5UF+PHIT8Ydrne8JUkN6x0GqxnanDq0Y7QlIjdlrjQcVPt 08TQlz4m567ShGP2T0EERrXWo7moNPT7/BHj52SPeL2TAeGGRfWPJ6aoRETNGjAG305c t3XQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=NUUSwYsU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j7si18739307plk.221.2019.04.24.07.41.50; Wed, 24 Apr 2019 07:42:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=NUUSwYsU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731545AbfDXOiy (ORCPT + 99 others); Wed, 24 Apr 2019 10:38:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:38962 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731292AbfDXOfJ (ORCPT ); Wed, 24 Apr 2019 10:35:09 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 259682089F; Wed, 24 Apr 2019 14:35:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556116508; bh=6qAI7fJ7e2F0lJsxg6+VSFVCrcR0c9EDtMrck61P3eE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NUUSwYsUVyajP0esFDwI46qA7ISJc7zxotvrMd4wuX/4zQswbez37QGvSVRhOFk8f FyHODQTSWj90OGPkL71CmoPt5R4rCQlSXRxOprQLO1ie85fHCD6RixGoq1hdNdNzJ4 HJGC869jcrqi7jcwkxdZBumq0ezEGudlDLfPGFUQ= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Andreas Kemnade , Lee Jones , Sasha Levin , linux-omap@vger.kernel.org Subject: [PATCH AUTOSEL 5.0 35/66] mfd: twl-core: Disable IRQ while suspended Date: Wed, 24 Apr 2019 10:33:09 -0400 Message-Id: <20190424143341.27665-35-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190424143341.27665-1-sashal@kernel.org> References: <20190424143341.27665-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andreas Kemnade [ Upstream commit 20bb907f7dc82ecc9e135ad7067ac7eb69c81222 ] Since commit 6e2bd956936 ("i2c: omap: Use noirq system sleep pm ops to idle device for suspend") on gta04 we have handle_twl4030_pih() called in situations where pm_runtime_get() in i2c-omap.c returns -EACCES. [ 86.474365] Freezing remaining freezable tasks ... (elapsed 0.002 seconds) done. [ 86.485473] printk: Suspending console(s) (use no_console_suspend to debug) [ 86.555572] Disabling non-boot CPUs ... [ 86.555664] Successfully put all powerdomains to target state [ 86.563720] twl: Read failed (mod 1, reg 0x01 count 1) [ 86.563751] twl4030: I2C error -13 reading PIH ISR [ 86.563812] twl: Read failed (mod 1, reg 0x01 count 1) [ 86.563812] twl4030: I2C error -13 reading PIH ISR [ 86.563873] twl: Read failed (mod 1, reg 0x01 count 1) [ 86.563903] twl4030: I2C error -13 reading PIH ISR This happens when we wakeup via something behing twl4030 (powerbutton or rtc alarm). This goes on for minutes until the system is finally resumed. Disable the irq on suspend and enable it on resume to avoid having i2c access problems when the irq registers are checked. Fixes: 6e2bd956936 ("i2c: omap: Use noirq system sleep pm ops to idle device for suspend") Signed-off-by: Andreas Kemnade Tested-by: Tony Lindgren Signed-off-by: Lee Jones Signed-off-by: Sasha Levin (Microsoft) --- drivers/mfd/twl-core.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c index 299016bc46d9..104477b512a2 100644 --- a/drivers/mfd/twl-core.c +++ b/drivers/mfd/twl-core.c @@ -1245,6 +1245,28 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id) return status; } +static int __maybe_unused twl_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + + if (client->irq) + disable_irq(client->irq); + + return 0; +} + +static int __maybe_unused twl_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + + if (client->irq) + enable_irq(client->irq); + + return 0; +} + +static SIMPLE_DEV_PM_OPS(twl_dev_pm_ops, twl_suspend, twl_resume); + static const struct i2c_device_id twl_ids[] = { { "twl4030", TWL4030_VAUX2 }, /* "Triton 2" */ { "twl5030", 0 }, /* T2 updated */ @@ -1262,6 +1284,7 @@ static const struct i2c_device_id twl_ids[] = { /* One Client Driver , 4 Clients */ static struct i2c_driver twl_driver = { .driver.name = DRIVER_NAME, + .driver.pm = &twl_dev_pm_ops, .id_table = twl_ids, .probe = twl_probe, .remove = twl_remove, -- 2.19.1