Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
[sfrench/cifs-2.6.git] / drivers / of / base.c
index 391f91c0bf55d54d3d696270f1e4419b196fb6ba..69f85c07d17fc24718861b41618c6a8c0c493183 100644 (file)
@@ -495,6 +495,30 @@ int of_modalias_node(struct device_node *node, char *modalias, int len)
 }
 EXPORT_SYMBOL_GPL(of_modalias_node);
 
+/**
+ * of_parse_phandle - Resolve a phandle property to a device_node pointer
+ * @np: Pointer to device node holding phandle property
+ * @phandle_name: Name of property holding a phandle value
+ * @index: For properties holding a table of phandles, this is the index into
+ *         the table
+ *
+ * Returns the device_node pointer with refcount incremented.  Use
+ * of_node_put() on it when done.
+ */
+struct device_node *
+of_parse_phandle(struct device_node *np, const char *phandle_name, int index)
+{
+       const phandle *phandle;
+       int size;
+
+       phandle = of_get_property(np, phandle_name, &size);
+       if ((!phandle) || (size < sizeof(*phandle) * (index + 1)))
+               return NULL;
+
+       return of_find_node_by_phandle(phandle[index]);
+}
+EXPORT_SYMBOL(of_parse_phandle);
+
 /**
  * of_parse_phandles_with_args - Find a node pointed by phandle in a list
  * @np:                pointer to a device tree node containing a list