Re: [PATCH 1/2] i2c: consider devices with of_match_table during i2c device probing
From: Sergey Senozhatsky <hidden>
Date: 2020-08-26 05:25:50
Also in:
linux-i2c, lkml
On (20/08/26 07:08), Wolfram Sang wrote:
On Wed, Aug 26, 2020 at 01:29:37PM +0900, Sergey Senozhatsky wrote:quoted
Unlike acpi_match_device(), acpi_driver_match_device() does consider devices that provide of_match_table and performs of_compatible() matching for such devices. The key point here is that ACPI of_compatible() matching - acpi_of_match_device() - is part of ACPI and does not depend on CONFIG_OF. Consider the following case: o !CONFIG_OF system o probing of i2c device that provides .of_match_table, but no .id_table i2c_device_probe() ... if (!driver->id_table && !i2c_acpi_match_device(dev->driver->acpi_match_table, client) && !i2c_of_match_device(dev->driver->of_match_table, client)) { status = -ENODEV; goto put_sync_adapter; } i2c_of_match_device() depends on CONFIG_OF and, thus, is always false. i2c_acpi_match_device() does ACPI match only, no of_comtatible() matching takes place, even though the device provides .of_match_table and ACPI, technically, is capable of matching such device. The result is -ENODEV. Probing will succeed, however, if we'd use .of_match_table aware ACPI matching. Signed-off-by: Sergey Senozhatsky <redacted>We have currently this in for-current which is even removing i2c_acpi_match_device(): http://patchwork.ozlabs.org/project/linux-i2c/list/?series=196990&state=*
Oh, nice!
Can we go a bit further and use i2c_device_match() in i2c_device_probe()
instead of a mix of APIs from different subsystems?
E.g.
if (!driver->id_table &&
- !i2c_acpi_match_device(dev->driver->acpi_match_table, client) &&
- !i2c_of_match_device(dev->driver->of_match_table, client)) {
+ !(client && i2c_device_match(&client->dev, dev->driver))) {
status = -ENODEV;
goto put_sync_adapter;
}
-ss