From: Anton Vorontsov <avorontsov-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
To: Jon Smirl <jonsmirl-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: linuxppc-dev-mnsaURCQ41sdnm+yROfE0A@public.gmane.org,
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
Subject: Re: [PATCH] Add the of_find_i2c_device_by_node function
Date: Mon, 20 Oct 2008 01:20:34 +0400 [thread overview]
Message-ID: <20081019212034.GA8224@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <20081019140040.32281.65209.stgit@terra>
Hi Jon,
On Sun, Oct 19, 2008 at 10:00:40AM -0400, Jon Smirl wrote:
> Add the of_find_i2c_device_by_node function. This allows you to follow
> a reference in the device tree to an i2c device node and then locate
> the linux device instantiated by the device tree. Example use, an i2s
> codec controlled by i2c. Depends on patch exporting i2c root bus symbol.
>
> Signed-off-by: Jon Smirl <jonsmirl-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Few comments are below.
> ---
> drivers/of/of_i2c.c | 28 ++++++++++++++++++++++++----
> 1 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c
> index 6a98dc8..ba7b394 100644
> --- a/drivers/of/of_i2c.c
> +++ b/drivers/of/of_i2c.c
> @@ -19,7 +19,7 @@
> 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) {
> @@ -41,18 +41,38 @@ void of_register_i2c_devices(struct i2c_adapter *adap,
>
> info.addr = *addr;
>
> - request_module(info.type);
> + request_module("%s", info.type);
Patch description doesn't mention this change.
>
> - 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);
Would break sparc build. Plus setting this after i2c_new_device() isn't
right... Recently I sent few patches to deal with the archdata, could
you please rebase your patch against these three patches?
http://lkml.org/lkml/2008/10/16/250
http://lkml.org/lkml/2008/10/16/251
http://lkml.org/lkml/2008/10/16/252
> }
> }
> 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)
This should be documented. Especially the fact that every time you
call this function, you must call device_put() when you're done with
the returned i2c_client.
> +{
> + 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/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 */
Thanks,
--
Anton Vorontsov
email: cbouatmailru-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
irc://irc.freenode.net/bd2
_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c
WARNING: multiple messages have this Message-ID (diff)
From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Jon Smirl <jonsmirl@gmail.com>
Cc: linuxppc-dev@ozlabs.org, i2c@lm-sensors.org
Subject: Re: [PATCH] Add the of_find_i2c_device_by_node function
Date: Mon, 20 Oct 2008 01:20:34 +0400 [thread overview]
Message-ID: <20081019212034.GA8224@oksana.dev.rtsoft.ru> (raw)
In-Reply-To: <20081019140040.32281.65209.stgit@terra>
Hi Jon,
On Sun, Oct 19, 2008 at 10:00:40AM -0400, Jon Smirl wrote:
> Add the of_find_i2c_device_by_node function. This allows you to follow
> a reference in the device tree to an i2c device node and then locate
> the linux device instantiated by the device tree. Example use, an i2s
> codec controlled by i2c. Depends on patch exporting i2c root bus symbol.
>
> Signed-off-by: Jon Smirl <jonsmirl@gmail.com>
Few comments are below.
> ---
> drivers/of/of_i2c.c | 28 ++++++++++++++++++++++++----
> 1 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c
> index 6a98dc8..ba7b394 100644
> --- a/drivers/of/of_i2c.c
> +++ b/drivers/of/of_i2c.c
> @@ -19,7 +19,7 @@
> 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) {
> @@ -41,18 +41,38 @@ void of_register_i2c_devices(struct i2c_adapter *adap,
>
> info.addr = *addr;
>
> - request_module(info.type);
> + request_module("%s", info.type);
Patch description doesn't mention this change.
>
> - 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);
Would break sparc build. Plus setting this after i2c_new_device() isn't
right... Recently I sent few patches to deal with the archdata, could
you please rebase your patch against these three patches?
http://lkml.org/lkml/2008/10/16/250
http://lkml.org/lkml/2008/10/16/251
http://lkml.org/lkml/2008/10/16/252
> }
> }
> 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)
This should be documented. Especially the fact that every time you
call this function, you must call device_put() when you're done with
the returned i2c_client.
> +{
> + 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/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 */
Thanks,
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
next prev parent reply other threads:[~2008-10-19 21:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-19 14:00 [PATCH] Add the of_find_i2c_device_by_node function Jon Smirl
2008-10-19 14:00 ` Jon Smirl
2008-10-19 21:20 ` Anton Vorontsov [this message]
2008-10-19 21:20 ` Anton Vorontsov
[not found] ` <20081019212034.GA8224-wnGakbxT3iijyJ0x5qLZdcN33GVbZNy3@public.gmane.org>
2008-10-19 21:50 ` Jon Smirl
2008-10-19 21:50 ` Jon Smirl
[not found] ` <9e4733910810191450t36cbe120y106d18f71cb3163b-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-10-19 22:03 ` Anton Vorontsov
2008-10-19 22:03 ` Anton Vorontsov
2008-10-20 5:19 ` Benjamin Herrenschmidt
-- strict thread matches above, loose matches on Subject: below --
2008-10-21 0:23 Jon Smirl
2008-12-30 20:11 Jon Smirl
2009-01-06 16:29 ` Jon Smirl
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=20081019212034.GA8224@oksana.dev.rtsoft.ru \
--to=avorontsov-hkdhdckh98+b+jhodadfcq@public.gmane.org \
--cc=i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org \
--cc=jonsmirl-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linuxppc-dev-mnsaURCQ41sdnm+yROfE0A@public.gmane.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 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.