From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (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 4DA823B2FF9 for ; Wed, 27 May 2026 20:10:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779912616; cv=none; b=fQnHFAAAYkKwlSFLN78dpk5XYgaMPncF5l+U8GdRGRPiOPkkr2yyGh3OsA2IL9UnJWPBKGu1n1awPb0uebUs0b+U2iu6Qm5NT2M/24QiDLUH5Hc/EHuFMBtNWYTHD3C7iIbT8Kyg1rU0z5S47GTJqtnexHSAA7hedafZO0Q/k9o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779912616; c=relaxed/simple; bh=BR2iveUU1nhkZu5eEnbrvTBIk+kDYBBkoMkU+yko3V8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f7B6QRMZgVFJ72vAQfAnmSHshlUCNu2vfD1xS0TBju/ohg0PREYAHqHTXFFhotW5yXXdgUBb8xjwRuVNEVZ2/pZ22Th8PZfbZsju0Xjg8zXME7LwEgyPSUiiaBQYwL8un5qKngShFT4t4ckqwT0UncDOT5UIfoPK0S3Revy3zM8= 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=gTy3LY9m; arc=none smtp.client-ip=209.85.216.41 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="gTy3LY9m" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-36ac67f489aso2823415a91.0 for ; Wed, 27 May 2026 13:10:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wkennington-com.20251104.gappssmtp.com; s=20251104; t=1779912614; x=1780517414; 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=OikO7LECaMFgoDK/X1/jiTfHTUrsVlBaCWwcQEZ7NcE=; b=gTy3LY9mavWfUMpicUKxDyRJfte3wm2AevvpArNVRNeZPn0LIbQnoBLBncu/TmvcZ9 8pwSCr9A25LVYzAItCIK+1M62L9+Je7uoL8aVTokivVmwwbCtdlh6CCtdnZExx4+O+nE 4oO3RUXpuQ+FEvq7CaNlVFzHSAU0LIEwUuQkEnHPAWQHnmc8dIieaH4sDPQuua/8mo6P /tzR4omWuIsebc1QhOaAcihPWvO6/SHLUjXqsjZTv9gNaULDUYHaVWfKBpzgcyTmhrwc 9PiK+4QEDmN36mnAUkB9Vmohwmhv9xgjkSAOS8N89FeNnpY8qz+ERZafKSZbkqxK9Y+4 qpjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779912614; x=1780517414; 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=OikO7LECaMFgoDK/X1/jiTfHTUrsVlBaCWwcQEZ7NcE=; b=NM+O6HuDn4yVlRNwstb5UVd+11NhLkkkZ1k2mXFefO8BzKgVq7p+a0+O5QWE4Fs8WZ CuzvsjNvGTOdvsSJ4aivmIv3qM73xwAkSjT0xvCDZ+GmEKsg5VBbyjFu8AH8VCKxrRZI ifkisk61YRf+flUB7gL/zv5xLEjSGUKhTXLgGqQ8WuQ2f+NJoyB8IVn3q0qKZNYQScEj 3bkms6jQokD22e0z23k+O3X80iwbMF89bxyROhyeEBqfq6isMPbMHiO0yGvGfO4S7zN+ jfSagHOJhtMfAWPiEZFyN32kYF2BSjYmQFi0LqizILcgdSgfSofmmqB8oxfGe6Rtp+fr 2Ucw== X-Forwarded-Encrypted: i=1; AFNElJ8E2CoFDaX2oPwfIJTb8H5f+8Y9muzy9ZJWNKOgitwhol2DmJFGHs1eXCzjDexjExXwrxRB1eZ87dWQ0Ec=@vger.kernel.org X-Gm-Message-State: AOJu0YwlnYNuxwSHOdN8xfxrIoG0oKoBuVc7YhJqhbiOWtYV9GwusXxl 7DRc6Qr18CiBPmrBowR/a7qg7+6Nw2YeHav4J3zKSBCF7O0VBpQXmXA4K6HgeMS+fWlgL5SHaWn QL6E/Gtw= X-Gm-Gg: Acq92OHlThkLr8hKrkIk9qtQT23SZ83q7m5oQziHa5sfkk2MJ10y6/NiWYfR1mrUBkW ACggwdPSZanqF/ST5qZfVUb2uQBEAwpT0KtYb3rNvosQOeNizx0fnRVaF1mI8XQphJ6dajksl0V jOCd7ngiO2na5jTzeXr0UVNGex0Pop/Qn5UxgmR/P65Omr5elN9xw9N1jptGGyatYpG7ZGWU6yG wClOmr/RkEOaJzvWqJkoinAY7B2NGtFob3ue7uOGAOWM5SYMUF3AWlnlFogscErB/LOOaBJBmJG qnLa2NCtNLFRubz4kUPBnKyCLojXoPEB5Wd9TO10bXEPUQrcphDzhacA0SyoCgUkwvNc5l+i7BD V3+LhwtybabGAY6mZkXWGMBtiraKEYCxxaJOQvcTBAwJkbho2Iro4aLIej4SUjO6kLhxrVSrDOv tY0bicQRVYMvOXTLQgMSNkOHApC1Ydmtf2BfsGNupCoA0TlS1rbsimtvFXwJdIvTgqXdr4Sgvy0 TbV6G/yKvMCf6x6ZxYYjGg= X-Received: by 2002:a17:90b:4a89:b0:36a:8254:8eb1 with SMTP id 98e67ed59e1d1-36a82549048mr15765525a91.6.1779912613626; Wed, 27 May 2026 13:10:13 -0700 (PDT) Received: from wakbuild.c.googlers.com (27.117.125.34.bc.googleusercontent.com. [34.125.117.27]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a71d9416csm21875253a91.3.2026.05.27.13.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 May 2026 13:10:13 -0700 (PDT) From: "William A. Kennington III" Date: Wed, 27 May 2026 20:09:49 +0000 Subject: [PATCH RESEND 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: <20260527-dw-i2c-v5-1-3483057f8d67@wkennington.com> References: <20260527-dw-i2c-v5-0-3483057f8d67@wkennington.com> In-Reply-To: <20260527-dw-i2c-v5-0-3483057f8d67@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.794.g4f17f83d09-goog