mirror of https://gitee.com/openkylin/linux.git
i2c: Export i2c_for_each_dev
Introduce i2c_for_each_dev(), an i2c device iterator with proper locking for use by i2c-dev. This is needed so that we can get rid of the attach_adapter and detach_adapter legacy callback functions. Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
parent
0c31f8e572
commit
7ae31482a8
|
@ -1091,6 +1091,18 @@ EXPORT_SYMBOL(i2c_del_adapter);
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
int i2c_for_each_dev(void *data, int (*fn)(struct device *, void *))
|
||||
{
|
||||
int res;
|
||||
|
||||
mutex_lock(&core_lock);
|
||||
res = bus_for_each_dev(&i2c_bus_type, NULL, data, fn);
|
||||
mutex_unlock(&core_lock);
|
||||
|
||||
return res;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(i2c_for_each_dev);
|
||||
|
||||
static int __process_new_driver(struct device *dev, void *data)
|
||||
{
|
||||
if (dev->type != &i2c_adapter_type)
|
||||
|
@ -1134,9 +1146,7 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
|
|||
|
||||
INIT_LIST_HEAD(&driver->clients);
|
||||
/* Walk the adapters that are already present */
|
||||
mutex_lock(&core_lock);
|
||||
bus_for_each_dev(&i2c_bus_type, NULL, driver, __process_new_driver);
|
||||
mutex_unlock(&core_lock);
|
||||
i2c_for_each_dev(driver, __process_new_driver);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1156,9 +1166,7 @@ static int __process_removed_driver(struct device *dev, void *data)
|
|||
*/
|
||||
void i2c_del_driver(struct i2c_driver *driver)
|
||||
{
|
||||
mutex_lock(&core_lock);
|
||||
bus_for_each_dev(&i2c_bus_type, NULL, driver, __process_removed_driver);
|
||||
mutex_unlock(&core_lock);
|
||||
i2c_for_each_dev(driver, __process_removed_driver);
|
||||
|
||||
driver_unregister(&driver->driver);
|
||||
pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
|
||||
|
|
|
@ -395,6 +395,8 @@ i2c_parent_is_i2c_adapter(const struct i2c_adapter *adapter)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int i2c_for_each_dev(void *data, int (*fn)(struct device *, void *));
|
||||
|
||||
/* Adapter locking functions, exported for shared pin cases */
|
||||
void i2c_lock_adapter(struct i2c_adapter *);
|
||||
void i2c_unlock_adapter(struct i2c_adapter *);
|
||||
|
|
Loading…
Reference in New Issue