|
@@ -2232,6 +2232,39 @@ struct device_node *of_graph_get_next_endpoint(const struct device_node *parent,
|
|
|
}
|
|
|
EXPORT_SYMBOL(of_graph_get_next_endpoint);
|
|
|
|
|
|
+/**
|
|
|
+ * of_graph_get_endpoint_by_regs() - get endpoint node of specific identifiers
|
|
|
+ * @parent: pointer to the parent device node
|
|
|
+ * @port_reg: identifier (value of reg property) of the parent port node
|
|
|
+ * @reg: identifier (value of reg property) of the endpoint node
|
|
|
+ *
|
|
|
+ * Return: An 'endpoint' node pointer which is identified by reg and at the same
|
|
|
+ * is the child of a port node identified by port_reg. reg and port_reg are
|
|
|
+ * ignored when they are -1.
|
|
|
+ */
|
|
|
+struct device_node *of_graph_get_endpoint_by_regs(
|
|
|
+ const struct device_node *parent, int port_reg, int reg)
|
|
|
+{
|
|
|
+ struct of_endpoint endpoint;
|
|
|
+ struct device_node *node, *prev_node = NULL;
|
|
|
+
|
|
|
+ while (1) {
|
|
|
+ node = of_graph_get_next_endpoint(parent, prev_node);
|
|
|
+ of_node_put(prev_node);
|
|
|
+ if (!node)
|
|
|
+ break;
|
|
|
+
|
|
|
+ of_graph_parse_endpoint(node, &endpoint);
|
|
|
+ if (((port_reg == -1) || (endpoint.port == port_reg)) &&
|
|
|
+ ((reg == -1) || (endpoint.id == reg)))
|
|
|
+ return node;
|
|
|
+
|
|
|
+ prev_node = node;
|
|
|
+ }
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* of_graph_get_remote_port_parent() - get remote port's parent node
|
|
|
* @node: pointer to a local endpoint device_node
|