From: Wolfram Sang <wsa+renesas@sang-engineering.com> To: linux-i2c@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, linux-i3c@lists.infradead.org, "Kieran Bingham" <kieran@ksquared.org.uk>, "Niklas Söderlund" <niklas.soderlund@ragnatech.se>, "Luca Ceresoli" <luca@lucaceresoli.net>, "Jacopo Mondi" <jacopo@jmondi.org>, "Laurent Pinchart" <laurent.pinchart@ideasonboard.com>, "Vladimir Zapolskiy" <vz@mleia.com>, linux-kernel@vger.kernel.org, "Wolfram Sang" <wsa+renesas@sang-engineering.com>, "Geert Uytterhoeven" <geert+renesas@glider.be>, "Rob Herring" <robh@kernel.org> Subject: [RFC PATCH v2 2/6] i2c: allow DT nodes without 'compatible' Date: Wed, 18 Mar 2020 16:00:55 +0100 [thread overview] Message-ID: <20200318150059.21714-3-wsa+renesas@sang-engineering.com> (raw) In-Reply-To: <20200318150059.21714-1-wsa+renesas@sang-engineering.com> 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 <wsa+renesas@sang-engineering.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Rob Herring <robh@kernel.org> --- 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
WARNING: multiple messages have this Message-ID (diff)
From: Wolfram Sang <wsa+renesas@sang-engineering.com> To: linux-i2c@vger.kernel.org Cc: "Rob Herring" <robh@kernel.org>, "Jacopo Mondi" <jacopo@jmondi.org>, "Niklas Söderlund" <niklas.soderlund@ragnatech.se>, "Geert Uytterhoeven" <geert+renesas@glider.be>, "Wolfram Sang" <wsa+renesas@sang-engineering.com>, linux-kernel@vger.kernel.org, "Vladimir Zapolskiy" <vz@mleia.com>, linux-renesas-soc@vger.kernel.org, "Kieran Bingham" <kieran@bingham.xyz>, "Laurent Pinchart" <laurent.pinchart@ideasonboard.com>, "Luca Ceresoli" <luca@lucaceresoli.net>, linux-i3c@lists.infradead.org Subject: [RFC PATCH v2 2/6] i2c: allow DT nodes without 'compatible' Date: Wed, 18 Mar 2020 16:00:55 +0100 [thread overview] Message-ID: <20200318150059.21714-3-wsa+renesas@sang-engineering.com> (raw) In-Reply-To: <20200318150059.21714-1-wsa+renesas@sang-engineering.com> 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 <wsa+renesas@sang-engineering.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Rob Herring <robh@kernel.org> --- 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 _______________________________________________ linux-i3c mailing list linux-i3c@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-i3c
next prev parent reply other threads:[~2020-03-18 15:01 UTC|newest] Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-18 15:00 [RFC PATCH v2 0/6] i2c: of: reserve unknown and ancillary addresses Wolfram Sang 2020-03-18 15:00 ` Wolfram Sang 2020-03-18 15:00 ` [RFC PATCH v2 1/6] i2c: use DEFINE for the dummy driver name Wolfram Sang 2020-03-18 15:00 ` Wolfram Sang 2020-04-15 8:09 ` Kieran Bingham 2020-04-15 8:09 ` Kieran Bingham 2020-03-18 15:00 ` Wolfram Sang [this message] 2020-03-18 15:00 ` [RFC PATCH v2 2/6] i2c: allow DT nodes without 'compatible' Wolfram Sang 2020-04-10 13:49 ` Luca Ceresoli 2020-04-10 13:49 ` Luca Ceresoli 2020-04-15 7:59 ` Wolfram Sang 2020-04-15 7:59 ` Wolfram Sang 2020-04-15 8:07 ` Kieran Bingham 2020-04-15 8:07 ` Kieran Bingham 2020-04-15 8:16 ` Wolfram Sang 2020-04-15 8:16 ` Wolfram Sang 2020-04-15 8:38 ` Kieran Bingham 2020-04-15 8:38 ` Kieran Bingham 2020-04-16 14:53 ` Luca Ceresoli 2020-04-16 14:53 ` Luca Ceresoli 2020-04-15 8:48 ` Kieran Bingham 2020-04-15 8:48 ` Kieran Bingham 2020-04-15 9:46 ` Wolfram Sang 2020-04-15 9:46 ` Wolfram Sang 2020-03-18 15:00 ` [RFC PATCH v2 3/6] i2c: of: remove superfluous parameter from exported function Wolfram Sang 2020-03-18 15:00 ` Wolfram Sang 2020-03-19 12:41 ` Boris Brezillon 2020-03-19 12:41 ` Boris Brezillon 2020-04-15 8:13 ` Kieran Bingham 2020-04-15 8:13 ` Kieran Bingham 2020-03-18 15:00 ` [RFC PATCH v2 4/6] i2c: of: error message unification Wolfram Sang 2020-03-18 15:00 ` Wolfram Sang 2020-04-10 17:02 ` Luca Ceresoli 2020-04-10 17:02 ` Luca Ceresoli 2020-04-15 8:17 ` Kieran Bingham 2020-04-15 8:17 ` Kieran Bingham 2020-04-15 8:50 ` Kieran Bingham 2020-04-15 8:50 ` Kieran Bingham 2020-03-18 15:00 ` [RFC PATCH v2 5/6] i2c: of: mark a whole array of regs as reserved Wolfram Sang 2020-03-18 15:00 ` Wolfram Sang 2020-04-10 17:05 ` Luca Ceresoli 2020-04-10 17:05 ` Luca Ceresoli 2020-04-13 9:55 ` Luca Ceresoli 2020-04-13 9:55 ` Luca Ceresoli 2020-04-15 8:10 ` Wolfram Sang 2020-04-15 8:10 ` Wolfram Sang 2020-04-15 10:07 ` Luca Ceresoli 2020-04-15 10:07 ` Luca Ceresoli 2020-03-18 15:00 ` [RFC PATCH v2 6/6] i2c: core: hand over reserved devices when requesting ancillary addresses Wolfram Sang 2020-03-18 15:00 ` Wolfram Sang 2020-04-15 10:07 ` Luca Ceresoli 2020-04-15 10:07 ` Luca Ceresoli 2020-03-28 3:50 ` [RFC PATCH v2 0/6] i2c: of: reserve unknown and " Wolfram Sang 2020-03-28 3:50 ` Wolfram Sang 2020-04-15 8:27 ` Wolfram Sang 2020-04-15 8:27 ` Wolfram Sang 2020-04-15 8:35 ` Kieran Bingham 2020-04-15 8:35 ` Kieran Bingham
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200318150059.21714-3-wsa+renesas@sang-engineering.com \ --to=wsa+renesas@sang-engineering.com \ --cc=geert+renesas@glider.be \ --cc=jacopo@jmondi.org \ --cc=kieran@ksquared.org.uk \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-i3c@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-renesas-soc@vger.kernel.org \ --cc=luca@lucaceresoli.net \ --cc=niklas.soderlund@ragnatech.se \ --cc=robh@kernel.org \ --cc=vz@mleia.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.