struct_drm_display_mode(9) DRM kernel-internal display mode structure

SYNOPSIS


struct drm_display_mode {
struct list_head head;
struct drm_mode_object base;
char name[DRM_DISPLAY_MODE_LEN];
enum drm_mode_status status;
unsigned int type;
int clock;
int hdisplay;
int hsync_start;
int hsync_end;
int htotal;
int hskew;
int vdisplay;
int vsync_start;
int vsync_end;
int vtotal;
int vscan;
unsigned int flags;
int width_mm;
int height_mm;
int crtc_clock;
int crtc_hdisplay;
int crtc_hblank_start;
int crtc_hblank_end;
int crtc_hsync_start;
int crtc_hsync_end;
int crtc_htotal;
int crtc_hskew;
int crtc_vdisplay;
int crtc_vblank_start;
int crtc_vblank_end;
int crtc_vsync_start;
int crtc_vsync_end;
int crtc_vtotal;
int * private;
int private_flags;
int vrefresh;
int hsync;
enum hdmi_picture_aspect picture_aspect_ratio;
};

MEMBERS

head

struct list_head for mode lists.

base

A display mode is a normal modeset object, possibly including public userspace id.

FIXME:

This can probably be removed since the entire concept of userspace managing modes explicitly has never landed in upstream kernel mode setting support.

name[DRM_DISPLAY_MODE_LEN]

Human-readable name of the mode, filled out with drm_mode_set_name.

status

Status of the mode, used to filter out modes not supported by the hardware. See enum drm_mode_status.

type

A bitmask of flags, mostly about the source of a mode. Possible flags are:

- DRM_MODE_TYPE_BUILTIN: Meant for hard-coded modes, effectively unused. - DRM_MODE_TYPE_PREFERRED: Preferred mode, usually the native resolution of an LCD panel. There should only be one preferred mode per connector at any given time. - DRM_MODE_TYPE_DRIVER: Mode created by the driver, which is all of them really. Drivers must set this bit for all modes they create and expose to userspace.

Plus a big list of flags which shouldn't be used at all, but are still around since these flags are also used in the userspace ABI:

- DRM_MODE_TYPE_DEFAULT: Again a leftover, use DRM_MODE_TYPE_PREFERRED instead. - DRM_MODE_TYPE_CLOCK_C and DRM_MODE_TYPE_CRTC_C: Define leftovers which are stuck around for hysterical raisins only. No one has an idea what they were meant for. Don't use. - DRM_MODE_TYPE_USERDEF: Mode defined by userspace, again a vestige from older kms designs where userspace had to first add a custom mode to the kernel's mode list before it could use it. Don't use.

clock

Pixel clock in kHz.

hdisplay

horizontal display size

hsync_start

horizontal sync start

hsync_end

horizontal sync end

htotal

horizontal total size

hskew

horizontal skew?!

vdisplay

vertical display size

vsync_start

vertical sync start

vsync_end

vertical sync end

vtotal

vertical total size

vscan

vertical scan?!

flags

Sync and timing flags:

- DRM_MODE_FLAG_PHSYNC: horizontal sync is active high. - DRM_MODE_FLAG_NHSYNC: horizontal sync is active low. - DRM_MODE_FLAG_PVSYNC: vertical sync is active high. - DRM_MODE_FLAG_NVSYNC: vertical sync is active low. - DRM_MODE_FLAG_INTERLACE: mode is interlaced. - DRM_MODE_FLAG_DBLSCAN: mode uses doublescan. - DRM_MODE_FLAG_CSYNC: mode uses composite sync. - DRM_MODE_FLAG_PCSYNC: composite sync is active high. - DRM_MODE_FLAG_NCSYNC: composite sync is active low. - DRM_MODE_FLAG_HSKEW: hskew provided (not used?). - DRM_MODE_FLAG_BCAST: not used? - DRM_MODE_FLAG_PIXMUX: not used? - DRM_MODE_FLAG_DBLCLK: double-clocked mode. - DRM_MODE_FLAG_CLKDIV2: half-clocked mode.

Additionally there's flags to specify how 3D modes are packed:

- DRM_MODE_FLAG_3D_NONE: normal, non-3D mode. - DRM_MODE_FLAG_3D_FRAME_PACKING: 2 full frames for left and right. - DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE: interleaved like fields. - DRM_MODE_FLAG_3D_LINE_ALTERNATIVE: interleaved lines. - DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL: side-by-side full frames. - DRM_MODE_FLAG_3D_L_DEPTH: ? - DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH: ? - DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: frame split into top and bottom parts. - DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: frame split into left and right parts.

width_mm

Addressable size of the output in mm, projectors should set this to 0.

height_mm

Addressable size of the output in mm, projectors should set this to 0.

crtc_clock

Actual pixel or dot clock in the hardware. This differs from the logical clock when e.g. using interlacing, double-clocking, stereo modes or other fancy stuff that changes the timings and signals actually sent over the wire.

This is again in kHz.

Note that with digital outputs like HDMI or DP there's usually a massive confusion between the dot clock and the signal clock at the bit encoding level. Especially when a 8b/10b encoding is used and the difference is exactly a factor of 10.

crtc_hdisplay

hardware mode horizontal display size

crtc_hblank_start

hardware mode horizontal blank start

crtc_hblank_end

hardware mode horizontal blank end

crtc_hsync_start

hardware mode horizontal sync start

crtc_hsync_end

hardware mode horizontal sync end

crtc_htotal

hardware mode horizontal total size

crtc_hskew

hardware mode horizontal skew?!

crtc_vdisplay

hardware mode vertical display size

crtc_vblank_start

hardware mode vertical blank start

crtc_vblank_end

hardware mode vertical blank end

crtc_vsync_start

hardware mode vertical sync start

crtc_vsync_end

hardware mode vertical sync end

crtc_vtotal

hardware mode vertical total size

private

Pointer for driver private data. This can only be used for mode objects passed to drivers in modeset operations. It shouldn't be used by atomic drivers since they can store any additional data by subclassing state structures.

private_flags

Similar to private, but just an integer.

vrefresh

Vertical refresh rate, for debug output in human readable form. Not used in a functional way.

This value is in Hz.

hsync

Horizontal refresh rate, for debug output in human readable form. Not used in a functional way.

This value is in kHz.

picture_aspect_ratio

Field for setting the HDMI picture aspect ratio of a mode.

DESCRIPTION

The horizontal and vertical timings are defined per the following diagram.

Active Front Sync Back Region Porch Porch <-----------------------><----------------><-------------><--------------> //////////////////////| ////////////////////// | ////////////////////// |.................. ................ _______________ <----- [hv]display -----> <------------- [hv]sync_start ------------> <--------------------- [hv]sync_end ---------------------> <-------------------------------- [hv]total ----------------------------->*

This structure contains two copies of timings. First are the plain timings, which specify the logical mode, as it would be for a progressive 1:1 scanout at the refresh rate userspace can observe through vblank timestamps. Then there's the hardware timings, which are corrected for interlacing, double-clocking and similar things. They are provided as a convenience, and can be appropriately computed using drm_mode_set_crtcinfo.

AUTHORS

Jesse Barnes <[email protected]>
Intel Corporation,         
        

Initial version

Laurent Pinchart <[email protected]>
Ideas on board SPRL,         
        

Driver internals

Daniel Vetter <[email protected]>
Intel Corporation,         
        

Contributions all over the place

Lukas Wunner <[email protected]>

vga_switcheroo documentation

COPYRIGHT