Loading drivers/of/platform.c +18 −37 Original line number Diff line number Diff line Loading @@ -210,13 +210,16 @@ struct platform_device *of_platform_device_create(struct device_node *np, EXPORT_SYMBOL(of_platform_device_create); /** * of_platform_bus_create - Create an OF device for a bus node and all its * children. Optionally recursively instantiate matching busses. * of_platform_bus_create() - Create a device for a node and its children. * @bus: device node of the bus to instantiate * @matches: match table, NULL to use the default, OF_NO_DEEP_PROBE to * disallow recursive creation of child busses * disallow recursive creation of child buses * @parent: parent for new device, or NULL for top level. * * Creates a platform_device for the provided device_node, and optionally * recursively create devices for all the child nodes. */ static int of_platform_bus_create(const struct device_node *bus, static int of_platform_bus_create(struct device_node *bus, const struct of_device_id *matches, struct device *parent) { Loading @@ -224,18 +227,13 @@ static int of_platform_bus_create(const struct device_node *bus, struct platform_device *dev; int rc = 0; dev = of_platform_device_create(bus, NULL, parent); if (!dev || !of_match_node(matches, bus)) return 0; for_each_child_of_node(bus, child) { pr_debug(" create child: %s\n", child->full_name); dev = of_platform_device_create(child, NULL, parent); if (dev == NULL) continue; if (!of_match_node(matches, child)) continue; if (rc == 0) { pr_debug(" and sub busses\n"); rc = of_platform_bus_create(child, matches, &dev->dev); } if (rc) { of_node_put(child); break; Loading @@ -245,7 +243,7 @@ static int of_platform_bus_create(const struct device_node *bus, } /** * of_platform_bus_probe - Probe the device-tree for platform busses * of_platform_bus_probe() - Probe the device-tree for platform buses * @root: parent of the first level to probe or NULL for the root of the tree * @matches: match table, NULL to use the default * @parent: parent to hook devices from, NULL for toplevel Loading @@ -258,7 +256,6 @@ int of_platform_bus_probe(struct device_node *root, struct device *parent) { struct device_node *child; struct platform_device *dev; int rc = 0; if (WARN_ON(!matches || matches == OF_NO_DEEP_PROBE)) Loading @@ -277,31 +274,15 @@ int of_platform_bus_probe(struct device_node *root, * children */ if (of_match_node(matches, root)) { pr_debug(" root match, create all sub devices\n"); dev = of_platform_device_create(root, NULL, parent); if (dev == NULL) goto bail; pr_debug(" create all sub busses\n"); rc = of_platform_bus_create(root, matches, &dev->dev); goto bail; } for_each_child_of_node(root, child) { rc = of_platform_bus_create(root, matches, parent); } else for_each_child_of_node(root, child) { if (!of_match_node(matches, child)) continue; pr_debug(" match: %s\n", child->full_name); dev = of_platform_device_create(child, NULL, parent); if (dev == NULL) continue; rc = of_platform_bus_create(child, matches, &dev->dev); if (rc) { of_node_put(child); rc = of_platform_bus_create(child, matches, parent); if (rc) break; } } bail: of_node_put(root); return rc; } Loading Loading
drivers/of/platform.c +18 −37 Original line number Diff line number Diff line Loading @@ -210,13 +210,16 @@ struct platform_device *of_platform_device_create(struct device_node *np, EXPORT_SYMBOL(of_platform_device_create); /** * of_platform_bus_create - Create an OF device for a bus node and all its * children. Optionally recursively instantiate matching busses. * of_platform_bus_create() - Create a device for a node and its children. * @bus: device node of the bus to instantiate * @matches: match table, NULL to use the default, OF_NO_DEEP_PROBE to * disallow recursive creation of child busses * disallow recursive creation of child buses * @parent: parent for new device, or NULL for top level. * * Creates a platform_device for the provided device_node, and optionally * recursively create devices for all the child nodes. */ static int of_platform_bus_create(const struct device_node *bus, static int of_platform_bus_create(struct device_node *bus, const struct of_device_id *matches, struct device *parent) { Loading @@ -224,18 +227,13 @@ static int of_platform_bus_create(const struct device_node *bus, struct platform_device *dev; int rc = 0; dev = of_platform_device_create(bus, NULL, parent); if (!dev || !of_match_node(matches, bus)) return 0; for_each_child_of_node(bus, child) { pr_debug(" create child: %s\n", child->full_name); dev = of_platform_device_create(child, NULL, parent); if (dev == NULL) continue; if (!of_match_node(matches, child)) continue; if (rc == 0) { pr_debug(" and sub busses\n"); rc = of_platform_bus_create(child, matches, &dev->dev); } if (rc) { of_node_put(child); break; Loading @@ -245,7 +243,7 @@ static int of_platform_bus_create(const struct device_node *bus, } /** * of_platform_bus_probe - Probe the device-tree for platform busses * of_platform_bus_probe() - Probe the device-tree for platform buses * @root: parent of the first level to probe or NULL for the root of the tree * @matches: match table, NULL to use the default * @parent: parent to hook devices from, NULL for toplevel Loading @@ -258,7 +256,6 @@ int of_platform_bus_probe(struct device_node *root, struct device *parent) { struct device_node *child; struct platform_device *dev; int rc = 0; if (WARN_ON(!matches || matches == OF_NO_DEEP_PROBE)) Loading @@ -277,31 +274,15 @@ int of_platform_bus_probe(struct device_node *root, * children */ if (of_match_node(matches, root)) { pr_debug(" root match, create all sub devices\n"); dev = of_platform_device_create(root, NULL, parent); if (dev == NULL) goto bail; pr_debug(" create all sub busses\n"); rc = of_platform_bus_create(root, matches, &dev->dev); goto bail; } for_each_child_of_node(root, child) { rc = of_platform_bus_create(root, matches, parent); } else for_each_child_of_node(root, child) { if (!of_match_node(matches, child)) continue; pr_debug(" match: %s\n", child->full_name); dev = of_platform_device_create(child, NULL, parent); if (dev == NULL) continue; rc = of_platform_bus_create(child, matches, &dev->dev); if (rc) { of_node_put(child); rc = of_platform_bus_create(child, matches, parent); if (rc) break; } } bail: of_node_put(root); return rc; } Loading