cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

drm_of.h (4372B)


      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/**
     20 * enum drm_lvds_dual_link_pixels - Pixel order of an LVDS dual-link connection
     21 * @DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS: Even pixels are expected to be generated
     22 *    from the first port, odd pixels from the second port
     23 * @DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS: Odd pixels are expected to be generated
     24 *    from the first port, even pixels from the second port
     25 */
     26enum drm_lvds_dual_link_pixels {
     27	DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS = 0,
     28	DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS = 1,
     29};
     30
     31#ifdef CONFIG_OF
     32uint32_t drm_of_crtc_port_mask(struct drm_device *dev,
     33			    struct device_node *port);
     34uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
     35				    struct device_node *port);
     36void drm_of_component_match_add(struct device *master,
     37				struct component_match **matchptr,
     38				int (*compare)(struct device *, void *),
     39				struct device_node *node);
     40int drm_of_component_probe(struct device *dev,
     41			   int (*compare_of)(struct device *, void *),
     42			   const struct component_master_ops *m_ops);
     43int drm_of_encoder_active_endpoint(struct device_node *node,
     44				   struct drm_encoder *encoder,
     45				   struct of_endpoint *endpoint);
     46int drm_of_find_panel_or_bridge(const struct device_node *np,
     47				int port, int endpoint,
     48				struct drm_panel **panel,
     49				struct drm_bridge **bridge);
     50int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
     51					  const struct device_node *port2);
     52int drm_of_lvds_get_data_mapping(const struct device_node *port);
     53#else
     54static inline uint32_t drm_of_crtc_port_mask(struct drm_device *dev,
     55					  struct device_node *port)
     56{
     57	return 0;
     58}
     59
     60static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
     61						  struct device_node *port)
     62{
     63	return 0;
     64}
     65
     66static inline void
     67drm_of_component_match_add(struct device *master,
     68			   struct component_match **matchptr,
     69			   int (*compare)(struct device *, void *),
     70			   struct device_node *node)
     71{
     72}
     73
     74static inline int
     75drm_of_component_probe(struct device *dev,
     76		       int (*compare_of)(struct device *, void *),
     77		       const struct component_master_ops *m_ops)
     78{
     79	return -EINVAL;
     80}
     81
     82static inline int drm_of_encoder_active_endpoint(struct device_node *node,
     83						 struct drm_encoder *encoder,
     84						 struct of_endpoint *endpoint)
     85{
     86	return -EINVAL;
     87}
     88static inline int drm_of_find_panel_or_bridge(const struct device_node *np,
     89					      int port, int endpoint,
     90					      struct drm_panel **panel,
     91					      struct drm_bridge **bridge)
     92{
     93	return -EINVAL;
     94}
     95
     96static inline int
     97drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
     98				      const struct device_node *port2)
     99{
    100	return -EINVAL;
    101}
    102
    103static inline int
    104drm_of_lvds_get_data_mapping(const struct device_node *port)
    105{
    106	return -EINVAL;
    107}
    108#endif
    109
    110/*
    111 * drm_of_panel_bridge_remove - remove panel bridge
    112 * @np: device tree node containing panel bridge output ports
    113 *
    114 * Remove the panel bridge of a given DT node's port and endpoint number
    115 *
    116 * Returns zero if successful, or one of the standard error codes if it fails.
    117 */
    118static inline int drm_of_panel_bridge_remove(const struct device_node *np,
    119					     int port, int endpoint)
    120{
    121#if IS_ENABLED(CONFIG_OF) && IS_ENABLED(CONFIG_DRM_PANEL_BRIDGE)
    122	struct drm_bridge *bridge;
    123	struct device_node *remote;
    124
    125	remote = of_graph_get_remote_node(np, port, endpoint);
    126	if (!remote)
    127		return -ENODEV;
    128
    129	bridge = of_drm_find_bridge(remote);
    130	drm_panel_bridge_remove(bridge);
    131
    132	return 0;
    133#else
    134	return -EINVAL;
    135#endif
    136}
    137
    138static inline int drm_of_encoder_active_endpoint_id(struct device_node *node,
    139						    struct drm_encoder *encoder)
    140{
    141	struct of_endpoint endpoint;
    142	int ret = drm_of_encoder_active_endpoint(node, encoder,
    143						 &endpoint);
    144
    145	return ret ?: endpoint.id;
    146}
    147
    148static inline int drm_of_encoder_active_port_id(struct device_node *node,
    149						struct drm_encoder *encoder)
    150{
    151	struct of_endpoint endpoint;
    152	int ret = drm_of_encoder_active_endpoint(node, encoder,
    153						 &endpoint);
    154
    155	return ret ?: endpoint.port;
    156}
    157
    158#endif /* __DRM_OF_H__ */