diff --git a/drivers/i2c/i2c.c b/drivers/i2c/i2c.c index 3af2b3e66..555722b67 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, +}; diff --git a/drivers/mfd/lp3972.c b/drivers/mfd/lp3972.c index 0f3093bd1..c5e6baae4 100644 --- a/drivers/mfd/lp3972.c +++ b/drivers/mfd/lp3972.c @@ -103,7 +103,7 @@ static struct driver_d lp_driver = { static int lp_init(void) { - register_driver(&lp_driver); + i2c_register_driver(&lp_driver); return 0; } diff --git a/drivers/mfd/mc13xxx.c b/drivers/mfd/mc13xxx.c index 42ed96081..a62eca80d 100644 --- a/drivers/mfd/mc13xxx.c +++ b/drivers/mfd/mc13xxx.c @@ -349,7 +349,7 @@ static struct driver_d mc_i2c_driver = { static int mc_i2c_init(void) { - return register_driver(&mc_i2c_driver); + return i2c_register_driver(&mc_i2c_driver); } device_initcall(mc_i2c_init); #endif diff --git a/drivers/mfd/mc34704.c b/drivers/mfd/mc34704.c index 0432a98f5..e22fb3839 100644 --- a/drivers/mfd/mc34704.c +++ b/drivers/mfd/mc34704.c @@ -134,7 +134,7 @@ static struct driver_d mc34704_driver = { static int mc34704_init(void) { - register_driver(&mc34704_driver); - return 0; + i2c_register_driver(&mc34704_driver); + return 0; } device_initcall(mc34704_init); diff --git a/drivers/mfd/mc34708.c b/drivers/mfd/mc34708.c index 1be4756fb..fdcc7d7d4 100644 --- a/drivers/mfd/mc34708.c +++ b/drivers/mfd/mc34708.c @@ -279,7 +279,7 @@ static struct driver_d mc_i2c_driver = { static int mc_i2c_init(void) { - return register_driver(&mc_i2c_driver); + return i2c_register_driver(&mc_i2c_driver); } device_initcall(mc_i2c_init); diff --git a/drivers/mfd/mc9sdz60.c b/drivers/mfd/mc9sdz60.c index 75d078943..612817d50 100644 --- a/drivers/mfd/mc9sdz60.c +++ b/drivers/mfd/mc9sdz60.c @@ -146,7 +146,7 @@ static struct driver_d mc_driver = { static int mc_init(void) { - register_driver(&mc_driver); + i2c_register_driver(&mc_driver); return 0; } diff --git a/drivers/mfd/stmpe-i2c.c b/drivers/mfd/stmpe-i2c.c index 4af8b7b88..12e95c16b 100644 --- a/drivers/mfd/stmpe-i2c.c +++ b/drivers/mfd/stmpe-i2c.c @@ -146,7 +146,7 @@ static struct driver_d stmpe_driver = { static int stmpe_init(void) { - register_driver(&stmpe_driver); + i2c_register_driver(&stmpe_driver); return 0; } diff --git a/drivers/mfd/twl4030.c b/drivers/mfd/twl4030.c index 191c91f36..93097659c 100644 --- a/drivers/mfd/twl4030.c +++ b/drivers/mfd/twl4030.c @@ -53,7 +53,7 @@ static struct driver_d twl_driver = { static int twl_init(void) { - register_driver(&twl_driver); + i2c_register_driver(&twl_driver); return 0; } diff --git a/drivers/mfd/twl6030.c b/drivers/mfd/twl6030.c index 7ecfed806..01728fd31 100644 --- a/drivers/mfd/twl6030.c +++ b/drivers/mfd/twl6030.c @@ -49,7 +49,7 @@ static struct driver_d twl_driver = { static int twl_init(void) { - register_driver(&twl_driver); + i2c_register_driver(&twl_driver); return 0; } diff --git a/include/i2c/i2c.h b/include/i2c/i2c.h index c3e176354..de2a7ea27 100644 --- a/include/i2c/i2c.h +++ b/include/i2c/i2c.h @@ -139,4 +139,12 @@ extern int i2c_write_reg(struct i2c_client *client, u32 addr, const u8 *buf, u16 #endif /* DOXYGEN_SHOULD_SKIP_THIS */ +extern struct bus_type i2c_bus; + +static inline int i2c_register_driver(struct driver_d *drv) +{ + drv->bus = &i2c_bus; + return register_driver(drv); +} + #endif /* I2C_I2C_H */