From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f178.google.com (mail-dy1-f178.google.com [74.125.82.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 48B7E379EFE for ; Mon, 11 May 2026 20:06:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778529991; cv=none; b=pDzwVaLagslfohJ2+DuDuOCHLNiuzqOB4l9U5+TiZboy4LrmrMxxu6oFMFKTOtTA9u7iqxhd6/zPOGRZ4ePu84rdrl7c8yuxW8GAKHHsDGg4OOhmKWm707bR2bXi152SQ/k2JReuXXQM+vI99ArkonosSiwHzlztDSZpGxxg3HM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778529991; c=relaxed/simple; bh=9cnCXAufsosxjIZlhO5qAW+KUJEicaWmss7ww0qWQ2g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rg+f0UYOrFEyj6fhErmpzTPPVCnsle6cJjpnFy2GSQxr8nNBTP5p4jj2wIPcVfE9GNad268mQ0A8IOaaOAsWjHiPtrfnemSIP1y0D7u5+XIB/T0hXl+fM9xjQU5rj9OYBWHixLvq2LrifgyR7BowLjrERAptUh+pND5Xp58FJeQ= 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=MgdGWHD5; arc=none smtp.client-ip=74.125.82.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="MgdGWHD5" Received: by mail-dy1-f178.google.com with SMTP id 5a478bee46e88-2ef2a1cc06dso8051707eec.0 for ; Mon, 11 May 2026 13:06:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wkennington-com.20251104.gappssmtp.com; s=20251104; t=1778529989; x=1779134789; 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=HhNfRO8ZbDuzpCSUfRVvSXinww41Sv3w98mHeEXQDv4=; b=MgdGWHD5LGWKMs7aN8dbgJQ5Fp+zW3NnDvhUtCa7KTGRdI4RhjM/jhJiTw9K1/sUan IFSpkfCoSAMUraEF6he+Q4Ibg4wgAjLyynj1lAYcEZ5FfvQ4rlF0PhVnKc5p01TO3jFJ NkQYfET9T9Q0f9cD16HxfMXwZNk2PVNn8SXPmmrTuJBm/44RZnq8uBF3BVMbzTxHqo4C DPNcAiOyTZIe3DrDBgB6xD6z7yjmbtQegdzHq4tPAs6fj9lK11o+j5mOfCG/FaTjIj8y k8G/nxXf3kZfDN/Wa78zaEXg8ieECuNjTfsWO7dW92bn4CUS9aV0uhHv9geI0DKcFhts 392w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778529989; x=1779134789; 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=HhNfRO8ZbDuzpCSUfRVvSXinww41Sv3w98mHeEXQDv4=; b=O3gO24NBNqqQso9tubXlZ69ZI/RCC5VXaGNRhicSUgdrKKQrHcwgjIOc/GzEZYlt0w VdX/Dbj1cIQyNbZOxSXFXsAVNx8W5bLGAx40bPfevEgHyvlrlvybP5gTdaAS262aaVqy 9uGES+ScPQjalZeLsLXPhI2lE4irbKeCiRtAsHOvELxelru6yc+tLOLzwOkgIzWd5TsH X9zBILZ3liW/POj8c6YLRm3sH4daMs/odlGWd7LZbUwHIlby7uoBSJUxpgITGVBWgtwW sfQtRXKVUwuEebgDOUZ5rGN7loIZQ+RQWGggkpHMHkyQwO29ewM9rYso0qgBIBIXqQfr Xolw== X-Forwarded-Encrypted: i=1; AFNElJ88pmQkMhSoVZi87x4OSgnh7H4wB5IHG6IKyzQGs1iRJd/QEA+3pSsKxQIqgUKSDb8ATMt2GKU4SqHTMxc=@vger.kernel.org X-Gm-Message-State: AOJu0YylFi1PlVS9hhZ6bD2GS+dIqfS5B1/7m9mKvDdOLeAC80i84Jzk a7QRvr1lYZ9V+mW1aG/MOVqbcZ18ggs5kqC+1JEjarOG9S9sbIqxpTLCwC+jgY84L09Ybu/onik PYM/AsoU= X-Gm-Gg: Acq92OHj/5hpoZrHWK8WvSUIq+D/AESx1q9+nbYmY4nb3Yf1OubvV9ZioZxfa5R3sTu nvDoI7TRs/vg7Pl58npN7XV9YRYM+i+37wSwo0+8NNAHOl5paH45IP6fR+RafWU6NgmZgABBxSA oQv9ZM1bzemWqa+75kQouFKPmRoNWsBHXhsnR67bXLMcvN1B8NhnIWLzg+Re79xbi/TJBgmKcwN Jg9YINW29YhUTU/gdoohaRqgFszSYPGN6+NOcJCGc+vzC2krM+9ZW8PP5dtcSzZfHVuSHUboATL EnUHpa0rMAdjWWvjX9DYOh0Ed3A10+OSK7JCr0UUs/p9xRsl1U+ScRew4XyPe3Yc/9sqqRrZxw4 CW6Y60Y/2ia5vHO8Qih0r0p1ORDqKEXUxAoet97NhSSMYpqfAMNr4uZ3QWSdtrhkIeZdTJmLkmR wDeaDI1NoyN5KTrqm894SySRPCY344aZFC3Hq4J+V1MopVFUIocr7feQE3FSmQsDCN0FQo6pBvX HhLXlcre+FJ1FYohRrgbwPR0Q== X-Received: by 2002:a05:693c:3b0b:b0:2f2:b544:2fd4 with SMTP id 5a478bee46e88-2fb4c3e4291mr5469098eec.34.1778529989053; Mon, 11 May 2026 13:06:29 -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 5a478bee46e88-2f888c469b6sm15066942eec.24.2026.05.11.13.06.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 13:06:28 -0700 (PDT) From: "William A. Kennington III" Date: Mon, 11 May 2026 20:06:26 +0000 Subject: [PATCH v5 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: <20260511-dw-i2c-v5-1-6c382e1b5de6@wkennington.com> References: <20260511-dw-i2c-v5-0-6c382e1b5de6@wkennington.com> In-Reply-To: <20260511-dw-i2c-v5-0-6c382e1b5de6@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 Reviewed-by: Andy Shevchenko --- 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..ef618d3e1ace 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. Controller 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