at v5.5 3.5 kB view raw
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 41int of_graph_parse_endpoint(const struct device_node *node, 42 struct of_endpoint *endpoint); 43int of_graph_get_endpoint_count(const struct device_node *np); 44struct device_node *of_graph_get_port_by_id(struct device_node *node, u32 id); 45struct device_node *of_graph_get_next_endpoint(const struct device_node *parent, 46 struct device_node *previous); 47struct device_node *of_graph_get_endpoint_by_regs( 48 const struct device_node *parent, int port_reg, int reg); 49struct device_node *of_graph_get_remote_endpoint( 50 const struct device_node *node); 51struct device_node *of_graph_get_port_parent(struct device_node *node); 52struct device_node *of_graph_get_remote_port_parent( 53 const struct device_node *node); 54struct device_node *of_graph_get_remote_port(const struct device_node *node); 55struct device_node *of_graph_get_remote_node(const struct device_node *node, 56 u32 port, u32 endpoint); 57#else 58 59static inline int of_graph_parse_endpoint(const struct device_node *node, 60 struct of_endpoint *endpoint) 61{ 62 return -ENOSYS; 63} 64 65static inline int of_graph_get_endpoint_count(const struct device_node *np) 66{ 67 return 0; 68} 69 70static inline struct device_node *of_graph_get_port_by_id( 71 struct device_node *node, u32 id) 72{ 73 return NULL; 74} 75 76static inline struct device_node *of_graph_get_next_endpoint( 77 const struct device_node *parent, 78 struct device_node *previous) 79{ 80 return NULL; 81} 82 83static inline struct device_node *of_graph_get_endpoint_by_regs( 84 const struct device_node *parent, int port_reg, int reg) 85{ 86 return NULL; 87} 88 89static inline struct device_node *of_graph_get_remote_endpoint( 90 const struct device_node *node) 91{ 92 return NULL; 93} 94 95static inline struct device_node *of_graph_get_port_parent( 96 struct device_node *node) 97{ 98 return NULL; 99} 100 101static inline struct device_node *of_graph_get_remote_port_parent( 102 const struct device_node *node) 103{ 104 return NULL; 105} 106 107static inline struct device_node *of_graph_get_remote_port( 108 const struct device_node *node) 109{ 110 return NULL; 111} 112static inline struct device_node *of_graph_get_remote_node( 113 const struct device_node *node, 114 u32 port, u32 endpoint) 115{ 116 return NULL; 117} 118 119#endif /* CONFIG_OF */ 120 121#endif /* __LINUX_OF_GRAPH_H */