brintos

brintos / linux-shallow public Read only

0
0
Text · 5.2 KiB · 02d1cdd Raw
194 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __DRM_OF_H__3#define __DRM_OF_H__4 5#include <linux/err.h>6#include <linux/of_graph.h>7#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DRM_PANEL_BRIDGE)8#include <drm/drm_bridge.h>9#endif10 11struct component_master_ops;12struct component_match;13struct device;14struct drm_device;15struct drm_encoder;16struct drm_panel;17struct drm_bridge;18struct device_node;19struct mipi_dsi_device_info;20struct mipi_dsi_host;21 22/**23 * enum drm_lvds_dual_link_pixels - Pixel order of an LVDS dual-link connection24 * @DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS: Even pixels are expected to be generated25 *    from the first port, odd pixels from the second port26 * @DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS: Odd pixels are expected to be generated27 *    from the first port, even pixels from the second port28 */29enum drm_lvds_dual_link_pixels {30	DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS = 0,31	DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS = 1,32};33 34#ifdef CONFIG_OF35uint32_t drm_of_crtc_port_mask(struct drm_device *dev,36			    struct device_node *port);37uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,38				    struct device_node *port);39void drm_of_component_match_add(struct device *master,40				struct component_match **matchptr,41				int (*compare)(struct device *, void *),42				struct device_node *node);43int drm_of_component_probe(struct device *dev,44			   int (*compare_of)(struct device *, void *),45			   const struct component_master_ops *m_ops);46int drm_of_encoder_active_endpoint(struct device_node *node,47				   struct drm_encoder *encoder,48				   struct of_endpoint *endpoint);49int drm_of_find_panel_or_bridge(const struct device_node *np,50				int port, int endpoint,51				struct drm_panel **panel,52				struct drm_bridge **bridge);53int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,54					  const struct device_node *port2);55int drm_of_lvds_get_data_mapping(const struct device_node *port);56int drm_of_get_data_lanes_count(const struct device_node *endpoint,57				const unsigned int min, const unsigned int max);58int drm_of_get_data_lanes_count_ep(const struct device_node *port,59				   int port_reg, int reg,60				   const unsigned int min,61				   const unsigned int max);62#else63static inline uint32_t drm_of_crtc_port_mask(struct drm_device *dev,64					  struct device_node *port)65{66	return 0;67}68 69static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,70						  struct device_node *port)71{72	return 0;73}74 75static inline void76drm_of_component_match_add(struct device *master,77			   struct component_match **matchptr,78			   int (*compare)(struct device *, void *),79			   struct device_node *node)80{81}82 83static inline int84drm_of_component_probe(struct device *dev,85		       int (*compare_of)(struct device *, void *),86		       const struct component_master_ops *m_ops)87{88	return -EINVAL;89}90 91static inline int drm_of_encoder_active_endpoint(struct device_node *node,92						 struct drm_encoder *encoder,93						 struct of_endpoint *endpoint)94{95	return -EINVAL;96}97static inline int drm_of_find_panel_or_bridge(const struct device_node *np,98					      int port, int endpoint,99					      struct drm_panel **panel,100					      struct drm_bridge **bridge)101{102	return -EINVAL;103}104 105static inline int106drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,107				      const struct device_node *port2)108{109	return -EINVAL;110}111 112static inline int113drm_of_lvds_get_data_mapping(const struct device_node *port)114{115	return -EINVAL;116}117 118static inline int119drm_of_get_data_lanes_count(const struct device_node *endpoint,120			    const unsigned int min, const unsigned int max)121{122	return -EINVAL;123}124 125static inline int126drm_of_get_data_lanes_count_ep(const struct device_node *port,127			       int port_reg, int reg,128			       const unsigned int min,129			       const unsigned int max)130{131	return -EINVAL;132}133#endif134 135#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DRM_MIPI_DSI)136struct mipi_dsi_host *drm_of_get_dsi_bus(struct device *dev);137#else138static inline struct139mipi_dsi_host *drm_of_get_dsi_bus(struct device *dev)140{141	return ERR_PTR(-EINVAL);142}143#endif /* CONFIG_OF && CONFIG_DRM_MIPI_DSI */144 145/*146 * drm_of_panel_bridge_remove - remove panel bridge147 * @np: device tree node containing panel bridge output ports148 *149 * Remove the panel bridge of a given DT node's port and endpoint number150 *151 * Returns zero if successful, or one of the standard error codes if it fails.152 */153static inline int drm_of_panel_bridge_remove(const struct device_node *np,154					     int port, int endpoint)155{156#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DRM_PANEL_BRIDGE)157	struct drm_bridge *bridge;158	struct device_node *remote;159 160	remote = of_graph_get_remote_node(np, port, endpoint);161	if (!remote)162		return -ENODEV;163 164	bridge = of_drm_find_bridge(remote);165	drm_panel_bridge_remove(bridge);166 167	return 0;168#else169	return -EINVAL;170#endif171}172 173static inline int drm_of_encoder_active_endpoint_id(struct device_node *node,174						    struct drm_encoder *encoder)175{176	struct of_endpoint endpoint;177	int ret = drm_of_encoder_active_endpoint(node, encoder,178						 &endpoint);179 180	return ret ?: endpoint.id;181}182 183static inline int drm_of_encoder_active_port_id(struct device_node *node,184						struct drm_encoder *encoder)185{186	struct of_endpoint endpoint;187	int ret = drm_of_encoder_active_endpoint(node, encoder,188						 &endpoint);189 190	return ret ?: endpoint.port;191}192 193#endif /* __DRM_OF_H__ */194