xref: /dragonfly/sys/dev/drm/include/drm/drm_of.h (revision 7b1120e5)
1 #ifndef __DRM_OF_H__
2 #define __DRM_OF_H__
3 
4 #include <linux/of_graph.h>
5 
6 struct component_master_ops;
7 struct device;
8 struct drm_device;
9 struct drm_encoder;
10 struct device_node;
11 
12 #ifdef CONFIG_OF
13 extern uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
14 					   struct device_node *port);
15 extern int drm_of_component_probe(struct device *dev,
16 				  int (*compare_of)(struct device *, void *),
17 				  const struct component_master_ops *m_ops);
18 extern int drm_of_encoder_active_endpoint(struct device_node *node,
19 					  struct drm_encoder *encoder,
20 					  struct of_endpoint *endpoint);
21 #else
22 static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
23 						  struct device_node *port)
24 {
25 	return 0;
26 }
27 
28 static inline int
29 drm_of_component_probe(struct device *dev,
30 		       int (*compare_of)(struct device *, void *),
31 		       const struct component_master_ops *m_ops)
32 {
33 	return -EINVAL;
34 }
35 
36 static inline int drm_of_encoder_active_endpoint(struct device_node *node,
37 						 struct drm_encoder *encoder,
38 						 struct of_endpoint *endpoint)
39 {
40 	return -EINVAL;
41 }
42 #endif
43 
44 static inline int drm_of_encoder_active_endpoint_id(struct device_node *node,
45 						    struct drm_encoder *encoder)
46 {
47 	struct of_endpoint endpoint;
48 	int ret = drm_of_encoder_active_endpoint(node, encoder,
49 						 &endpoint);
50 
51 	return ret ?: endpoint.id;
52 }
53 
54 static inline int drm_of_encoder_active_port_id(struct device_node *node,
55 						struct drm_encoder *encoder)
56 {
57 	struct of_endpoint endpoint;
58 	int ret = drm_of_encoder_active_endpoint(node, encoder,
59 						 &endpoint);
60 
61 	return ret ?: endpoint.port;
62 }
63 
64 #endif /* __DRM_OF_H__ */
65