Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.11-rc4 193 lines 5.4 kB view raw
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#endif 10 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 connection 24 * @DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS: Even pixels are expected to be generated 25 * from the first port, odd pixels from the second port 26 * @DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS: Odd pixels are expected to be generated 27 * from the first port, even pixels from the second port 28 */ 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_OF 35uint32_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#else 63static 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 void 76drm_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 int 84drm_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 int 106drm_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 int 113drm_of_lvds_get_data_mapping(const struct device_node *port) 114{ 115 return -EINVAL; 116} 117 118static inline int 119drm_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 int 126drm_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#endif 134 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#else 138static inline struct 139mipi_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 bridge 147 * @np: device tree node containing panel bridge output ports 148 * 149 * Remove the panel bridge of a given DT node's port and endpoint number 150 * 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#else 169 return -EINVAL; 170#endif 171} 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__ */