LCOV - code coverage report
Current view: top level - include/drm - drm_modes.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 1 0.0 %
Date: 2022-12-09 01:23:36 Functions: 0 0 -

          Line data    Source code
       1             : /*
       2             :  * Copyright © 2006 Keith Packard
       3             :  * Copyright © 2007-2008 Dave Airlie
       4             :  * Copyright © 2007-2008 Intel Corporation
       5             :  *   Jesse Barnes <jesse.barnes@intel.com>
       6             :  * Copyright © 2014 Intel Corporation
       7             :  *   Daniel Vetter <daniel.vetter@ffwll.ch>
       8             :  *
       9             :  * Permission is hereby granted, free of charge, to any person obtaining a
      10             :  * copy of this software and associated documentation files (the "Software"),
      11             :  * to deal in the Software without restriction, including without limitation
      12             :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      13             :  * and/or sell copies of the Software, and to permit persons to whom the
      14             :  * Software is furnished to do so, subject to the following conditions:
      15             :  *
      16             :  * The above copyright notice and this permission notice shall be included in
      17             :  * all copies or substantial portions of the Software.
      18             :  *
      19             :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      20             :  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      21             :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
      22             :  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
      23             :  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
      24             :  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
      25             :  * OTHER DEALINGS IN THE SOFTWARE.
      26             :  */
      27             : #ifndef __DRM_MODES_H__
      28             : #define __DRM_MODES_H__
      29             : 
      30             : #include <linux/hdmi.h>
      31             : 
      32             : #include <drm/drm_mode_object.h>
      33             : #include <drm/drm_connector.h>
      34             : 
      35             : struct videomode;
      36             : 
      37             : /*
      38             :  * Note on terminology:  here, for brevity and convenience, we refer to connector
      39             :  * control chips as 'CRTCs'.  They can control any type of connector, VGA, LVDS,
      40             :  * DVI, etc.  And 'screen' refers to the whole of the visible display, which
      41             :  * may span multiple monitors (and therefore multiple CRTC and connector
      42             :  * structures).
      43             :  */
      44             : 
      45             : /**
      46             :  * enum drm_mode_status - hardware support status of a mode
      47             :  * @MODE_OK: Mode OK
      48             :  * @MODE_HSYNC: hsync out of range
      49             :  * @MODE_VSYNC: vsync out of range
      50             :  * @MODE_H_ILLEGAL: mode has illegal horizontal timings
      51             :  * @MODE_V_ILLEGAL: mode has illegal vertical timings
      52             :  * @MODE_BAD_WIDTH: requires an unsupported linepitch
      53             :  * @MODE_NOMODE: no mode with a matching name
      54             :  * @MODE_NO_INTERLACE: interlaced mode not supported
      55             :  * @MODE_NO_DBLESCAN: doublescan mode not supported
      56             :  * @MODE_NO_VSCAN: multiscan mode not supported
      57             :  * @MODE_MEM: insufficient video memory
      58             :  * @MODE_VIRTUAL_X: mode width too large for specified virtual size
      59             :  * @MODE_VIRTUAL_Y: mode height too large for specified virtual size
      60             :  * @MODE_MEM_VIRT: insufficient video memory given virtual size
      61             :  * @MODE_NOCLOCK: no fixed clock available
      62             :  * @MODE_CLOCK_HIGH: clock required is too high
      63             :  * @MODE_CLOCK_LOW: clock required is too low
      64             :  * @MODE_CLOCK_RANGE: clock/mode isn't in a ClockRange
      65             :  * @MODE_BAD_HVALUE: horizontal timing was out of range
      66             :  * @MODE_BAD_VVALUE: vertical timing was out of range
      67             :  * @MODE_BAD_VSCAN: VScan value out of range
      68             :  * @MODE_HSYNC_NARROW: horizontal sync too narrow
      69             :  * @MODE_HSYNC_WIDE: horizontal sync too wide
      70             :  * @MODE_HBLANK_NARROW: horizontal blanking too narrow
      71             :  * @MODE_HBLANK_WIDE: horizontal blanking too wide
      72             :  * @MODE_VSYNC_NARROW: vertical sync too narrow
      73             :  * @MODE_VSYNC_WIDE: vertical sync too wide
      74             :  * @MODE_VBLANK_NARROW: vertical blanking too narrow
      75             :  * @MODE_VBLANK_WIDE: vertical blanking too wide
      76             :  * @MODE_PANEL: exceeds panel dimensions
      77             :  * @MODE_INTERLACE_WIDTH: width too large for interlaced mode
      78             :  * @MODE_ONE_WIDTH: only one width is supported
      79             :  * @MODE_ONE_HEIGHT: only one height is supported
      80             :  * @MODE_ONE_SIZE: only one resolution is supported
      81             :  * @MODE_NO_REDUCED: monitor doesn't accept reduced blanking
      82             :  * @MODE_NO_STEREO: stereo modes not supported
      83             :  * @MODE_NO_420: ycbcr 420 modes not supported
      84             :  * @MODE_STALE: mode has become stale
      85             :  * @MODE_BAD: unspecified reason
      86             :  * @MODE_ERROR: error condition
      87             :  *
      88             :  * This enum is used to filter out modes not supported by the driver/hardware
      89             :  * combination.
      90             :  */
      91             : enum drm_mode_status {
      92             :         MODE_OK = 0,
      93             :         MODE_HSYNC,
      94             :         MODE_VSYNC,
      95             :         MODE_H_ILLEGAL,
      96             :         MODE_V_ILLEGAL,
      97             :         MODE_BAD_WIDTH,
      98             :         MODE_NOMODE,
      99             :         MODE_NO_INTERLACE,
     100             :         MODE_NO_DBLESCAN,
     101             :         MODE_NO_VSCAN,
     102             :         MODE_MEM,
     103             :         MODE_VIRTUAL_X,
     104             :         MODE_VIRTUAL_Y,
     105             :         MODE_MEM_VIRT,
     106             :         MODE_NOCLOCK,
     107             :         MODE_CLOCK_HIGH,
     108             :         MODE_CLOCK_LOW,
     109             :         MODE_CLOCK_RANGE,
     110             :         MODE_BAD_HVALUE,
     111             :         MODE_BAD_VVALUE,
     112             :         MODE_BAD_VSCAN,
     113             :         MODE_HSYNC_NARROW,
     114             :         MODE_HSYNC_WIDE,
     115             :         MODE_HBLANK_NARROW,
     116             :         MODE_HBLANK_WIDE,
     117             :         MODE_VSYNC_NARROW,
     118             :         MODE_VSYNC_WIDE,
     119             :         MODE_VBLANK_NARROW,
     120             :         MODE_VBLANK_WIDE,
     121             :         MODE_PANEL,
     122             :         MODE_INTERLACE_WIDTH,
     123             :         MODE_ONE_WIDTH,
     124             :         MODE_ONE_HEIGHT,
     125             :         MODE_ONE_SIZE,
     126             :         MODE_NO_REDUCED,
     127             :         MODE_NO_STEREO,
     128             :         MODE_NO_420,
     129             :         MODE_STALE = -3,
     130             :         MODE_BAD = -2,
     131             :         MODE_ERROR = -1
     132             : };
     133             : 
     134             : #define DRM_MODE(nm, t, c, hd, hss, hse, ht, hsk, vd, vss, vse, vt, vs, f) \
     135             :         .name = nm, .status = 0, .type = (t), .clock = (c), \
     136             :         .hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \
     137             :         .htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \
     138             :         .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \
     139             :         .vscan = (vs), .flags = (f)
     140             : 
     141             : /**
     142             :  * DRM_SIMPLE_MODE - Simple display mode
     143             :  * @hd: Horizontal resolution, width
     144             :  * @vd: Vertical resolution, height
     145             :  * @hd_mm: Display width in millimeters
     146             :  * @vd_mm: Display height in millimeters
     147             :  *
     148             :  * This macro initializes a &drm_display_mode that only contains info about
     149             :  * resolution and physical size.
     150             :  */
     151             : #define DRM_SIMPLE_MODE(hd, vd, hd_mm, vd_mm) \
     152             :         .type = DRM_MODE_TYPE_DRIVER, .clock = 1 /* pass validation */, \
     153             :         .hdisplay = (hd), .hsync_start = (hd), .hsync_end = (hd), \
     154             :         .htotal = (hd), .vdisplay = (vd), .vsync_start = (vd), \
     155             :         .vsync_end = (vd), .vtotal = (vd), .width_mm = (hd_mm), \
     156             :         .height_mm = (vd_mm)
     157             : 
     158             : #define CRTC_INTERLACE_HALVE_V  (1 << 0) /* halve V values for interlacing */
     159             : #define CRTC_STEREO_DOUBLE      (1 << 1) /* adjust timings for stereo modes */
     160             : #define CRTC_NO_DBLSCAN         (1 << 2) /* don't adjust doublescan */
     161             : #define CRTC_NO_VSCAN           (1 << 3) /* don't adjust doublescan */
     162             : #define CRTC_STEREO_DOUBLE_ONLY (CRTC_STEREO_DOUBLE | CRTC_NO_DBLSCAN | CRTC_NO_VSCAN)
     163             : 
     164             : #define DRM_MODE_FLAG_3D_MAX    DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF
     165             : 
     166             : #define DRM_MODE_MATCH_TIMINGS (1 << 0)
     167             : #define DRM_MODE_MATCH_CLOCK (1 << 1)
     168             : #define DRM_MODE_MATCH_FLAGS (1 << 2)
     169             : #define DRM_MODE_MATCH_3D_FLAGS (1 << 3)
     170             : #define DRM_MODE_MATCH_ASPECT_RATIO (1 << 4)
     171             : 
     172             : /**
     173             :  * struct drm_display_mode - DRM kernel-internal display mode structure
     174             :  * @hdisplay: horizontal display size
     175             :  * @hsync_start: horizontal sync start
     176             :  * @hsync_end: horizontal sync end
     177             :  * @htotal: horizontal total size
     178             :  * @hskew: horizontal skew?!
     179             :  * @vdisplay: vertical display size
     180             :  * @vsync_start: vertical sync start
     181             :  * @vsync_end: vertical sync end
     182             :  * @vtotal: vertical total size
     183             :  * @vscan: vertical scan?!
     184             :  * @crtc_hdisplay: hardware mode horizontal display size
     185             :  * @crtc_hblank_start: hardware mode horizontal blank start
     186             :  * @crtc_hblank_end: hardware mode horizontal blank end
     187             :  * @crtc_hsync_start: hardware mode horizontal sync start
     188             :  * @crtc_hsync_end: hardware mode horizontal sync end
     189             :  * @crtc_htotal: hardware mode horizontal total size
     190             :  * @crtc_hskew: hardware mode horizontal skew?!
     191             :  * @crtc_vdisplay: hardware mode vertical display size
     192             :  * @crtc_vblank_start: hardware mode vertical blank start
     193             :  * @crtc_vblank_end: hardware mode vertical blank end
     194             :  * @crtc_vsync_start: hardware mode vertical sync start
     195             :  * @crtc_vsync_end: hardware mode vertical sync end
     196             :  * @crtc_vtotal: hardware mode vertical total size
     197             :  *
     198             :  * This is the kernel API display mode information structure. For the
     199             :  * user-space version see struct drm_mode_modeinfo.
     200             :  *
     201             :  * The horizontal and vertical timings are defined per the following diagram.
     202             :  *
     203             :  * ::
     204             :  *
     205             :  *
     206             :  *               Active                 Front           Sync           Back
     207             :  *              Region                 Porch                          Porch
     208             :  *     <-----------------------><----------------><-------------><-------------->
     209             :  *       //////////////////////|
     210             :  *      ////////////////////// |
     211             :  *     //////////////////////  |..................               ................
     212             :  *                                                _______________
     213             :  *     <----- [hv]display ----->
     214             :  *     <------------- [hv]sync_start ------------>
     215             :  *     <--------------------- [hv]sync_end --------------------->
     216             :  *     <-------------------------------- [hv]total ----------------------------->*
     217             :  *
     218             :  * This structure contains two copies of timings. First are the plain timings,
     219             :  * which specify the logical mode, as it would be for a progressive 1:1 scanout
     220             :  * at the refresh rate userspace can observe through vblank timestamps. Then
     221             :  * there's the hardware timings, which are corrected for interlacing,
     222             :  * double-clocking and similar things. They are provided as a convenience, and
     223             :  * can be appropriately computed using drm_mode_set_crtcinfo().
     224             :  *
     225             :  * For printing you can use %DRM_MODE_FMT and DRM_MODE_ARG().
     226             :  */
     227             : struct drm_display_mode {
     228             :         /**
     229             :          * @clock:
     230             :          *
     231             :          * Pixel clock in kHz.
     232             :          */
     233             :         int clock;              /* in kHz */
     234             :         u16 hdisplay;
     235             :         u16 hsync_start;
     236             :         u16 hsync_end;
     237             :         u16 htotal;
     238             :         u16 hskew;
     239             :         u16 vdisplay;
     240             :         u16 vsync_start;
     241             :         u16 vsync_end;
     242             :         u16 vtotal;
     243             :         u16 vscan;
     244             :         /**
     245             :          * @flags:
     246             :          *
     247             :          * Sync and timing flags:
     248             :          *
     249             :          *  - DRM_MODE_FLAG_PHSYNC: horizontal sync is active high.
     250             :          *  - DRM_MODE_FLAG_NHSYNC: horizontal sync is active low.
     251             :          *  - DRM_MODE_FLAG_PVSYNC: vertical sync is active high.
     252             :          *  - DRM_MODE_FLAG_NVSYNC: vertical sync is active low.
     253             :          *  - DRM_MODE_FLAG_INTERLACE: mode is interlaced.
     254             :          *  - DRM_MODE_FLAG_DBLSCAN: mode uses doublescan.
     255             :          *  - DRM_MODE_FLAG_CSYNC: mode uses composite sync.
     256             :          *  - DRM_MODE_FLAG_PCSYNC: composite sync is active high.
     257             :          *  - DRM_MODE_FLAG_NCSYNC: composite sync is active low.
     258             :          *  - DRM_MODE_FLAG_HSKEW: hskew provided (not used?).
     259             :          *  - DRM_MODE_FLAG_BCAST: <deprecated>
     260             :          *  - DRM_MODE_FLAG_PIXMUX: <deprecated>
     261             :          *  - DRM_MODE_FLAG_DBLCLK: double-clocked mode.
     262             :          *  - DRM_MODE_FLAG_CLKDIV2: half-clocked mode.
     263             :          *
     264             :          * Additionally there's flags to specify how 3D modes are packed:
     265             :          *
     266             :          *  - DRM_MODE_FLAG_3D_NONE: normal, non-3D mode.
     267             :          *  - DRM_MODE_FLAG_3D_FRAME_PACKING: 2 full frames for left and right.
     268             :          *  - DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE: interleaved like fields.
     269             :          *  - DRM_MODE_FLAG_3D_LINE_ALTERNATIVE: interleaved lines.
     270             :          *  - DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL: side-by-side full frames.
     271             :          *  - DRM_MODE_FLAG_3D_L_DEPTH: ?
     272             :          *  - DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH: ?
     273             :          *  - DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: frame split into top and bottom
     274             :          *    parts.
     275             :          *  - DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: frame split into left and
     276             :          *    right parts.
     277             :          */
     278             :         u32 flags;
     279             : 
     280             :         /**
     281             :          * @crtc_clock:
     282             :          *
     283             :          * Actual pixel or dot clock in the hardware. This differs from the
     284             :          * logical @clock when e.g. using interlacing, double-clocking, stereo
     285             :          * modes or other fancy stuff that changes the timings and signals
     286             :          * actually sent over the wire.
     287             :          *
     288             :          * This is again in kHz.
     289             :          *
     290             :          * Note that with digital outputs like HDMI or DP there's usually a
     291             :          * massive confusion between the dot clock and the signal clock at the
     292             :          * bit encoding level. Especially when a 8b/10b encoding is used and the
     293             :          * difference is exactly a factor of 10.
     294             :          */
     295             :         int crtc_clock;
     296             :         u16 crtc_hdisplay;
     297             :         u16 crtc_hblank_start;
     298             :         u16 crtc_hblank_end;
     299             :         u16 crtc_hsync_start;
     300             :         u16 crtc_hsync_end;
     301             :         u16 crtc_htotal;
     302             :         u16 crtc_hskew;
     303             :         u16 crtc_vdisplay;
     304             :         u16 crtc_vblank_start;
     305             :         u16 crtc_vblank_end;
     306             :         u16 crtc_vsync_start;
     307             :         u16 crtc_vsync_end;
     308             :         u16 crtc_vtotal;
     309             : 
     310             :         /**
     311             :          * @width_mm:
     312             :          *
     313             :          * Addressable size of the output in mm, projectors should set this to
     314             :          * 0.
     315             :          */
     316             :         u16 width_mm;
     317             : 
     318             :         /**
     319             :          * @height_mm:
     320             :          *
     321             :          * Addressable size of the output in mm, projectors should set this to
     322             :          * 0.
     323             :          */
     324             :         u16 height_mm;
     325             : 
     326             :         /**
     327             :          * @type:
     328             :          *
     329             :          * A bitmask of flags, mostly about the source of a mode. Possible flags
     330             :          * are:
     331             :          *
     332             :          *  - DRM_MODE_TYPE_PREFERRED: Preferred mode, usually the native
     333             :          *    resolution of an LCD panel. There should only be one preferred
     334             :          *    mode per connector at any given time.
     335             :          *  - DRM_MODE_TYPE_DRIVER: Mode created by the driver, which is all of
     336             :          *    them really. Drivers must set this bit for all modes they create
     337             :          *    and expose to userspace.
     338             :          *  - DRM_MODE_TYPE_USERDEF: Mode defined or selected via the kernel
     339             :          *    command line.
     340             :          *
     341             :          * Plus a big list of flags which shouldn't be used at all, but are
     342             :          * still around since these flags are also used in the userspace ABI.
     343             :          * We no longer accept modes with these types though:
     344             :          *
     345             :          *  - DRM_MODE_TYPE_BUILTIN: Meant for hard-coded modes, unused.
     346             :          *    Use DRM_MODE_TYPE_DRIVER instead.
     347             :          *  - DRM_MODE_TYPE_DEFAULT: Again a leftover, use
     348             :          *    DRM_MODE_TYPE_PREFERRED instead.
     349             :          *  - DRM_MODE_TYPE_CLOCK_C and DRM_MODE_TYPE_CRTC_C: Define leftovers
     350             :          *    which are stuck around for hysterical raisins only. No one has an
     351             :          *    idea what they were meant for. Don't use.
     352             :          */
     353             :         u8 type;
     354             : 
     355             :         /**
     356             :          * @expose_to_userspace:
     357             :          *
     358             :          * Indicates whether the mode is to be exposed to the userspace.
     359             :          * This is to maintain a set of exposed modes while preparing
     360             :          * user-mode's list in drm_mode_getconnector ioctl. The purpose of
     361             :          * this only lies in the ioctl function, and is not to be used
     362             :          * outside the function.
     363             :          */
     364             :         bool expose_to_userspace;
     365             : 
     366             :         /**
     367             :          * @head:
     368             :          *
     369             :          * struct list_head for mode lists.
     370             :          */
     371             :         struct list_head head;
     372             : 
     373             :         /**
     374             :          * @name:
     375             :          *
     376             :          * Human-readable name of the mode, filled out with drm_mode_set_name().
     377             :          */
     378             :         char name[DRM_DISPLAY_MODE_LEN];
     379             : 
     380             :         /**
     381             :          * @status:
     382             :          *
     383             :          * Status of the mode, used to filter out modes not supported by the
     384             :          * hardware. See enum &drm_mode_status.
     385             :          */
     386             :         enum drm_mode_status status;
     387             : 
     388             :         /**
     389             :          * @picture_aspect_ratio:
     390             :          *
     391             :          * Field for setting the HDMI picture aspect ratio of a mode.
     392             :          */
     393             :         enum hdmi_picture_aspect picture_aspect_ratio;
     394             : 
     395             : };
     396             : 
     397             : /**
     398             :  * DRM_MODE_FMT - printf string for &struct drm_display_mode
     399             :  */
     400             : #define DRM_MODE_FMT    "\"%s\": %d %d %d %d %d %d %d %d %d %d 0x%x 0x%x"
     401             : 
     402             : /**
     403             :  * DRM_MODE_ARG - printf arguments for &struct drm_display_mode
     404             :  * @m: display mode
     405             :  */
     406             : #define DRM_MODE_ARG(m) \
     407             :         (m)->name, drm_mode_vrefresh(m), (m)->clock, \
     408             :         (m)->hdisplay, (m)->hsync_start, (m)->hsync_end, (m)->htotal, \
     409             :         (m)->vdisplay, (m)->vsync_start, (m)->vsync_end, (m)->vtotal, \
     410             :         (m)->type, (m)->flags
     411             : 
     412             : #define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
     413             : 
     414             : /**
     415             :  * drm_mode_is_stereo - check for stereo mode flags
     416             :  * @mode: drm_display_mode to check
     417             :  *
     418             :  * Returns:
     419             :  * True if the mode is one of the stereo modes (like side-by-side), false if
     420             :  * not.
     421             :  */
     422             : static inline bool drm_mode_is_stereo(const struct drm_display_mode *mode)
     423             : {
     424           0 :         return mode->flags & DRM_MODE_FLAG_3D_MASK;
     425             : }
     426             : 
     427             : struct drm_connector;
     428             : struct drm_cmdline_mode;
     429             : 
     430             : struct drm_display_mode *drm_mode_create(struct drm_device *dev);
     431             : void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode);
     432             : void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out,
     433             :                                const struct drm_display_mode *in);
     434             : int drm_mode_convert_umode(struct drm_device *dev,
     435             :                            struct drm_display_mode *out,
     436             :                            const struct drm_mode_modeinfo *in);
     437             : void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
     438             : void drm_mode_debug_printmodeline(const struct drm_display_mode *mode);
     439             : bool drm_mode_is_420_only(const struct drm_display_info *display,
     440             :                           const struct drm_display_mode *mode);
     441             : bool drm_mode_is_420_also(const struct drm_display_info *display,
     442             :                           const struct drm_display_mode *mode);
     443             : bool drm_mode_is_420(const struct drm_display_info *display,
     444             :                      const struct drm_display_mode *mode);
     445             : 
     446             : struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
     447             :                                       int hdisplay, int vdisplay, int vrefresh,
     448             :                                       bool reduced, bool interlaced,
     449             :                                       bool margins);
     450             : struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
     451             :                                       int hdisplay, int vdisplay, int vrefresh,
     452             :                                       bool interlaced, int margins);
     453             : struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev,
     454             :                                               int hdisplay, int vdisplay,
     455             :                                               int vrefresh, bool interlaced,
     456             :                                               int margins,
     457             :                                               int GTF_M, int GTF_2C,
     458             :                                               int GTF_K, int GTF_2J);
     459             : void drm_display_mode_from_videomode(const struct videomode *vm,
     460             :                                      struct drm_display_mode *dmode);
     461             : void drm_display_mode_to_videomode(const struct drm_display_mode *dmode,
     462             :                                    struct videomode *vm);
     463             : void drm_bus_flags_from_videomode(const struct videomode *vm, u32 *bus_flags);
     464             : 
     465             : #if defined(CONFIG_OF)
     466             : int of_get_drm_display_mode(struct device_node *np,
     467             :                             struct drm_display_mode *dmode, u32 *bus_flags,
     468             :                             int index);
     469             : int of_get_drm_panel_display_mode(struct device_node *np,
     470             :                                   struct drm_display_mode *dmode, u32 *bus_flags);
     471             : #else
     472             : static inline int of_get_drm_display_mode(struct device_node *np,
     473             :                                           struct drm_display_mode *dmode,
     474             :                                           u32 *bus_flags, int index)
     475             : {
     476             :         return -EINVAL;
     477             : }
     478             : 
     479             : static inline int of_get_drm_panel_display_mode(struct device_node *np,
     480             :                                                 struct drm_display_mode *dmode, u32 *bus_flags)
     481             : {
     482             :         return -EINVAL;
     483             : }
     484             : #endif
     485             : 
     486             : void drm_mode_set_name(struct drm_display_mode *mode);
     487             : int drm_mode_vrefresh(const struct drm_display_mode *mode);
     488             : void drm_mode_get_hv_timing(const struct drm_display_mode *mode,
     489             :                             int *hdisplay, int *vdisplay);
     490             : 
     491             : void drm_mode_set_crtcinfo(struct drm_display_mode *p,
     492             :                            int adjust_flags);
     493             : void drm_mode_copy(struct drm_display_mode *dst,
     494             :                    const struct drm_display_mode *src);
     495             : void drm_mode_init(struct drm_display_mode *dst,
     496             :                    const struct drm_display_mode *src);
     497             : struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
     498             :                                             const struct drm_display_mode *mode);
     499             : bool drm_mode_match(const struct drm_display_mode *mode1,
     500             :                     const struct drm_display_mode *mode2,
     501             :                     unsigned int match_flags);
     502             : bool drm_mode_equal(const struct drm_display_mode *mode1,
     503             :                     const struct drm_display_mode *mode2);
     504             : bool drm_mode_equal_no_clocks(const struct drm_display_mode *mode1,
     505             :                               const struct drm_display_mode *mode2);
     506             : bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_mode *mode1,
     507             :                                         const struct drm_display_mode *mode2);
     508             : 
     509             : /* for use by the crtc helper probe functions */
     510             : enum drm_mode_status drm_mode_validate_driver(struct drm_device *dev,
     511             :                                               const struct drm_display_mode *mode);
     512             : enum drm_mode_status drm_mode_validate_size(const struct drm_display_mode *mode,
     513             :                                             int maxX, int maxY);
     514             : enum drm_mode_status
     515             : drm_mode_validate_ycbcr420(const struct drm_display_mode *mode,
     516             :                            struct drm_connector *connector);
     517             : void drm_mode_prune_invalid(struct drm_device *dev,
     518             :                             struct list_head *mode_list, bool verbose);
     519             : void drm_mode_sort(struct list_head *mode_list);
     520             : void drm_connector_list_update(struct drm_connector *connector);
     521             : 
     522             : /* parsing cmdline modes */
     523             : bool
     524             : drm_mode_parse_command_line_for_connector(const char *mode_option,
     525             :                                           const struct drm_connector *connector,
     526             :                                           struct drm_cmdline_mode *mode);
     527             : struct drm_display_mode *
     528             : drm_mode_create_from_cmdline_mode(struct drm_device *dev,
     529             :                                   struct drm_cmdline_mode *cmd);
     530             : 
     531             : #endif /* __DRM_MODES_H__ */

Generated by: LCOV version 1.14