[i2c] [patch 2.6.19-rc5] some i2c driver model updates

David Brownell david-b at pacbell.net
Fri Nov 17 00:15:37 CET 2006

> I think I found the problem. You replaced the "drivers" list maintained
> by i2c-core by the list of drivers maintained by the driver core,
> assuming they were equal. However, the i2c-core only listed i2c chip
> drivers (struct i2c_driver), while it looks to me like the driver core
> lists the i2c chip drivers (struct i2c_driver) _and_ the "i2c_adapter"
> driver (i2c_adapter_driver), which you can see in /sys/bus/i2c/drivers.

Whoops, that's nonsensical.  If it's not an i2c device, it should
not be grouped with i2c devices.

> When you call to_i2c_driver() on this one in i2c_do_add_adapter(),
> well... you can't. I guess sometimes you're lucky and
> driver->attach_adapter is NULL, so it's silently skipped, and I wasn't
> lucky and it crashed on me.
> So we need to catch this exception in i2c_do_add_adapter(), and then
> things should work.

Thing is, i2c_adapter is what I'd normally think of as a class,
not a device.  Or maybe a way to group everyting in a given bus 
segment under one tree.  It's clearly _not_ an I2C device; it
should maybe be a different type (like "i2c_bus").

We might not be able to  do it as _just_ a class, because of common
cases like PCI SMBUS adapters with two different independent bus
segments.  But if we can, that'd be more sensible.

>	And I suspect i2c-dev will need a similar exception.

Yeah, that's a whole nother kind of confusion... but, not one
that "should" be affected by this patch series.

> OTOH I admit I wonder why i2c_adapter_driver is listed with all
> i2c_driver structs at the driver core level, while they are of
> different nature. But then again I'm not familiar with the driver
> model. Greg?

Yeah ... Greg?  :)

- Dave

More information about the i2c mailing list