summaryrefslogtreecommitdiffstats
path: root/drivers/i2c/i2c.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-09-09 22:08:39 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-09-14 11:47:41 +0200
commit75265ae5272213afeebcc06aea66a37a63d10686 (patch)
tree6fa03aab03f52bcc5702a3ee76ba1b249c5cfe6d /drivers/i2c/i2c.c
parent617bfbcbeb3a278c76ab53e76b4fb7a086255a1e (diff)
downloadbarebox-75265ae5272213afeebcc06aea66a37a63d10686.tar.gz
barebox-75265ae5272213afeebcc06aea66a37a63d10686.tar.xz
I2C: Put I2C devices on their own bus
This patch adds a I2C bus on which the I2C devices and drivers register. This makes it cleaner as I2C devices won't accidently end up probed by a platform_device driver. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/i2c/i2c.c')
-rw-r--r--drivers/i2c/i2c.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/i2c/i2c.c b/drivers/i2c/i2c.c
index 3af2b3e66c..555722b67f 100644
--- a/drivers/i2c/i2c.c
+++ b/drivers/i2c/i2c.c
@@ -251,6 +251,7 @@ struct i2c_client *i2c_new_device(struct i2c_adapter *adapter,
strcpy(client->dev.name, chip->type);
client->dev.type_data = client;
client->dev.platform_data = chip->platform_data;
+ client->dev.bus = &i2c_bus;
client->adapter = adapter;
client->addr = chip->addr;
@@ -372,3 +373,25 @@ int i2c_add_numbered_adapter(struct i2c_adapter *adapter)
return 0;
}
EXPORT_SYMBOL(i2c_add_numbered_adapter);
+
+static int i2c_match(struct device_d *dev, struct driver_d *drv)
+{
+ return strcmp(dev->name, drv->name) ? -1 : 0;
+}
+
+static int i2c_probe(struct device_d *dev)
+{
+ return dev->driver->probe(dev);
+}
+
+static void i2c_remove(struct device_d *dev)
+{
+ dev->driver->remove(dev);
+}
+
+struct bus_type i2c_bus = {
+ .name = "i2c",
+ .match = i2c_match,
+ .probe = i2c_probe,
+ .remove = i2c_remove,
+};