Thread (39 messages) 39 messages, 4 authors, 2015-08-09

Re: [PATCH v2 04/22] of/platform: add of_platform_device_find()

From: Rob Herring <hidden>
Date: 2015-07-28 13:40:10
Also in: linux-acpi, linux-arm-kernel, lkml

On Tue, Jul 28, 2015 at 8:19 AM, Tomeu Vizoso
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
From an arbitrary node in the tree, find the enclosing node that
corresponds to a platform device, as registered by
of_platform_populate().

This can be used to find out what device needs to be probed so the
dependency described by a given node is made available.

Signed-off-by: Tomeu Vizoso <redacted>
---

Changes in v2:
- Move the logic for finding a platform device from its firmware node to
  of/platform.c as it's not needed for ACPI nodes.

 drivers/of/platform.c       | 60 +++++++++++++++++++++++++++++++++++++++++++++
 include/linux/of_platform.h |  1 +
 2 files changed, 61 insertions(+)
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index ff27494cda8c..89c5cd513027 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -501,6 +501,66 @@ void of_platform_depopulate(struct device *parent)
 }
 EXPORT_SYMBOL_GPL(of_platform_depopulate);

+static bool of_is_platform(struct device_node *np)
+{
+       int count;
+
+       count = of_property_count_strings(np, "compatible");
+
+       /* The node has to have a compatible string */
+       if (!count)
+               return false;
+
+       /* But it cannot be just a simple memory-mapped bus */
+       if (count == 1 && of_match_node(of_default_bus_match_table, np))
+               return false;
+
+       /* But AMBA devices aren't platform devices */
+       if (of_device_is_compatible(np, "arm,primecell"))
+               return false;
+
+       /* Node is immediately below root */
+       if (!np->parent || !np->parent->parent)
+               return true;
+
+       /* If it's a node in a simple memory-mapped bus */
+       if (of_match_node(of_default_bus_match_table, np->parent))
+               return true;
This seems really fragile. What about platform devices which are
children of MFDs but are not "simple-mfd"?

Does of_find_device_by_node not work for you? That is probably not the
most efficient search, but we could fix that. We could add struct
device ptr to struct device_node and check without searching for
example.

Rob
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help