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 <[email protected]>
> Cc: Grant Likely <[email protected]>
> Signed-off-by: Linus Walleij <[email protected]>Applied to for-next, thanks! Thanks also to Grant for the insight.
signature.asc
Description: Digital signature
