[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20250620173121.15752-1-abd.masalkhi@gmail.com>
Date: Fri, 20 Jun 2025 17:31:21 +0000
From: Abd-Alrhman Masalkhi <abd.masalkhi@...il.com>
To: wsa+renesas@...g-engineering.com,
linux-i2c@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [RFC] i2c: Skip i2c_for_each_dev() when detection is not supported
While reviewing the I2C core, I noticed that i2c_for_each_dev() is
invoked in i2c_register_driver() regardless of whether the driver
actually supports device detection, as follow:
/* When registration returns, the driver core
* will have called probe() for all matching-dbut-unbound devices.
*/
res = driver_register(&driver->driver);
if (res)
return res;
pr_debug("driver [%s] registered\n", driver->driver.name);
i2c_for_each_dev(driver, __process_new_driver);
However, the first check inside i2c_detect() is:
if (!driver->detect || !address_list)
return 0;
This check happens only after iterating over all registered I2C devices
via i2c_for_each_dev(). Unless I am missing something, this seems to me
just wasting processing time for drivers that do not support detection.
To avoid this, I propose guarding the call to i2c_for_each_dev() like this:
/* When registration returns, the driver core
* will have called probe() for all matching-dbut-unbound devices.
*/
res = driver_register(&driver->driver);
if (res)
return res;
pr_debug("driver [%s] registered\n", driver->driver.name);
if (driver->detect && driver->address_list)
i2c_for_each_dev(driver, __process_new_driver);
This would ensure that i2c_detect() is only called when there is an
actual possibility of detection succeeding, making the driver registration
path more efficient.
Please let me know if this change makes sense. I would be happy to submit
a patch.
Best regards,
Abd-Alrhman Masalkhi
Powered by blists - more mailing lists