|
@@ -24,6 +24,7 @@ void of_register_i2c_devices(struct i2c_adapter *adap,
|
|
|
|
|
|
for_each_child_of_node(adap_node, node) {
|
|
for_each_child_of_node(adap_node, node) {
|
|
struct i2c_board_info info = {};
|
|
struct i2c_board_info info = {};
|
|
|
|
+ struct dev_archdata dev_ad = {};
|
|
const u32 *addr;
|
|
const u32 *addr;
|
|
int len;
|
|
int len;
|
|
|
|
|
|
@@ -41,6 +42,9 @@ void of_register_i2c_devices(struct i2c_adapter *adap,
|
|
|
|
|
|
info.addr = *addr;
|
|
info.addr = *addr;
|
|
|
|
|
|
|
|
+ dev_archdata_set_node(&dev_ad, node);
|
|
|
|
+ info.archdata = &dev_ad;
|
|
|
|
+
|
|
request_module("%s", info.type);
|
|
request_module("%s", info.type);
|
|
|
|
|
|
result = i2c_new_device(adap, &info);
|
|
result = i2c_new_device(adap, &info);
|
|
@@ -51,6 +55,13 @@ void of_register_i2c_devices(struct i2c_adapter *adap,
|
|
irq_dispose_mapping(info.irq);
|
|
irq_dispose_mapping(info.irq);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Get the node to not lose the dev_archdata->of_node.
|
|
|
|
+ * Currently there is no way to put it back, as well as no
|
|
|
|
+ * of_unregister_i2c_devices() call.
|
|
|
|
+ */
|
|
|
|
+ of_node_get(node);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(of_register_i2c_devices);
|
|
EXPORT_SYMBOL(of_register_i2c_devices);
|