From patchwork Tue Apr 5 12:16:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Whitchurch X-Patchwork-Id: 558617 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C972EC4332F for ; Tue, 5 Apr 2022 14:07:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234607AbiDEOIm (ORCPT ); Tue, 5 Apr 2022 10:08:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53350 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380267AbiDENOA (ORCPT ); Tue, 5 Apr 2022 09:14:00 -0400 Received: from smtp2.axis.com (smtp2.axis.com [195.60.68.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 307D312343F; Tue, 5 Apr 2022 05:16:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axis.com; q=dns/txt; s=axis-central1; t=1649160997; x=1680696997; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IQbFdsIycaKMPC2WtqAU6bZcJ0n+YEHMU/Uu+zlGT7I=; b=ae7dSkD7GoCDc2NTaNCq3XgDrTcm4p7/80S49gpON3AX+mYkUIK84gnr jnK5D2akK5XnMwxmSBJSt231FFA755yUKQmY1aQUTnPi9SeTtJHyHSeH6 oGk/xBHyVyz1j12hQ7Xp41SzTa4gGfwUDk4nfaHC+xxEfhzwM2A7ypP6T 6wdpGzTOU+WO5QoCummNdb2bJR8dtJBVNjeRYBNMFuJ6VEpDF8P/yP8We qLCVY+WiFMpZq2DdG73QIP4oDnbwP9A56lVtoP0WpqP3jcnKcndsP7d01 R4wu1f2NXr88o+GsfnvzlQRc6npEroX8psnY3nyn8gyebdVTuznsxNq+T Q==; From: Vincent Whitchurch To: CC: , Vincent Whitchurch , , , , , Subject: [PATCH 1/2] i2c: add binding to prevent device detection Date: Tue, 5 Apr 2022 14:16:26 +0200 Message-ID: <20220405121627.1560949-2-vincent.whitchurch@axis.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220405121627.1560949-1-vincent.whitchurch@axis.com> References: <20220405121627.1560949-1-vincent.whitchurch@axis.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org When drivers with ->detect callbacks are loaded, the I2C core does a bunch of transactions to try to probe for these devices, regardless of whether they are specified in the devicetree or not. (This only happens on I2C controllers whose drivers enable the I2C_CLASS* flags, but this is the case for generic drivers like i2c-gpio.) These kinds of transactions are unnecessary on systems where the devicetree specifies all the devices on the I2C bus, so add a property to allow them to be disabled. Signed-off-by: Vincent Whitchurch --- Documentation/devicetree/bindings/i2c/i2c.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/i2c/i2c.txt b/Documentation/devicetree/bindings/i2c/i2c.txt index fc3dd7ec0445..5f7bdf4851e8 100644 --- a/Documentation/devicetree/bindings/i2c/i2c.txt +++ b/Documentation/devicetree/bindings/i2c/i2c.txt @@ -72,6 +72,10 @@ wants to support one of the below features, it should adapt these bindings. this information to adapt power management to keep the arbitration awake all the time, for example. Can not be combined with 'single-master'. +- no-detect + states that the system should not attempt to automatically detect + devices which are not explicitly specified as child nodes. + - pinctrl add extra pinctrl to configure SCL/SDA pins to GPIO function for bus recovery, call it "gpio" or "recovery" (deprecated) state From patchwork Tue Apr 5 12:16:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Whitchurch X-Patchwork-Id: 556345 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D180C43217 for ; Tue, 5 Apr 2022 14:06:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234356AbiDEOIV (ORCPT ); Tue, 5 Apr 2022 10:08:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1380317AbiDENOB (ORCPT ); Tue, 5 Apr 2022 09:14:01 -0400 Received: from smtp2.axis.com (smtp2.axis.com [195.60.68.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 54880123BE5; Tue, 5 Apr 2022 05:16:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axis.com; q=dns/txt; s=axis-central1; t=1649161001; x=1680697001; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=x4YcHLziIrEggw9HG5I5fbaW8iCdF7u9wJBMUjziEm8=; b=meQxV9f1p1HxnA3LmMRvs8ovRZ0drYp0I+KKJAUcs7eP7q68kAO9jRvG 5xgBBynyHeSrU7SC+XYDy/gOfaOKCoOMUwNmTum1YmqLNFA/tDU1wNG0Z fKawQ0pdr4asecovTbrHWQE7JdFkJUI8dpn60dfWZXB5pY789qCwPJxbZ ctjRS89ABOnJilYZeMhLr4HxnA1XPBXRDCJS+lZF6iyuCH6nP8Cn+qkBD ONmlhg8GdVyC8ip3m1a5cQfJf+j7yBDSyKxykIETTWeFKKkXiOaXC98cF BWAO6Sr1S1y0r2wLxBnfjegIeqJXA4gA+j6MctVnwViaHh7A0LoFMPJU4 w==; From: Vincent Whitchurch To: CC: , Vincent Whitchurch , , , , , Subject: [PATCH 2/2] i2c: core: support no-detect property Date: Tue, 5 Apr 2022 14:16:27 +0200 Message-ID: <20220405121627.1560949-3-vincent.whitchurch@axis.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220405121627.1560949-1-vincent.whitchurch@axis.com> References: <20220405121627.1560949-1-vincent.whitchurch@axis.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org If the devicetree specifies the no-detect property, we can avoid calling drivers' detect callback and wasting time probing for devices which do not exist. Signed-off-by: Vincent Whitchurch --- drivers/i2c/i2c-core-base.c | 8 +++++++- include/linux/i2c.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index d43db2c3876e..d43025b84546 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -1341,7 +1341,8 @@ static int i2c_do_add_adapter(struct i2c_driver *driver, struct i2c_adapter *adap) { /* Detect supported devices on that bus, and instantiate them */ - i2c_detect(adap, driver); + if (adap->detect) + i2c_detect(adap, driver); return 0; } @@ -1432,6 +1433,7 @@ EXPORT_SYMBOL_GPL(i2c_handle_smbus_host_notify); static int i2c_register_adapter(struct i2c_adapter *adap) { + struct device_node *np = adap->dev.of_node; int res = -EINVAL; /* Can't register until after driver model init */ @@ -1502,6 +1504,10 @@ static int i2c_register_adapter(struct i2c_adapter *adap) "Failed to create compatibility class link\n"); #endif + adap->detect = true; + if (np && of_property_read_bool(np, "no-detect")) + adap->detect = false; + /* create pre-declared device nodes */ of_i2c_register_devices(adap); i2c_acpi_install_space_handler(adap); diff --git a/include/linux/i2c.h b/include/linux/i2c.h index fbda5ada2afc..8fad5fe85685 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -728,6 +728,7 @@ struct i2c_adapter { struct rt_mutex bus_lock; struct rt_mutex mux_lock; + bool detect; int timeout; /* in jiffies */ int retries; struct device dev; /* the adapter device */