128 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * OF graph binding parsing helpers4 *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_H12#define __LINUX_OF_GRAPH_H13 14#include <linux/types.h>15#include <linux/errno.h>16 17/**18 * struct of_endpoint - the OF graph endpoint data structure19 * @port: identifier (value of reg property) of a port this endpoint belongs to20 * @id: identifier (value of reg property) of this endpoint21 * @local_node: pointer to device_node of this endpoint22 */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 node31 * @parent: parent device node containing ports and endpoints32 * @child: loop variable pointing to the current endpoint node33 *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_OF41bool of_graph_is_present(const struct device_node *node);42int of_graph_parse_endpoint(const struct device_node *node,43 struct of_endpoint *endpoint);44unsigned int 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#else59 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 unsigned 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 */128