diff -ura xx-linux-2.6-6-rc3-mm2/drivers/i2c/i2c-core.c linux-2.6-6-rc3-mm2/drivers/i2c/i2c-core.c --- xx-linux-2.6-6-rc3-mm2/drivers/i2c/i2c-core.c 2004-05-09 11:03:03.000000000 +0200 +++ linux-2.6-6-rc3-mm2/drivers/i2c/i2c-core.c 2004-05-09 21:18:35.000000000 +0200 @@ -148,8 +148,11 @@ list_for_each(item,&drivers) { driver = list_entry(item, struct i2c_driver, list); if (driver->flags & I2C_DF_NOTIFY) - /* We ignore the return code; if it fails, too bad */ - driver->attach_adapter(adap); + if (adap->class & driver->class) + /* We ignore the return code; if it fails, too bad */ + driver->attach_adapter(adap); + else + printk("i2c-core: skipping driver '%s' on adapter '%s' (class mismatch)\n",driver->name, adap->name); } up(&core_lists); @@ -247,7 +250,10 @@ if (driver->flags & I2C_DF_NOTIFY) { list_for_each(item,&adapters) { adapter = list_entry(item, struct i2c_adapter, list); - driver->attach_adapter(adapter); + if (adapter->class & driver->class) + driver->attach_adapter(adapter); + else + printk("i2c-core: skipping driver '%s' on adapter '%s' (class mismatch)\n",driver->name, adap->name); } }