of_graph.h (3636B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * OF graph binding parsing helpers 4 * 5 * Copyright (C) 2012 - 2013 Samsung Electronics Co., Ltd. 6 * Author: Sylwester Nawrocki <s.nawrocki@samsung.com> 7 * 8 * Copyright (C) 2012 Renesas Electronics Corp. 9 * Author: Guennadi Liakhovetski <g.liakhovetski@gmx.de> 10 */ 11#ifndef __LINUX_OF_GRAPH_H 12#define __LINUX_OF_GRAPH_H 13 14#include <linux/types.h> 15#include <linux/errno.h> 16 17/** 18 * struct of_endpoint - the OF graph endpoint data structure 19 * @port: identifier (value of reg property) of a port this endpoint belongs to 20 * @id: identifier (value of reg property) of this endpoint 21 * @local_node: pointer to device_node of this endpoint 22 */ 23struct of_endpoint { 24 unsigned int port; 25 unsigned int id; 26 const struct device_node *local_node; 27}; 28 29/** 30 * for_each_endpoint_of_node - iterate over every endpoint in a device node 31 * @parent: parent device node containing ports and endpoints 32 * @child: loop variable pointing to the current endpoint node 33 * 34 * When breaking out of the loop, of_node_put(child) has to be called manually. 35 */ 36#define for_each_endpoint_of_node(parent, child) \ 37 for (child = of_graph_get_next_endpoint(parent, NULL); child != NULL; \ 38 child = of_graph_get_next_endpoint(parent, child)) 39 40#ifdef CONFIG_OF 41bool of_graph_is_present(const struct device_node *node); 42int of_graph_parse_endpoint(const struct device_node *node, 43 struct of_endpoint *endpoint); 44int of_graph_get_endpoint_count(const struct device_node *np); 45struct device_node *of_graph_get_port_by_id(struct device_node *node, u32 id); 46struct device_node *of_graph_get_next_endpoint(const struct device_node *parent, 47 struct device_node *previous); 48struct device_node *of_graph_get_endpoint_by_regs( 49 const struct device_node *parent, int port_reg, int reg); 50struct device_node *of_graph_get_remote_endpoint( 51 const struct device_node *node); 52struct device_node *of_graph_get_port_parent(struct device_node *node); 53struct device_node *of_graph_get_remote_port_parent( 54 const struct device_node *node); 55struct device_node *of_graph_get_remote_port(const struct device_node *node); 56struct device_node *of_graph_get_remote_node(const struct device_node *node, 57 u32 port, u32 endpoint); 58#else 59 60static inline bool of_graph_is_present(const struct device_node *node) 61{ 62 return false; 63} 64 65static inline int of_graph_parse_endpoint(const struct device_node *node, 66 struct of_endpoint *endpoint) 67{ 68 return -ENOSYS; 69} 70 71static inline int of_graph_get_endpoint_count(const struct device_node *np) 72{ 73 return 0; 74} 75 76static inline struct device_node *of_graph_get_port_by_id( 77 struct device_node *node, u32 id) 78{ 79 return NULL; 80} 81 82static inline struct device_node *of_graph_get_next_endpoint( 83 const struct device_node *parent, 84 struct device_node *previous) 85{ 86 return NULL; 87} 88 89static inline struct device_node *of_graph_get_endpoint_by_regs( 90 const struct device_node *parent, int port_reg, int reg) 91{ 92 return NULL; 93} 94 95static inline struct device_node *of_graph_get_remote_endpoint( 96 const struct device_node *node) 97{ 98 return NULL; 99} 100 101static inline struct device_node *of_graph_get_port_parent( 102 struct device_node *node) 103{ 104 return NULL; 105} 106 107static inline struct device_node *of_graph_get_remote_port_parent( 108 const struct device_node *node) 109{ 110 return NULL; 111} 112 113static inline struct device_node *of_graph_get_remote_port( 114 const struct device_node *node) 115{ 116 return NULL; 117} 118static inline struct device_node *of_graph_get_remote_node( 119 const struct device_node *node, 120 u32 port, u32 endpoint) 121{ 122 return NULL; 123} 124 125#endif /* CONFIG_OF */ 126 127#endif /* __LINUX_OF_GRAPH_H */