From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) (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 8707734BA42 for ; Thu, 7 May 2026 20:05:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778184325; cv=none; b=fnc77+ChS8gtImnAN+KrKr+34tmaTfLyv+XzwUSlzblD86B7aHsnuvMCZXtOO2b6VRXmD/yuaNJSzkxTRd/9grWXTeZTImj9iaBSk4uCSkPuNTYkkrob6n+TemSWcFWpWEgyMgkUuuzDVphuwlGw5nNIpPI0wpJ6/hFQTgNhakE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778184325; c=relaxed/simple; bh=xdMaato8TzQhG7sEcha36250OMNuC2a38m+gB16kRFU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F3KqDnbRlisQRy+POOV5indS7jGPxM+PFbpSsgpt92T8B6dW/ParonAkZ4uo0DlbhfrzpghPbzLxjm/OVMaJyx9k03fkwGb/at8akp8ctALIXV7iPzp9egfPYTBp+YSj5yCBWAIYh+l3tDnCZD1V5r5R/MtaiAktFvvQLlQKlig= 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=S2f3MXYk; arc=none smtp.client-ip=209.85.215.178 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="S2f3MXYk" Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-c8026aa4d53so796997a12.3 for ; Thu, 07 May 2026 13:05:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wkennington-com.20251104.gappssmtp.com; s=20251104; t=1778184324; x=1778789124; 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=Dbh8YwmHjgZJuVNCq9Cmjprrm6eEx/Q8kVEN8sLgRu4=; b=S2f3MXYkmsULTzHHrDWjRXAQe57gPyh+CxofFXbwX5F3xigvl8lacDyDy/HaAolYu8 yYb93yqwLL2CV6OUgBUqX4Vx/nIaNVQH0jI+csXVBdK0JaPKhtebirOhwAfV03x+o9OS Cf6Fvpf/qaftpAFfsvsdcyH9C0XLaiV/9n/CsH9EhhCkp1c1dz3HVK2FKTcMDGZM0gMg d0fI+B4Zl20sWzVJj+vXeaCgVyc/5DpRWd8z8XbjJHk6mysh2wNhvqWN0/xvpP/BZ8oi bmjdC+Wyjpwt7l5EsEDlZunK1S9Sj5K9bs9cjoDHzFXG2RW+0zdEfLMgvhI2230o5bH0 wQUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778184324; x=1778789124; 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=Dbh8YwmHjgZJuVNCq9Cmjprrm6eEx/Q8kVEN8sLgRu4=; b=Gn18hrl+EpDtubByP+jKpDef5RWd+bd0+3xMkAHxUz4Rn0On3U0Ysec9Flri9dNUaz F9REKaMxB/Gm1P/OSv3o0hpXAiCP8iePVfTAmVVfp5NcSlQgWQZCQovUUedN+yrmJOmF GARes2MXXByuYRC2x1TUlFzMdEA1+/J6sZvgUsCERSU3rfvAMkAQRJLyEElYKxrUv1RN Qn7HEKJZTXRdf2yvrxuJWkSpFSx4rRkrMU7ju9i7BCt96ULb8W5OPyZ3USFFWQjtXHdU BVwdjHinCUX+EuJbM/N03QPBSSrH272idwoeZB4JkxKAE4tebbApiXtd9xCKRjF143Ty GUVA== X-Forwarded-Encrypted: i=1; AFNElJ9tHq6vN+RIjMLwqyeeVh0xmxwglUEd7zI7WeLFrWHRF95jg0Z0q12z12QxpomFDYvIuHxBWyEgRkXcsMQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxVudEnW8B/dC0KQQ0azHLvxmD+OZLoyWDRZZWKXE2NWUR3mxt6 kSK5FWn67TBxx6UBEyPMcZFKiT/irEUEt95OXqrCuIQ3r6PPrD931+XohZEW/eAeKH4= X-Gm-Gg: AeBDietOugFSL9fRa5pC9GTvy+G3gynWT/htjD283GQSaO9+Jc+wSnVopIv//ZA3xg1 YYCuOkeild57a8lMnX6J9XDUymPAggQ75KffJ4PzOj0fpsWS6qc+x4Ggi7rpHHh0YQ/+j8CO2fE s52JQDlXTyyHzm4VXFaGdZCRgRx5ust1cPZQUHF3HNklj2RER1IYfL1Hhd+EHitD6Cex9qjSWj1 Eam6J+23N4r0ORD0/qiew6mKz8EzIwvK/mwWxOyHr9iuOZZTeTFEdurBx64BvFCDVFpNS0tHtP7 m7elXflErzOIyLPEUDrfuMdJuk354+gda1jEikfvyPCPe4hxbQ9Qr0aIUQeDtmqCbtWwUW/RR8j epFuMbTgB2tkW8wAmdQz4FFMSfq5OrZHbxLSdB+o5Sg5UmYLDbo0g5yBToZGXtBz8g4DrGmc4Cu WZfOqlLoOp9WiNwhtBULoBgwDoaQQaOy+mbkxv1sgM5LqCbrPEIzsvlYE2Qe89v1Tdq6rVCNp2I JJ2JkVsuxruQaI= X-Received: by 2002:a05:6a21:6d88:b0:39f:3efb:e888 with SMTP id adf61e73a8af0-3aa5a983571mr10254508637.25.1778184323838; Thu, 07 May 2026 13:05:23 -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 41be03b00d2f7-c8263ff29c2sm443200a12.12.2026.05.07.13.05.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 May 2026 13:05:23 -0700 (PDT) From: "William A. Kennington III" Date: Thu, 07 May 2026 20:05:15 +0000 Subject: [PATCH v4 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: <20260507-dw-i2c-v4-1-9a447b23bfdf@wkennington.com> References: <20260507-dw-i2c-v4-0-9a447b23bfdf@wkennington.com> In-Reply-To: <20260507-dw-i2c-v4-0-9a447b23bfdf@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 target disable bit before disabling the controller. This guarantees that any incoming requests from the controller 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..886f4dad166a 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 target mode to ensure + * we NACK any incoming controller requests. Master mode cleanup + * is handled after each transfer in i2c_dw_xfer(). + */ + if (dev->mode != DW_IC_SLAVE) + return; + + /* + * To quickly NACK the controller during shutdown, we set the target + * 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..c71aa2dd368d 100644 --- a/drivers/i2c/busses/i2c-designware-core.h +++ b/drivers/i2c/busses/i2c-designware-core.h @@ -417,6 +417,7 @@ static inline void i2c_dw_configure(struct dw_i2c_dev *dev) int i2c_dw_probe(struct dw_i2c_dev *dev); int i2c_dw_init(struct dw_i2c_dev *dev); +void i2c_dw_shutdown(struct dw_i2c_dev *dev); void i2c_dw_set_mode(struct dw_i2c_dev *dev, int mode); #if IS_ENABLED(CONFIG_I2C_DESIGNWARE_BAYTRAIL) -- 2.54.0.563.g4f69b47b94-goog