aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/i2c-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r--drivers/i2c/i2c-core.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index f0bd5bcdf563..e5f76a0372fd 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -537,9 +537,7 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
537 client->dev.parent = &client->adapter->dev; 537 client->dev.parent = &client->adapter->dev;
538 client->dev.bus = &i2c_bus_type; 538 client->dev.bus = &i2c_bus_type;
539 client->dev.type = &i2c_client_type; 539 client->dev.type = &i2c_client_type;
540#ifdef CONFIG_OF
541 client->dev.of_node = info->of_node; 540 client->dev.of_node = info->of_node;
542#endif
543 541
544 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap), 542 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
545 client->addr); 543 client->addr);
@@ -799,6 +797,9 @@ static int i2c_do_add_adapter(struct i2c_driver *driver,
799 797
800 /* Let legacy drivers scan this bus for matching devices */ 798 /* Let legacy drivers scan this bus for matching devices */
801 if (driver->attach_adapter) { 799 if (driver->attach_adapter) {
800 dev_warn(&adap->dev, "attach_adapter method is deprecated\n");
801 dev_warn(&adap->dev, "Please use another way to instantiate "
802 "your i2c_client\n");
802 /* We ignore the return code; if it fails, too bad */ 803 /* We ignore the return code; if it fails, too bad */
803 driver->attach_adapter(adap); 804 driver->attach_adapter(adap);
804 } 805 }
@@ -983,6 +984,7 @@ static int i2c_do_del_adapter(struct i2c_driver *driver,
983 984
984 if (!driver->detach_adapter) 985 if (!driver->detach_adapter)
985 return 0; 986 return 0;
987 dev_warn(&adapter->dev, "detach_adapter method is deprecated\n");
986 res = driver->detach_adapter(adapter); 988 res = driver->detach_adapter(adapter);
987 if (res) 989 if (res)
988 dev_err(&adapter->dev, "detach_adapter failed (%d) " 990 dev_err(&adapter->dev, "detach_adapter failed (%d) "
@@ -1093,6 +1095,18 @@ EXPORT_SYMBOL(i2c_del_adapter);
1093 1095
1094/* ------------------------------------------------------------------------- */ 1096/* ------------------------------------------------------------------------- */
1095 1097
1098int i2c_for_each_dev(void *data, int (*fn)(struct device *, void *))
1099{
1100 int res;
1101
1102 mutex_lock(&core_lock);
1103 res = bus_for_each_dev(&i2c_bus_type, NULL, data, fn);
1104 mutex_unlock(&core_lock);
1105
1106 return res;
1107}
1108EXPORT_SYMBOL_GPL(i2c_for_each_dev);
1109
1096static int __process_new_driver(struct device *dev, void *data) 1110static int __process_new_driver(struct device *dev, void *data)
1097{ 1111{
1098 if (dev->type != &i2c_adapter_type) 1112 if (dev->type != &i2c_adapter_type)
@@ -1136,9 +1150,7 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
1136 1150
1137 INIT_LIST_HEAD(&driver->clients); 1151 INIT_LIST_HEAD(&driver->clients);
1138 /* Walk the adapters that are already present */ 1152 /* Walk the adapters that are already present */
1139 mutex_lock(&core_lock); 1153 i2c_for_each_dev(driver, __process_new_driver);
1140 bus_for_each_dev(&i2c_bus_type, NULL, driver, __process_new_driver);
1141 mutex_unlock(&core_lock);
1142 1154
1143 return 0; 1155 return 0;
1144} 1156}
@@ -1158,9 +1170,7 @@ static int __process_removed_driver(struct device *dev, void *data)
1158 */ 1170 */
1159void i2c_del_driver(struct i2c_driver *driver) 1171void i2c_del_driver(struct i2c_driver *driver)
1160{ 1172{
1161 mutex_lock(&core_lock); 1173 i2c_for_each_dev(driver, __process_removed_driver);
1162 bus_for_each_dev(&i2c_bus_type, NULL, driver, __process_removed_driver);
1163 mutex_unlock(&core_lock);
1164 1174
1165 driver_unregister(&driver->driver); 1175 driver_unregister(&driver->driver);
1166 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name); 1176 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
@@ -1583,12 +1593,12 @@ i2c_new_probed_device(struct i2c_adapter *adap,
1583} 1593}
1584EXPORT_SYMBOL_GPL(i2c_new_probed_device); 1594EXPORT_SYMBOL_GPL(i2c_new_probed_device);
1585 1595
1586struct i2c_adapter *i2c_get_adapter(int id) 1596struct i2c_adapter *i2c_get_adapter(int nr)
1587{ 1597{
1588 struct i2c_adapter *adapter; 1598 struct i2c_adapter *adapter;
1589 1599
1590 mutex_lock(&core_lock); 1600 mutex_lock(&core_lock);
1591 adapter = idr_find(&i2c_adapter_idr, id); 1601 adapter = idr_find(&i2c_adapter_idr, nr);
1592 if (adapter && !try_module_get(adapter->owner)) 1602 if (adapter && !try_module_get(adapter->owner))
1593 adapter = NULL; 1603 adapter = NULL;
1594 1604