On Mon, May 13, 2013 at 10:18:21PM +0200, Linus Walleij wrote: > This tries to address an issue found when writing an MFD driver > for the Nomadik STw481x PMICs: as the platform is using device > tree exclusively I want to specify the driver matching like > this: > > static const struct of_device_id stw481x_match[] = { > { .compatible = "st,stw4810", }, > { .compatible = "st,stw4811", }, > {}, > }; > > static struct i2c_driver stw481x_driver = { > .driver = { > .name = "stw481x", > .of_match_table = stw481x_match, > }, > .probe = stw481x_probe, > .remove = stw481x_remove, > }; > > However that turns out not to be possible: the I2C probe code > is written so that the probe() call is always passed a match > from i2c_match_id() using non-devicetree matches. > > This is probably why most devices using device tree for I2C > clients currently will pass no .of_match_table *at all* but > instead just use .id_table from struct i2c_driver to match > the device. As you realize that means that the whole idea with > compatible strings is discarded, and that is why we find strange > device tree I2C device compatible strings like "product" instead > of "vendor,product" as you could expect. > > Let's figure out how to fix this before the mess spreads. This > patch will allow probeing devices with only an of_match_table > as per above, and will pass NULL as the second argument to the > probe() function. If the driver wants to deduce secondary info > from the struct of_device_id .data field, it has to call > of_match_device() on its own match table in the probe function > device tree probe path. > > If drivers define both an .of_match_table *AND* a i2c_driver > .id_table, the .of_match_table will take precedence, just > as is done in the i2c_device_match() function in i2c-core.c. > > I2C devices probed from device tree should subsequently be > fixed to handle the case where of_match_table() is > used (I think none of them do that today), and platforms should > fix their device trees to use compatible strings for I2C devices > instead of setting the name to Linux device driver names as is > done in multiple cases today. > > Cc: Rob Herring <rob.herring@xxxxxxxxxxx> > Cc: Grant Likely <grant.likely@xxxxxxxxxx> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Applied to for-next, thanks! Thanks also to Grant for the insight.
Attachment:
signature.asc
Description: Digital signature