From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 557C530DD00 for ; Mon, 4 May 2026 20:15:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925706; cv=none; b=aed6TBnem1FU7LG3Q8wQyN5OMFlJ8okoluzD3zjisMp41Smkl+EALvQKYy9wEUA5kfBHKndMQcSYSLJUSVBUKxk7Wr5Pv5eBCaCNBraWItyBGmXy3kyWXUF4myxk68Vb/yul/KW24KwqTmiLQxOKmhf6lXVrpZ/wSFsh/yo/+qs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925706; c=relaxed/simple; bh=R5JgCdy/DB1Ih4Sq3LY6luPtR7ymrleLMrLZ1TOIim8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HS1gN+Q5w3SaJZXn0yrd79gdNcYZglFY8iO4etQ5sbjD/gbfmnCud6aAcTS3rQ+06QQkMMVTJ9RoXl9C3Vyo4WWW7nazTERch/7F4KN86hHJztH4sH6zPuS5kRwnko+nsXSxl11hU24qXUTzhjXxEmMKPx3XDZUnv817SpWtWTc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com; spf=none smtp.mailfrom=wkennington.com; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b=kvJxzkSU; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=wkennington.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b="kvJxzkSU" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-364d72f2986so3090067a91.3 for ; Mon, 04 May 2026 13:15:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wkennington-com.20251104.gappssmtp.com; s=20251104; t=1777925705; x=1778530505; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=U7Frq7y1uLHJifdiiUIm1aT5EQRSrBV8yFq1fPIMTZ0=; b=kvJxzkSUyqaR3AzlLoD1SsN93VvxgnulPH4jrBDYvwly5mhDxk0Pz+cJx31R2flpO0 VntItqrgHN5XdbGB6HtR0jKcX1U8fq7ouavnCLnx+E5VXjqmKBCiY6Q6qTUPM+KY9BLk 6KgY+wNVB8E6DCMS6FMvxIwOJVJmVdRoocvvyEtjZ8EnMS+sJDtDdO/3ENgYqJJBMWyZ xiFTmoNdIAz/dE2liKntCiPtJcwJ+AUDtbvVI8U3ueRc/03yjwfSPvISgBe/UyPH3FWw qYHpFNlNtVLWIfqwJPiDRB7oBgWSOwDAq/5pG9wOK2hgH6jmVVZUxWonTkPU5bM/WT1P 8ZYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777925705; x=1778530505; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=U7Frq7y1uLHJifdiiUIm1aT5EQRSrBV8yFq1fPIMTZ0=; b=EmOQ7wEel+m0o5yhmZu0KJoOEe6gMEHNpZXNVZVpjZD5GAXws5jzYRFvUboaHbw0AK Mr189wWSMLAxbCrAq5SWETGJngQLOh/y+x2xwQHq81TBq/SBF6TOu9JnfUl4hR2Mcd3y yUTrttma1PJTCDAf/qFdKmBorLsJ1RDnlCFyYljLbj0Qqkg8pjE6zWTtunrB//k/2E61 n97hpC7WqQLwARzc8EMqDLvO1oUkvseInN31TATYnV1Kk7p8UV1dmSQA74SHmZizysW7 vxBk3HqjLwlwr4ULTY/lWBI2DT1+hXxqD6NZ17MN2oijsbcDYlRiQEnPnbbCTzR4gOiT AnQQ== X-Forwarded-Encrypted: i=1; AFNElJ+eLo3Gc99r3cgMPomMuWZ3wo1oKgdmaNBXgA98F2j/SsC4dEze9BEnloL/Fcx3Ctjs2dvjDuSTZpa5lgg=@vger.kernel.org X-Gm-Message-State: AOJu0YxWzYZRJTRBANMOvvBBMC6BOk0FN2yd1FbLsi7DfjVWeS79Ph3M 5yNwKKlhNL3sooDbivlLe7pjc40MiIWXwUmsOsfOXdtn4Aep+nrErdl8u5yokNRQd1I= X-Gm-Gg: AeBDieuWVcHq/gHCVZoqBp/CaSC+uATQ9JPtnB+7BTwvofuHdNawdPVoHZzCo+jrVOQ mvwhaP68QTwWuHoarhcgP9uNdY87YK2jy8fIes2iADf1k0oXTes9NLc9IFKSfI8xo0AVjlfjmo7 hs1NTr87lSwDKMImHnP5XemNbyGRcr0UDjrM7I0Hoaru0MYp+oGpJkYgy/UWOCNB2mDE6YA65yG XLzNeXPf1qPLKO2h/JnDxZdefUg1bri8l+qrx95iGGbLSxIqXaCgFmINRch8SIh28cYwOQiJJbW rusciiYJzu7Pn8ChhoF4TZPCMqs/+eVZqQiENzhxcowSqKN6qwa8NrfhVM42a+APi5BUg8spSYn TeNgMZVuucjpZ6ETB0UBZO07JCrHwdTCCcyeaQ5UdhrHo/75LJs2M+RWGRU/ar9jrVVnhDHxHCl jSC6SdKPZ9VgYv16AdISEhH94zNgtsDES8LO596Ura2+puOC1HPeUnZI1b7PhCkr/NsBOhK1s9G iQMYh9nDhaf3jC00StahoTF0g== X-Received: by 2002:a17:90b:35cf:b0:35f:b7f5:9cd with SMTP id 98e67ed59e1d1-3650cec0ce2mr11560093a91.20.1777925704571; Mon, 04 May 2026 13:15:04 -0700 (PDT) Received: from wakbuild.c.googlers.com (123.143.125.34.bc.googleusercontent.com. [34.125.143.123]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-364bdf2aa41sm20568593a91.4.2026.05.04.13.15.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:15:04 -0700 (PDT) From: "William A. Kennington III" Date: Mon, 04 May 2026 20:15:02 +0000 Subject: [PATCH v3 1/4] i2c: designware: Introduce shutdown exported function Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260504-dw-i2c-v3-1-57e56135d602@wkennington.com> References: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> In-Reply-To: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> To: Mika Westerberg , Andy Shevchenko , Jan Dabros , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, "William A. Kennington III" X-Mailer: b4 0.14.3 Introduce an exported shutdown function to safely shutdown the DesignWare I2C controller. This shutdown hook gracefully sets the slave disable bit before disabling the controller. This guarantees that any incoming requests from the master are immediately NACKed during shutdown, preventing the bus from hanging. Signed-off-by: William A. Kennington III --- drivers/i2c/busses/i2c-designware-common.c | 24 ++++++++++++++++++++++++ drivers/i2c/busses/i2c-designware-core.h | 1 + 2 files changed, 25 insertions(+) diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c index 4dc57fd56170..0703fb29038c 100644 --- a/drivers/i2c/busses/i2c-designware-common.c +++ b/drivers/i2c/busses/i2c-designware-common.c @@ -1028,5 +1028,29 @@ EXPORT_GPL_DEV_PM_OPS(i2c_dw_dev_pm_ops) = { RUNTIME_PM_OPS(i2c_dw_runtime_suspend, i2c_dw_runtime_resume, NULL) }; +void i2c_dw_shutdown(struct dw_i2c_dev *dev) +{ + unsigned int con; + + /* + * We only need to handle shutdown for slave mode to ensure + * we NACK any incoming master requests. Master mode cleanup + * is handled after each transfer in i2c_dw_xfer. + */ + if (dev->mode != DW_IC_SLAVE) + return; + + /* + * To quickly NACK the master during shutdown, we set the slave + * disable bit while the controller is still enabled. + */ + regmap_read(dev->map, DW_IC_CON, &con); + con |= DW_IC_CON_SLAVE_DISABLE; + regmap_write(dev->map, DW_IC_CON, con); + + i2c_dw_disable(dev); +} +EXPORT_SYMBOL_GPL(i2c_dw_shutdown); + MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter core"); MODULE_LICENSE("GPL"); diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h index 9d8d104cc391..8b422249acbd 100644 --- a/drivers/i2c/busses/i2c-designware-core.h +++ b/drivers/i2c/busses/i2c-designware-core.h @@ -393,6 +393,7 @@ static inline void __i2c_dw_read_intr_mask(struct dw_i2c_dev *dev, void __i2c_dw_disable(struct dw_i2c_dev *dev); void i2c_dw_disable(struct dw_i2c_dev *dev); +void i2c_dw_shutdown(struct dw_i2c_dev *dev); extern void i2c_dw_configure_master(struct dw_i2c_dev *dev); extern int i2c_dw_probe_master(struct dw_i2c_dev *dev); -- 2.54.0.545.g6539524ca2-goog