diff --git a/drivers/i2c/i2c.c b/drivers/i2c/i2c.c index 3af2b3e..555722b 100644 --- a/drivers/i2c/i2c.c +++ b/drivers/i2c/i2c.c @@ -251,6 +251,7 @@ 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 @@ 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 0f3093b..c5e6baa 100644 --- a/drivers/mfd/lp3972.c +++ b/drivers/mfd/lp3972.c @@ -103,7 +103,7 @@ 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 42ed960..a62eca8 100644 --- a/drivers/mfd/mc13xxx.c +++ b/drivers/mfd/mc13xxx.c @@ -349,7 +349,7 @@ 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 0432a98..e22fb38 100644 --- a/drivers/mfd/mc34704.c +++ b/drivers/mfd/mc34704.c @@ -134,7 +134,7 @@ 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 1be4756..fdcc7d7 100644 --- a/drivers/mfd/mc34708.c +++ b/drivers/mfd/mc34708.c @@ -279,7 +279,7 @@ 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 75d0789..612817d 100644 --- a/drivers/mfd/mc9sdz60.c +++ b/drivers/mfd/mc9sdz60.c @@ -146,7 +146,7 @@ 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 4af8b7b..12e95c1 100644 --- a/drivers/mfd/stmpe-i2c.c +++ b/drivers/mfd/stmpe-i2c.c @@ -146,7 +146,7 @@ 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 191c91f..9309765 100644 --- a/drivers/mfd/twl4030.c +++ b/drivers/mfd/twl4030.c @@ -53,7 +53,7 @@ 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 7ecfed8..01728fd 100644 --- a/drivers/mfd/twl6030.c +++ b/drivers/mfd/twl6030.c @@ -49,7 +49,7 @@ 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 c3e1763..de2a7ea 100644 --- a/include/i2c/i2c.h +++ b/include/i2c/i2c.h @@ -139,4 +139,12 @@ #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 */