Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef __DRM_OF_H__
  3#define __DRM_OF_H__
  4
  5#include <linux/of_graph.h>
  6#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DRM_PANEL_BRIDGE)
  7#include <drm/drm_bridge.h>
  8#endif
  9
 10struct component_master_ops;
 11struct component_match;
 12struct device;
 13struct drm_device;
 14struct drm_encoder;
 15struct drm_panel;
 16struct drm_bridge;
 17struct device_node;
 18
 19#ifdef CONFIG_OF
 20uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
 21				    struct device_node *port);
 22void drm_of_component_match_add(struct device *master,
 23				struct component_match **matchptr,
 24				int (*compare)(struct device *, void *),
 25				struct device_node *node);
 26int drm_of_component_probe(struct device *dev,
 27			   int (*compare_of)(struct device *, void *),
 28			   const struct component_master_ops *m_ops);
 29int drm_of_encoder_active_endpoint(struct device_node *node,
 30				   struct drm_encoder *encoder,
 31				   struct of_endpoint *endpoint);
 32int drm_of_find_panel_or_bridge(const struct device_node *np,
 33				int port, int endpoint,
 34				struct drm_panel **panel,
 35				struct drm_bridge **bridge);
 36#else
 37static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
 38						  struct device_node *port)
 39{
 40	return 0;
 41}
 42
 43static inline void
 44drm_of_component_match_add(struct device *master,
 45			   struct component_match **matchptr,
 46			   int (*compare)(struct device *, void *),
 47			   struct device_node *node)
 48{
 49}
 50
 51static inline int
 52drm_of_component_probe(struct device *dev,
 53		       int (*compare_of)(struct device *, void *),
 54		       const struct component_master_ops *m_ops)
 55{
 56	return -EINVAL;
 57}
 58
 59static inline int drm_of_encoder_active_endpoint(struct device_node *node,
 60						 struct drm_encoder *encoder,
 61						 struct of_endpoint *endpoint)
 62{
 63	return -EINVAL;
 64}
 65static inline int drm_of_find_panel_or_bridge(const struct device_node *np,
 66					      int port, int endpoint,
 67					      struct drm_panel **panel,
 68					      struct drm_bridge **bridge)
 69{
 70	return -EINVAL;
 71}
 72#endif
 73
 74/*
 75 * drm_of_panel_bridge_remove - remove panel bridge
 76 * @np: device tree node containing panel bridge output ports
 77 *
 78 * Remove the panel bridge of a given DT node's port and endpoint number
 79 *
 80 * Returns zero if successful, or one of the standard error codes if it fails.
 81 */
 82static inline int drm_of_panel_bridge_remove(const struct device_node *np,
 83					     int port, int endpoint)
 84{
 85#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DRM_PANEL_BRIDGE)
 86	struct drm_bridge *bridge;
 87	struct device_node *remote;
 88
 89	remote = of_graph_get_remote_node(np, port, endpoint);
 90	if (!remote)
 91		return -ENODEV;
 92
 93	bridge = of_drm_find_bridge(remote);
 94	drm_panel_bridge_remove(bridge);
 95
 96	return 0;
 97#else
 98	return -EINVAL;
 99#endif
100}
101
102static inline int drm_of_encoder_active_endpoint_id(struct device_node *node,
103						    struct drm_encoder *encoder)
104{
105	struct of_endpoint endpoint;
106	int ret = drm_of_encoder_active_endpoint(node, encoder,
107						 &endpoint);
108
109	return ret ?: endpoint.id;
110}
111
112static inline int drm_of_encoder_active_port_id(struct device_node *node,
113						struct drm_encoder *encoder)
114{
115	struct of_endpoint endpoint;
116	int ret = drm_of_encoder_active_endpoint(node, encoder,
117						 &endpoint);
118
119	return ret ?: endpoint.port;
120}
121
122#endif /* __DRM_OF_H__ */