diff options
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r-- | drivers/i2c/i2c-core.c | 30 |
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 | ||
1098 | int 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 | } | ||
1108 | EXPORT_SYMBOL_GPL(i2c_for_each_dev); | ||
1109 | |||
1096 | static int __process_new_driver(struct device *dev, void *data) | 1110 | static 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 | */ |
1159 | void i2c_del_driver(struct i2c_driver *driver) | 1171 | void 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 | } |
1584 | EXPORT_SYMBOL_GPL(i2c_new_probed_device); | 1594 | EXPORT_SYMBOL_GPL(i2c_new_probed_device); |
1585 | 1595 | ||
1586 | struct i2c_adapter *i2c_get_adapter(int id) | 1596 | struct 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 | ||