From ef39770210090086f019b636bc197fa189433c05 Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Sun, 25 Oct 2015 22:03:30 +0100 Subject: state: make use of of_find_path_by_node() and add return -EPROBE_DEFER if device is not available MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Uwe Kleine-König Signed-off-by: Marc Kleine-Budde Signed-off-by: Sascha Hauer --- drivers/misc/state.c | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/drivers/misc/state.c b/drivers/misc/state.c index f3e366480f..22551478e6 100644 --- a/drivers/misc/state.c +++ b/drivers/misc/state.c @@ -52,34 +52,21 @@ static int state_probe(struct device_d *dev) /* guess if of_path is a path, not a phandle */ if (of_path[0] == '/' && len > 1) { ret = of_find_path(np, "backend", &path, 0); - if (ret) - goto out_release; } else { - struct device_d *dev; - struct cdev *cdev; partition_node = of_parse_phandle(np, "backend", 0); - if (!partition_node) { - ret = -ENODEV; - goto out_release; - } - - dev = of_find_device_by_node(partition_node); - if (!list_is_singular(&dev->cdevs)) { - ret = -ENODEV; - goto out_release; - } - - cdev = list_first_entry(&dev->cdevs, struct cdev, devices_list); - if (!cdev) { - ret = -ENODEV; - goto out_release; - } - - path = asprintf("/dev/%s", cdev->name); + if (!partition_node) + return -EINVAL; + of_path = partition_node->full_name; + ret = of_find_path_by_node(partition_node, &path, 0); } + if (ret == -ENODEV) + ret = -EPROBE_DEFER; + if (ret) + goto out_release; + ret = of_property_read_string(np, "backend-type", &backend_type); if (ret) { goto out_free; -- cgit v1.2.3