diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-09-09 22:08:39 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-09-14 11:47:41 +0200 |
commit | 75265ae5272213afeebcc06aea66a37a63d10686 (patch) | |
tree | 6fa03aab03f52bcc5702a3ee76ba1b249c5cfe6d /drivers/i2c/i2c.c | |
parent | 617bfbcbeb3a278c76ab53e76b4fb7a086255a1e (diff) | |
download | barebox-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.c | 23 |
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, +}; |