diff --git a/drivers/of/barebox.c b/drivers/of/barebox.c index 8c05924..2246742 100644 --- a/drivers/of/barebox.c +++ b/drivers/of/barebox.c @@ -35,20 +35,6 @@ static LIST_HEAD(of_partition_list); -struct device_d *of_find_device_by_node_path(const char *path) -{ - struct device_d *dev; - - for_each_device(dev) { - if (!dev->device_node) - continue; - if (!strcmp(path, dev->device_node->full_name)) - return dev; - } - - return NULL; -} - static int environment_probe(struct device_d *dev) { char *path; diff --git a/drivers/of/of_path.c b/drivers/of/of_path.c index ab8618e..6a2d634 100644 --- a/drivers/of/of_path.c +++ b/drivers/of/of_path.c @@ -31,6 +31,20 @@ int (*parse)(struct of_path *op, const char *str); }; +struct device_d *of_find_device_by_node_path(const char *path) +{ + struct device_d *dev; + + for_each_device(dev) { + if (!dev->device_node) + continue; + if (!strcmp(path, dev->device_node->full_name)) + return dev; + } + + return NULL; +} + /** * of_path_type_partname - find a partition based on physical device and * partition name @@ -134,6 +148,9 @@ device_detect(op.dev); + if (list_is_singular(&op.dev->cdevs)) + op.cdev = list_first_entry(&op.dev->cdevs, struct cdev, devices_list); + i = 1; while (1) { diff --git a/drivers/of/partition.c b/drivers/of/partition.c index 074be09..e2ddec5 100644 --- a/drivers/of/partition.c +++ b/drivers/of/partition.c @@ -60,6 +60,8 @@ filename = asprintf("%s.%s", cdev->name, partname); new = devfs_add_partition(cdev->name, offset, size, flags, filename); + if (new && new->dev) + new->dev->device_node = node; free(filename);