[PATCH 2/2] Add the of_find_i2c_device_by_node function, V4

Jon Smirl jonsmirl at gmail.com
Wed Jul 2 04:18:53 EST 2008


On 7/1/08, Jon Smirl <jonsmirl at gmail.com> wrote:
> On 7/1/08, Jean Delvare <khali at linux-fr.org> wrote:
>
> > On Tue, 1 Jul 2008 13:00:08 -0400, Jon Smirl wrote:
>  >  > On 7/1/08, Grant Likely <grant.likely at secretlab.ca> wrote:
>  >
>  > > > My preference is for things like of_spi and of_i2c to go with the
>  >  > >  related busses; I think it makes more sense to keep all the I2C stuff
>  >  > >  together, but I've already lost that battle once.
>  >  >
>  >  > This is a similar problem to adding aliases to the i2c driver drivers
>  >  > for the device tree names of the i2c devices. Instead we have code in
>  >  > drivers/of/of_i2c.c that tries to guess the translation from device
>  >  > tree to linux names. Adding aliases to the drivers would eliminate the
>  >  > need for of_find_i2c_driver().
>  >  >
>  >  > I've previously posted patches implementing device tree names in the
>  >  > drivers that used ifdef to only instantiate on powerpc builds. For
>  >  > example....
>  >  >
>  >  > diff --git a/drivers/i2c/chips/tps65010.c b/drivers/i2c/chips/tps65010.c
>  >  > index e07274d..9cd1770 100644
>  >  > --- a/drivers/i2c/chips/tps65010.c
>  >  > +++ b/drivers/i2c/chips/tps65010.c
>  >  > @@ -571,6 +571,10 @@ static const struct i2c_device_id tps65010_id[] = {
>  >  >         { "tps65011", TPS65011 },
>  >  >         { "tps65012", TPS65012 },
>  >  >         { "tps65013", TPS65013 },
>  >  > +       OF_ID("ti,tps65010", TPS65010)
>  >  > +       OF_ID("ti,tps65011", TPS65011)
>  >  > +       OF_ID("ti,tps65012", TPS65012)
>  >  > +       OF_ID("ti,tps65013", TPS65013)
>  >  >         { },
>  >  >  };
>  >  >  MODULE_DEVICE_TABLE(i2c, tps65010_id);
>  >
>  >
>  > Yeah, yeah, you've been asking for this for months already, but it's
>  >  just not going to happen, sorry. You want to abuse the standard Linux
>  >  alias mechanism for your personal (i.e. openfirmware) use, but that's
>  >  bad. Linux drivers shouldn't have to know whether they are used in
>  >  openfirmware trees and what device names are used there. And device
>  >  names as seen by user-space shouldn't vary depending on whether the
>  >  device comes from an openfirmware tree or not - otherwise all
>  >  user-space apps need to learn about both naming conversions.
>  >
>  >  Unsurprisingly, no other subsystem does what you propose.
>
>
> Then what are all of the PCI aliases doing?
>
>  The only difference is that you are recognizing the PCI group as a
>  naming authority and not recognizing the PowerPC device tree group.
>  But on the PowerPC platform that is our naming authority. That's why I
>  proposed adding the names on ifdefs so that they disappear on non
>  PowerPC platforms.
>
>  PS - adding an alias to a driver does not change the name of the
>  driver. My PCI e1000 module has about 100 aliases but it is always
>  e1000.

Here's my e1000e sysfs entry:

jonsmirl at terra:/sys/bus/pci/devices/0000:00:19.0$ ls
broken_parity_status  device  local_cpus  power      resource2         uevent
bus                   driver  modalias    resource   subsystem         vendor
class                 enable  msi_bus     resource0  subsystem_device
config                irq     net:eth0    resource1  subsystem_vendor

jonsmirl at terra:/sys/bus/pci/devices/0000:00:19.0$ cat modalias
pci:v00008086d0000104Bsv00001028sd000001DBbc02sc00i00

>>>>  This is the module alias that was used to load the driver.

jonsmirl at terra:/sys/bus/pci/devices/0000:00:19.0$ ls -l driver
lrwxrwxrwx 1 root root 0 2008-07-01 08:52 driver ->
../../../bus/pci/drivers/e1000e

>>>>  The driver is always e1000e no matter which alias was used to load it. "e1000e"  is controled by the name field of the driver structure.  That's the publicly visible name for the driver.

>>>>  Adding the OF aliases would change the modalias entry, not the driver name.

The i2c implementation is adding a field to a device entry that
contains the driver name. No other device drivers I could find do
this.

jonsmirl at terra:/sys/bus/i2c/devices/1-0050$ ls
bus  driver  eeprom  modalias  name  power  subsystem  uevent
jonsmirl at terra:/sys/bus/i2c/devices/1-0050$ cat name
eeprom
jonsmirl at terra:/sys/bus/i2c/devices/1-0050$ ls -l driver
lrwxrwxrwx 1 root root 0 2008-07-01 14:05 driver ->
../../../../bus/i2c/drivers/eeprom
jonsmirl at terra:/sys/bus/i2c/devices/1-0050$ cat modalias

jonsmirl at terra:/sys/bus/i2c/devices/1-0050$

I believe the correct way to get the driver name from sysfs is to
follow the driver link. The name field is probably legacy.  Other
drivers in the system don't have a name entry on the device node.

Is the user space i2c code looking at the modalias entry?

-- 
Jon Smirl
jonsmirl at gmail.com



More information about the Linuxppc-dev mailing list