From d9afca37dea077d11ed67fc7f93b95c003e58819 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Tue, 17 Apr 2012 12:42:15 -0600 Subject: of/i2c: call i2c_verify_client from of_find_i2c_device_by_node i2c_bus_type may contain both I2C clients and I2C adapters. Fix of_find_i2c_device_by_node to call i2c_verify_client to ensure that it only returns non-NULL of I2C clients. Signed-off-by: Stephen Warren Acked-by: Rob Herring Signed-off-by: Wolfram Sang --- drivers/of/of_i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/of') diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c index f37fbeb..0684887 100644 --- a/drivers/of/of_i2c.c +++ b/drivers/of/of_i2c.c @@ -90,7 +90,7 @@ struct i2c_client *of_find_i2c_device_by_node(struct device_node *node) if (!dev) return NULL; - return to_i2c_client(dev); + return i2c_verify_client(dev); } EXPORT_SYMBOL(of_find_i2c_device_by_node); -- cgit v1.1 From 0938643e533cc80ef0cdfdd2e260c4910d0f8bc7 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Tue, 17 Apr 2012 12:43:34 -0600 Subject: of/i2c: implement of_find_i2c_adapter_by_node This finds the struct i2c_adapter * for a given device tree node. Just like of_find_i2c_device_by_node. Signed-off-by: Stephen Warren Signed-off-by: Wolfram Sang --- drivers/of/of_i2c.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'drivers/of') diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c index 0684887..1e173f3 100644 --- a/drivers/of/of_i2c.c +++ b/drivers/of/of_i2c.c @@ -94,4 +94,18 @@ struct i2c_client *of_find_i2c_device_by_node(struct device_node *node) } EXPORT_SYMBOL(of_find_i2c_device_by_node); +/* must call put_device() when done with returned i2c_adapter device */ +struct i2c_adapter *of_find_i2c_adapter_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 i2c_verify_adapter(dev); +} +EXPORT_SYMBOL(of_find_i2c_adapter_by_node); + MODULE_LICENSE("GPL"); -- cgit v1.1