root/include/video/display_timing.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. display_timings_get

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright 2012 Steffen Trumtrar <s.trumtrar@pengutronix.de>
   4  *
   5  * description of display timings
   6  */
   7 
   8 #ifndef __LINUX_DISPLAY_TIMING_H
   9 #define __LINUX_DISPLAY_TIMING_H
  10 
  11 #include <linux/bitops.h>
  12 #include <linux/types.h>
  13 
  14 enum display_flags {
  15         DISPLAY_FLAGS_HSYNC_LOW         = BIT(0),
  16         DISPLAY_FLAGS_HSYNC_HIGH        = BIT(1),
  17         DISPLAY_FLAGS_VSYNC_LOW         = BIT(2),
  18         DISPLAY_FLAGS_VSYNC_HIGH        = BIT(3),
  19 
  20         /* data enable flag */
  21         DISPLAY_FLAGS_DE_LOW            = BIT(4),
  22         DISPLAY_FLAGS_DE_HIGH           = BIT(5),
  23         /* drive data on pos. edge */
  24         DISPLAY_FLAGS_PIXDATA_POSEDGE   = BIT(6),
  25         /* drive data on neg. edge */
  26         DISPLAY_FLAGS_PIXDATA_NEGEDGE   = BIT(7),
  27         DISPLAY_FLAGS_INTERLACED        = BIT(8),
  28         DISPLAY_FLAGS_DOUBLESCAN        = BIT(9),
  29         DISPLAY_FLAGS_DOUBLECLK         = BIT(10),
  30         /* drive sync on pos. edge */
  31         DISPLAY_FLAGS_SYNC_POSEDGE      = BIT(11),
  32         /* drive sync on neg. edge */
  33         DISPLAY_FLAGS_SYNC_NEGEDGE      = BIT(12),
  34 };
  35 
  36 /*
  37  * A single signal can be specified via a range of minimal and maximal values
  38  * with a typical value, that lies somewhere inbetween.
  39  */
  40 struct timing_entry {
  41         u32 min;
  42         u32 typ;
  43         u32 max;
  44 };
  45 
  46 /*
  47  * Single "mode" entry. This describes one set of signal timings a display can
  48  * have in one setting. This struct can later be converted to struct videomode
  49  * (see include/video/videomode.h). As each timing_entry can be defined as a
  50  * range, one struct display_timing may become multiple struct videomodes.
  51  *
  52  * Example: hsync active high, vsync active low
  53  *
  54  *                                  Active Video
  55  * Video  ______________________XXXXXXXXXXXXXXXXXXXXXX_____________________
  56  *        |<- sync ->|<- back ->|<----- active ----->|<- front ->|<- sync..
  57  *        |          |   porch  |                    |   porch   |
  58  *
  59  * HSync _|¯¯¯¯¯¯¯¯¯¯|___________________________________________|¯¯¯¯¯¯¯¯¯
  60  *
  61  * VSync ¯|__________|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|_________
  62  */
  63 struct display_timing {
  64         struct timing_entry pixelclock;
  65 
  66         struct timing_entry hactive;            /* hor. active video */
  67         struct timing_entry hfront_porch;       /* hor. front porch */
  68         struct timing_entry hback_porch;        /* hor. back porch */
  69         struct timing_entry hsync_len;          /* hor. sync len */
  70 
  71         struct timing_entry vactive;            /* ver. active video */
  72         struct timing_entry vfront_porch;       /* ver. front porch */
  73         struct timing_entry vback_porch;        /* ver. back porch */
  74         struct timing_entry vsync_len;          /* ver. sync len */
  75 
  76         enum display_flags flags;               /* display flags */
  77 };
  78 
  79 /*
  80  * This describes all timing settings a display provides.
  81  * The native_mode is the default setting for this display.
  82  * Drivers that can handle multiple videomodes should work with this struct and
  83  * convert each entry to the desired end result.
  84  */
  85 struct display_timings {
  86         unsigned int num_timings;
  87         unsigned int native_mode;
  88 
  89         struct display_timing **timings;
  90 };
  91 
  92 /* get one entry from struct display_timings */
  93 static inline struct display_timing *display_timings_get(const struct
  94                                                          display_timings *disp,
  95                                                          unsigned int index)
  96 {
  97         if (disp->num_timings > index)
  98                 return disp->timings[index];
  99         else
 100                 return NULL;
 101 }
 102 
 103 void display_timings_release(struct display_timings *disp);
 104 
 105 #endif

/* [<][>][^][v][top][bottom][index][help] */