From: Jean Delvare <khali@linux-fr.org>
To: Jon Smirl <jonsmirl@gmail.com>
Cc: Linuxppc-dev@ozlabs.org, Paul Mackerras <paulus@samba.org>,
i2c@lm-sensors.org
Subject: Re: [PATCH 2/2] Add the of_find_i2c_device_by_node function, V4
Date: Tue, 1 Jul 2008 17:05:44 +0200 [thread overview]
Message-ID: <20080701170544.72051418@hyperion.delvare> (raw)
In-Reply-To: <20080630230128.12482.79570.stgit@terra>
Hi Jon,
On Mon, 30 Jun 2008 19:01:28 -0400, Jon Smirl wrote:
> Add the of_find_i2c_device_by_node function. This allows you to
> follow a reference in the device to an i2c device node and then
> locate the linux device instantiated by the device tree. Example
> use, an i2s codec controlled by i2c.
> ---
>
> drivers/i2c/i2c-core.c | 2 +-
> drivers/of/of_i2c.c | 37 ++++++++++++++++++++++++++-----------
> include/linux/i2c.h | 3 +++
> include/linux/of_i2c.h | 2 ++
> 4 files changed, 32 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index d0175f4..e3abe1b 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -208,7 +208,7 @@ static struct device_attribute i2c_dev_attrs[] = {
> { },
> };
>
> -static struct bus_type i2c_bus_type = {
> +struct bus_type i2c_bus_type = {
> .name = "i2c",
> .dev_attrs = i2c_dev_attrs,
> .match = i2c_device_match,
What if i2c-core is built as a module? Don't you need to export the
symbol then?
> diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c
> index 715a444..ca69a16 100644
> --- a/drivers/of/of_i2c.c
> +++ b/drivers/of/of_i2c.c
> @@ -75,7 +75,7 @@ static int of_find_i2c_driver(struct device_node *node,
> void of_register_i2c_devices(struct i2c_adapter *adap,
> struct device_node *adap_node)
> {
> - void *result;
> + struct i2c_client *i2c_dev;
> struct device_node *node;
>
> for_each_child_of_node(adap_node, node) {
> @@ -90,29 +90,44 @@ void of_register_i2c_devices(struct i2c_adapter *adap,
> continue;
> }
>
> - info.irq = irq_of_parse_and_map(node, 0);
> - if (info.irq == NO_IRQ)
> - info.irq = -1;
> -
> - if (of_find_i2c_driver(node, &info) < 0) {
> - irq_dispose_mapping(info.irq);
> + if (of_find_i2c_driver(node, &info) < 0)
> continue;
> - }
>
> + info.irq = irq_of_parse_and_map(node, 0);
> info.addr = *addr;
>
> - request_module(info.type);
> + request_module("%s", info.type);
A separate fix for this issue was already sent by Maximilian Attems a
few days go:
http://lists.lm-sensors.org/pipermail/i2c/2008-June/004030.html
>
> - result = i2c_new_device(adap, &info);
> - if (result == NULL) {
> + i2c_dev = i2c_new_device(adap, &info);
> + if (i2c_dev == NULL) {
> printk(KERN_ERR
> "of-i2c: Failed to load driver for %s\n",
> info.type);
> irq_dispose_mapping(info.irq);
> continue;
> }
> +
> + i2c_dev->dev.archdata.of_node = of_node_get(node);
> }
> }
> EXPORT_SYMBOL(of_register_i2c_devices);
>
> +static int of_dev_node_match(struct device *dev, void *data)
> +{
> + return dev->archdata.of_node == data;
> +}
> +
> +struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
> +{
> + struct device *dev;
> +
> + dev = bus_find_device(&i2c_bus_type, NULL, node,
> + of_dev_node_match);
> + if (!dev)
> + return NULL;
> +
> + return to_i2c_client(dev);
> +}
> +EXPORT_SYMBOL(of_find_i2c_device_by_node);
> +
> MODULE_LICENSE("GPL");
> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
> index fb9af6a..186b22d 100644
> --- a/include/linux/i2c.h
> +++ b/include/linux/i2c.h
> @@ -92,6 +92,9 @@ extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client,
> extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client,
> u8 command, u8 length,
> const u8 *values);
> +
> +/* Base of the i2c bus */
> +extern struct bus_type i2c_bus_type;
>
> /*
> * A driver is capable of handling one or more physical devices present on
> diff --git a/include/linux/of_i2c.h b/include/linux/of_i2c.h
> index bd2a870..17d5897 100644
> --- a/include/linux/of_i2c.h
> +++ b/include/linux/of_i2c.h
> @@ -16,5 +16,7 @@
>
> void of_register_i2c_devices(struct i2c_adapter *adap,
> struct device_node *adap_node);
> +struct i2c_client *of_find_i2c_device_by_node(struct device_node *node);
> +
>
> #endif /* __LINUX_OF_I2C_H */
I'm fine with this patch. In particular, exporting i2c_bus_type is OK.
It was un-exported only because it had no user left, but it can be
exported again if needed.
I'm not the one to push this upstream though, as the patch is
essentially an openfirmware patch. That would be something for Jochen
Friedrich and Paul Mackerras I guess. Would be nice to have a
MAINTAINERS entry for OF...
--
Jean Delvare
next prev parent reply other threads:[~2008-07-01 15:05 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-30 23:01 [PATCH 1/2] Convert i2c-mpc from a platform driver into a of_platform driver, V4 Jon Smirl
2008-06-30 23:01 ` [PATCH 2/2] Add the of_find_i2c_device_by_node function, V4 Jon Smirl
2008-07-01 15:05 ` Jean Delvare [this message]
2008-07-01 15:12 ` Jon Smirl
2008-07-01 16:29 ` Jean Delvare
[not found] ` <20080701182949.12119d6e-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-07-01 16:38 ` Jon Smirl
[not found] ` <9e4733910807010938w67bab979tfba888641debe72f-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-01 16:44 ` Jean Delvare
2008-07-01 16:45 ` Grant Likely
[not found] ` <20080701164518.GG6918-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
2008-07-01 17:01 ` Jean Delvare
[not found] ` <20080701190151.76782bbd-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-07-01 17:06 ` Jon Smirl
[not found] ` <9e4733910807011006t20c7689ctfe26931f96c84092-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-01 18:24 ` Jean Delvare
2008-07-01 16:43 ` Grant Likely
2008-07-01 17:00 ` Jon Smirl
2008-07-01 17:12 ` Jean Delvare
2008-07-01 17:27 ` Jon Smirl
2008-07-01 18:18 ` Jon Smirl
2008-07-01 18:51 ` Jean Delvare
2008-07-01 15:48 ` Jochen Friedrich
2008-07-01 16:29 ` Jon Smirl
2008-07-01 16:35 ` Jean Delvare
2008-07-01 16:14 ` [PATCH 1/2] Convert i2c-mpc from a platform driver into a of_platform driver, V4 Jean Delvare
2008-07-02 13:33 ` [i2c] " Wolfram Sang
2008-07-02 14:36 ` Jean Delvare
2008-07-09 17:22 ` Grant Likely
[not found] ` <fa686aa40807091022q22f6be99j89f311780bd3d369-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-10 16:36 ` Timur Tabi
2008-07-11 18:12 ` Grant Likely
2008-07-11 18:45 ` Anton Vorontsov
2008-07-11 18:54 ` Grant Likely
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=20080701170544.72051418@hyperion.delvare \
--to=khali@linux-fr.org \
--cc=Linuxppc-dev@ozlabs.org \
--cc=i2c@lm-sensors.org \
--cc=jonsmirl@gmail.com \
--cc=paulus@samba.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox