summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/i2c/muxes/i2c-mux-uclass.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/drivers/i2c/muxes/i2c-mux-uclass.c b/drivers/i2c/muxes/i2c-mux-uclass.c
index a680ee1762..8b1149997a 100644
--- a/drivers/i2c/muxes/i2c-mux-uclass.c
+++ b/drivers/i2c/muxes/i2c-mux-uclass.c
@@ -59,11 +59,34 @@ static int i2c_mux_post_bind(struct udevice *mux)
dev_for_each_subnode(node, mux) {
struct udevice *dev;
const char *name;
+ const char *arrow = "->";
+ char *full_name;
+ int parent_name_len, arrow_len, mux_name_len, name_len;
name = ofnode_get_name(node);
- ret = device_bind_driver_to_node(mux, "i2c_mux_bus_drv", name,
- node, &dev);
- debug(" - bind ret=%d, %s\n", ret, dev ? dev->name : NULL);
+
+ /* Calculate lenghts of strings */
+ parent_name_len = strlen(mux->parent->name);
+ arrow_len = strlen(arrow);
+ mux_name_len = strlen(mux->name);
+ name_len = strlen(name);
+
+ full_name = calloc(1, parent_name_len + arrow_len +
+ mux_name_len + arrow_len + name_len + 1);
+ if (!full_name)
+ return -ENOMEM;
+
+ /* Compose bus name */
+ strcat(full_name, mux->parent->name);
+ strcat(full_name, arrow);
+ strcat(full_name, mux->name);
+ strcat(full_name, arrow);
+ strcat(full_name, name);
+
+ ret = device_bind_driver_to_node(mux, "i2c_mux_bus_drv",
+ full_name, node, &dev);
+ debug(" - bind ret=%d, %s, req_seq %d\n", ret,
+ dev ? dev->name : NULL, dev->req_seq);
if (ret)
return ret;
}