Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp724102ybh; Wed, 18 Mar 2020 08:02:07 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtJPt+HLWMPQ7yeNOEEAdh+rRq664h84D0+J5li8VP+JfdL4qHlmBOg7BnoT0qWhfvaX3y1 X-Received: by 2002:a05:6808:9bb:: with SMTP id e27mr3444981oig.36.1584543726847; Wed, 18 Mar 2020 08:02:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584543726; cv=none; d=google.com; s=arc-20160816; b=ubvnci2KoX+6udVB+dkwkV1qRgST/7CBrX5yxZhIewdJi6l8+iTmlPx1zYFOhWt8vx cf1Ud3qTrh6Ft9uMv0llpbrVoxHucOEvB1gwDfK+7IctcVYSjTXBM//dzcBvPcFyNWDX OZVcuin1uCEcBrlrMYC9DlYSnjCFoFxWoZxAA/xZzSAkHi8pORF3silqwScxu+T6SCb1 yhnhN2l4Gq05AOb0mQxqd0tUdKWLWYPQNPoGe0+TSrqpUznVUol3VMQyipfc2BATXvWE hxmhBnlCUWgJRIMS5J82XW/cIS8SEOjpGzQHzJAy3CH7O0wLAcV+RF4vjwBVStN7gOcP Yf0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=JkFzjacX2jUrkgCVNHl2BA0NpMjUtDrbXhrPk/3vSeA=; b=qCu4hgZUsF+DD4dcoAEsBm3hJPBZKVLmpm1HyBhLZzM3UScbzC2CHoyPgOXbVWVkXc UIK+UhCEH/NBGrvmdO61uMT0uxmIOPKvRsRrRLaOdsTSvZoqKU2YwNldHW2bujZlm8Xk 9ufOI0n6au6MpmrAn173t5dLsacT5eI7idO4yFHgTcL6eOrSS4p9Kzf5S5smMsWo+VP4 YulE6tOYhcLJaXD23InbNTMI0ZThWg95fT7Ovrn6TT8e9gQLYpVvH0H+QQ6jNsPHJfup N1M3+jc/6iHPWYRmaDzjpxHQF1S/+a+oGObi8MoAB32Hro4yMj0m80FH58rG9i74DEXr T5Tg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i21si3794214otk.100.2020.03.18.08.01.42; Wed, 18 Mar 2020 08:02:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727159AbgCRPBN (ORCPT + 99 others); Wed, 18 Mar 2020 11:01:13 -0400 Received: from sauhun.de ([88.99.104.3]:48444 "EHLO pokefinder.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726936AbgCRPBI (ORCPT ); Wed, 18 Mar 2020 11:01:08 -0400 Received: from localhost (p54B333FA.dip0.t-ipconnect.de [84.179.51.250]) by pokefinder.org (Postfix) with ESMTPSA id B29E42C2E79; Wed, 18 Mar 2020 16:01:05 +0100 (CET) From: Wolfram Sang To: linux-i2c@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, linux-i3c@lists.infradead.org, Kieran Bingham , =?UTF-8?q?Niklas=20S=C3=B6derlund?= , Luca Ceresoli , Jacopo Mondi , Laurent Pinchart , Vladimir Zapolskiy , linux-kernel@vger.kernel.org, Wolfram Sang , Geert Uytterhoeven , Rob Herring Subject: [RFC PATCH v2 2/6] i2c: allow DT nodes without 'compatible' Date: Wed, 18 Mar 2020 16:00:55 +0100 Message-Id: <20200318150059.21714-3-wsa+renesas@sang-engineering.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200318150059.21714-1-wsa+renesas@sang-engineering.com> References: <20200318150059.21714-1-wsa+renesas@sang-engineering.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sometimes, we have unknown devices in a system and still want to block their address. For that, we allow DT nodes with only a 'reg' property. These devices will be bound to the "dummy" driver but with the name "reserved". That way, we can distinguish them and even hand them over to the "dummy" driver later when they are really requested using i2c_new_ancillary_device(). Signed-off-by: Wolfram Sang Reviewed-by: Geert Uytterhoeven Acked-by: Rob Herring --- Documentation/devicetree/bindings/i2c/i2c-ocores.txt | 2 -- Documentation/devicetree/bindings/i2c/i2c.txt | 4 +++- drivers/i2c/i2c-core-base.c | 1 + drivers/i2c/i2c-core-of.c | 8 +++----- drivers/i2c/i2c-core.h | 1 + 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt index 6b25a80ae8d3..fc8ea27934b3 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt +++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt @@ -50,7 +50,6 @@ Examples: reg-io-width = <1>; /* 8 bit read/write */ dummy@60 { - compatible = "dummy"; reg = <0x60>; }; }; @@ -68,7 +67,6 @@ or reg-io-width = <1>; /* 8 bit read/write */ dummy@60 { - compatible = "dummy"; reg = <0x60>; }; }; diff --git a/Documentation/devicetree/bindings/i2c/i2c.txt b/Documentation/devicetree/bindings/i2c/i2c.txt index 9a53df4243c6..989b315e09dc 100644 --- a/Documentation/devicetree/bindings/i2c/i2c.txt +++ b/Documentation/devicetree/bindings/i2c/i2c.txt @@ -21,7 +21,9 @@ flags can be attached to the address. I2C_TEN_BIT_ADDRESS is used to mark a 10 bit address. It is needed to avoid the ambiguity between e.g. a 7 bit address of 0x50 and a 10 bit address of 0x050 which, in theory, can be on the same bus. Another flag is I2C_OWN_SLAVE_ADDRESS to mark addresses on which we listen to -be devices ourselves. +be devices ourselves. The 'reg' property of a child is required. The +'compatible' property is not. Empty 'compatible' child entries can be used to +describe unknown devices or addresses which shall be blocked for other reasons. Optional properties ------------------- diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index 3d7b8a00a7d9..84464e439df5 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -854,6 +854,7 @@ EXPORT_SYMBOL_GPL(i2c_unregister_device); static const struct i2c_device_id dummy_id[] = { { I2C_DUMMY_DRV_NAME, 0 }, + { I2C_RESERVED_DRV_NAME, 0 }, { }, }; diff --git a/drivers/i2c/i2c-core-of.c b/drivers/i2c/i2c-core-of.c index 6787c1f71483..d8d111ad6c85 100644 --- a/drivers/i2c/i2c-core-of.c +++ b/drivers/i2c/i2c-core-of.c @@ -27,17 +27,15 @@ int of_i2c_get_board_info(struct device *dev, struct device_node *node, memset(info, 0, sizeof(*info)); - if (of_modalias_node(node, info->type, sizeof(info->type)) < 0) { - dev_err(dev, "of_i2c: modalias failure on %pOF\n", node); - return -EINVAL; - } - ret = of_property_read_u32(node, "reg", &addr); if (ret) { dev_err(dev, "of_i2c: invalid reg on %pOF\n", node); return ret; } + if (of_modalias_node(node, info->type, sizeof(info->type)) < 0) + strlcpy(info->type, I2C_RESERVED_DRV_NAME, sizeof(I2C_RESERVED_DRV_NAME)); + if (addr & I2C_TEN_BIT_ADDRESS) { addr &= ~I2C_TEN_BIT_ADDRESS; info->flags |= I2C_CLIENT_TEN; diff --git a/drivers/i2c/i2c-core.h b/drivers/i2c/i2c-core.h index fb89fabf84d3..77b3a925ed95 100644 --- a/drivers/i2c/i2c-core.h +++ b/drivers/i2c/i2c-core.h @@ -23,6 +23,7 @@ int i2c_dev_irq_from_resources(const struct resource *resources, unsigned int num_resources); #define I2C_DUMMY_DRV_NAME "dummy" +#define I2C_RESERVED_DRV_NAME "reserved" /* * We only allow atomic transfers for very late communication, e.g. to send -- 2.20.1